diff -Nru ukui-biometric-auth-4.10.0.0/COPYING ukui-biometric-auth-4.20.0.0/COPYING
--- ukui-biometric-auth-4.10.0.0/COPYING	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/COPYING	1970-01-01 08:00:00.000000000 +0800
@@ -1,674 +0,0 @@
-                    GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff -Nru ukui-biometric-auth-4.10.0.0/LICENSE ukui-biometric-auth-4.20.0.0/LICENSE
--- ukui-biometric-auth-4.10.0.0/LICENSE	1970-01-01 08:00:00.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/LICENSE	2024-09-23 19:22:29.000000000 +0800
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth/i18n_ts/bo.ts ukui-biometric-auth-4.20.0.0/bioauth/i18n_ts/bo.ts
--- ukui-biometric-auth-4.10.0.0/bioauth/i18n_ts/bo.ts	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth/i18n_ts/bo.ts	2024-09-23 19:22:29.000000000 +0800
@@ -34,52 +34,57 @@
 <context>
     <name>BioDevices</name>
     <message>
-        <location filename="../src/biodevices.cpp" line="64"/>
+        <location filename="../src/biodevices.cpp" line="78"/>
         <source>Unplugging of %1 device detected</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/biodevices.cpp" line="74"/>
+        <location filename="../src/biodevices.cpp" line="88"/>
         <source>%1 device insertion detected</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/biodevices.cpp" line="83"/>
-        <source>ukui-biometric-manager</source>
+        <location filename="../src/biodevices.cpp" line="97"/>
+        <source>Biometric Manager</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/biodevices.cpp" line="86"/>
+        <location filename="../src/biodevices.cpp" line="100"/>
         <source>biometric</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/biodevices.cpp" line="457"/>
+        <location filename="../src/biodevices.cpp" line="700"/>
         <source>FingerPrint</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/biodevices.cpp" line="459"/>
+        <location filename="../src/biodevices.cpp" line="702"/>
         <source>FingerVein</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/biodevices.cpp" line="461"/>
+        <location filename="../src/biodevices.cpp" line="704"/>
         <source>Iris</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/biodevices.cpp" line="463"/>
+        <location filename="../src/biodevices.cpp" line="706"/>
         <source>Face</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/biodevices.cpp" line="465"/>
+        <location filename="../src/biodevices.cpp" line="708"/>
         <source>VoicePrint</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/biodevices.cpp" line="467"/>
+        <location filename="../src/biodevices.cpp" line="710"/>
+        <source>Ukey</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="712"/>
         <source>QRCode</source>
         <translation type="unfinished"></translation>
     </message>
@@ -95,9 +100,14 @@
 <context>
     <name>LoginOptionsWidget</name>
     <message>
-        <location filename="../src/loginoptionswidget.cpp" line="59"/>
+        <location filename="../src/loginoptionswidget.cpp" line="79"/>
         <source>Login Options</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../src/loginoptionswidget.cpp" line="320"/>
+        <source>Password</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth/i18n_ts/bo_CN.ts ukui-biometric-auth-4.20.0.0/bioauth/i18n_ts/bo_CN.ts
--- ukui-biometric-auth-4.10.0.0/bioauth/i18n_ts/bo_CN.ts	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth/i18n_ts/bo_CN.ts	2024-09-23 19:22:29.000000000 +0800
@@ -75,7 +75,7 @@
         <translation>མཛུབ་མོའི་སྡོད་རྩ།</translation>
     </message>
     <message>
-        <source>ukui-biometric-manager</source>
+        <source>Biometric Manager</source>
         <translation>སྐྱེ་དངོས་ཁྱབ་རྟགས་དོ་དམ་ལག་ཆ།</translation>
     </message>
     <message>
@@ -83,8 +83,8 @@
         <translation>ཨང་ཀི་ཕྱག་པ།</translation>
     </message>
     <message>
-        <source>ukey</source>
-        <translation type="unfinished"></translation>
+        <source>Ukey</source>
+        <translation>བདེ་འཇགས་གསང་ལྡེ་</translation>
     </message>
 </context>
 <context>
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth/i18n_ts/es.ts ukui-biometric-auth-4.20.0.0/bioauth/i18n_ts/es.ts
--- ukui-biometric-auth-4.10.0.0/bioauth/i18n_ts/es.ts	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth/i18n_ts/es.ts	2024-09-23 19:22:29.000000000 +0800
@@ -71,11 +71,15 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>ukui-biometric-manager</source>
+        <source>QRCode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>QRCode</source>
+        <source>Biometric Manager</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Ukey</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -104,5 +108,9 @@
         <source>Login Options</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Password</source>
+        <translation type="unfinished">Contraseña</translation>
+    </message>
 </context>
 </TS>
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth/i18n_ts/fr.ts ukui-biometric-auth-4.20.0.0/bioauth/i18n_ts/fr.ts
--- ukui-biometric-auth-4.10.0.0/bioauth/i18n_ts/fr.ts	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth/i18n_ts/fr.ts	2024-09-23 19:22:29.000000000 +0800
@@ -71,11 +71,15 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>ukui-biometric-manager</source>
+        <source>QRCode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>QRCode</source>
+        <source>Biometric Manager</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Ukey</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -104,5 +108,9 @@
         <source>Login Options</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Password</source>
+        <translation type="unfinished">Mot de passe</translation>
+    </message>
 </context>
 </TS>
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth/i18n_ts/kk.ts ukui-biometric-auth-4.20.0.0/bioauth/i18n_ts/kk.ts
--- ukui-biometric-auth-4.10.0.0/bioauth/i18n_ts/kk.ts	1970-01-01 08:00:00.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth/i18n_ts/kk.ts	2024-09-23 19:22:29.000000000 +0800
@@ -0,0 +1,184 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="kk">
+<context>
+    <name>BioAuthWidget</name>
+    <message>
+        <location filename="../src/bioauthwidget.ui" line="14"/>
+        <source>Form</source>
+        <translation>كەستە</translation>
+    </message>
+    <message>
+        <source>More</source>
+        <translation type="vanished">更多</translation>
+    </message>
+    <message>
+        <location filename="../src/bioauthwidget.ui" line="146"/>
+        <location filename="../src/bioauthwidget.cpp" line="41"/>
+        <source>Retry</source>
+        <translation>قاتە قاتە سىناۋ</translation>
+    </message>
+    <message>
+        <source>Too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">验证失败达最大次数,请使用密码解锁</translation>
+    </message>
+    <message>
+        <source>Bioauth authentication failed, you still have %1 verification opportunities</source>
+        <translation type="vanished">生物认证失败,您还有%1次尝试机会</translation>
+    </message>
+    <message>
+        <source>Password</source>
+        <translation type="vanished">密码</translation>
+    </message>
+    <message>
+        <source>Current Device: </source>
+        <translation type="vanished">当前设备:</translation>
+    </message>
+    <message>
+        <location filename="../src/bioauthwidget.cpp" line="96"/>
+        <location filename="../src/bioauthwidget.cpp" line="212"/>
+        <source>%1 too many unsuccessful attempts,please enter password.</source>
+        <translation>جەڭىلىپ بولۋ رەت سانى اسقىن كوپ بولىپ كەتتى، قۇپيا نۇمىردى كىرگىزىڭىز</translation>
+    </message>
+    <message>
+        <location filename="../src/bioauthwidget.cpp" line="102"/>
+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
+        <translation>سالاۋاتىن دالەلدەۋ جەڭىلىپ قالدى، جانە ەكٸ رەت ورايڭىز قالدى</translation>
+    </message>
+    <message>
+        <location filename="../src/bioauthwidget.cpp" line="226"/>
+        <source>Please use wechat to scan the code</source>
+        <translation>ئۈندىداردا كەسكىندەۋىش</translation>
+    </message>
+</context>
+<context>
+    <name>BioDevices</name>
+    <message>
+        <location filename="../src/biodevices.cpp" line="78"/>
+        <source>Unplugging of %1 device detected</source>
+        <translation>تەكسەرٸپ بايقاعان 1 اسبابٸن تارتىپ شىعارماق</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="88"/>
+        <source>%1 device insertion detected</source>
+        <translation>1 اسبابٸتٸڭ كىرگىزىلگەنىن تەكسەرٸپ شىقپاق</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="97"/>
+        <source>Biometric Manager</source>
+        <translation>بىيولوگىيەلىك ەرەكشەلىكتى باسقارۋ قۇرالى</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="100"/>
+        <source>biometric</source>
+        <translation>بىيولوگىيەلىك ەرەكشەلىك</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="700"/>
+        <source>FingerPrint</source>
+        <translation>بارماقشى ٴٸزٸ</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="702"/>
+        <source>FingerVein</source>
+        <translation>بارماقشى ۋېنا تومۇرى</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="704"/>
+        <source>Iris</source>
+        <translation>كوز ئالمىسى تۇستى پەردىسى</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="706"/>
+        <source>Face</source>
+        <translation>جۇز</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="708"/>
+        <source>VoicePrint</source>
+        <translation>حاۋىپسىزدىك شىڧىرلىق يٸندەكٸسٸ</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="710"/>
+        <source>Ukey</source>
+        <translation>ساندىق كۋالىك</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="712"/>
+        <source>QRCode</source>
+        <translation>ەكٸلٸك رازمەر</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+</context>
+<context>
+    <name>BioDevicesWidget</name>
+    <message>
+        <location filename="../src/biodeviceswidget.ui" line="14"/>
+        <source>Form</source>
+        <translation>كەستە</translation>
+    </message>
+    <message>
+        <source>Device types:</source>
+        <translation type="vanished">设备类型:</translation>
+    </message>
+    <message>
+        <source>Back</source>
+        <translation type="vanished">返回</translation>
+    </message>
+    <message>
+        <source>OK</source>
+        <translation type="vanished">确定</translation>
+    </message>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="vanished">指纹</translation>
+    </message>
+</context>
+<context>
+    <name>LoginOptionsWidget</name>
+    <message>
+        <location filename="../src/loginoptionswidget.cpp" line="79"/>
+        <source>Login Options</source>
+        <translation>كىرۋ تالدانبالارٸ</translation>
+    </message>
+    <message>
+        <location filename="../src/loginoptionswidget.cpp" line="320"/>
+        <source>Password</source>
+        <translation>قۇپيا كىلت</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+    <message>
+        <source>Biometric</source>
+        <translation type="vanished">生物识别</translation>
+    </message>
+</context>
+<context>
+    <name>QObject</name>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="vanished">指纹</translation>
+    </message>
+    <message>
+        <source>FingerVein</source>
+        <translation type="vanished">指静脉</translation>
+    </message>
+    <message>
+        <source>Iris</source>
+        <translation type="vanished">虹膜</translation>
+    </message>
+    <message>
+        <source>Face</source>
+        <translation type="vanished">人脸</translation>
+    </message>
+    <message>
+        <source>VoicePrint</source>
+        <translation type="vanished">声纹</translation>
+    </message>
+</context>
+</TS>
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth/i18n_ts/ky.ts ukui-biometric-auth-4.20.0.0/bioauth/i18n_ts/ky.ts
--- ukui-biometric-auth-4.10.0.0/bioauth/i18n_ts/ky.ts	1970-01-01 08:00:00.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth/i18n_ts/ky.ts	2024-09-23 19:22:29.000000000 +0800
@@ -0,0 +1,184 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="ky">
+<context>
+    <name>BioAuthWidget</name>
+    <message>
+        <location filename="../src/bioauthwidget.ui" line="14"/>
+        <source>Form</source>
+        <translation>جادىبال</translation>
+    </message>
+    <message>
+        <source>More</source>
+        <translation type="vanished">更多</translation>
+    </message>
+    <message>
+        <location filename="../src/bioauthwidget.ui" line="146"/>
+        <location filename="../src/bioauthwidget.cpp" line="41"/>
+        <source>Retry</source>
+        <translation>قايرا قايرا سىنوو</translation>
+    </message>
+    <message>
+        <source>Too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">验证失败达最大次数,请使用密码解锁</translation>
+    </message>
+    <message>
+        <source>Bioauth authentication failed, you still have %1 verification opportunities</source>
+        <translation type="vanished">生物认证失败,您还有%1次尝试机会</translation>
+    </message>
+    <message>
+        <source>Password</source>
+        <translation type="vanished">密码</translation>
+    </message>
+    <message>
+        <source>Current Device: </source>
+        <translation type="vanished">当前设备:</translation>
+    </message>
+    <message>
+        <location filename="../src/bioauthwidget.cpp" line="96"/>
+        <location filename="../src/bioauthwidget.cpp" line="212"/>
+        <source>%1 too many unsuccessful attempts,please enter password.</source>
+        <translation>جەڭىلۉۉ بولۇش  ىرەت  سانى  ارتىقچا  كۅپ بولۇپ كەتتى، جاشىرۇۇن  نومۇردۇ  كىرگىزىڭ</translation>
+    </message>
+    <message>
+        <location filename="../src/bioauthwidget.cpp" line="102"/>
+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
+        <translation>تولۇمدۇۇلۇق دالىلدۅ جەڭىلۉۉ بولدۇ ، داعى ەكى  ىرەت  وڭۇتۇڭۇز قالدى</translation>
+    </message>
+    <message>
+        <location filename="../src/bioauthwidget.cpp" line="226"/>
+        <source>Please use wechat to scan the code</source>
+        <translation>ئۈندىداردا ىسكاننىردوو</translation>
+    </message>
+</context>
+<context>
+    <name>BioDevices</name>
+    <message>
+        <location filename="../src/biodevices.cpp" line="78"/>
+        <source>Unplugging of %1 device detected</source>
+        <translation>تەكشەرىپ  بايقاعان 1 اسپاپتى تارتىپ  چىعارۇۇ</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="88"/>
+        <source>%1 device insertion detected</source>
+        <translation>1  جابدۇۇسۇنۇن كىرگىزىلگەندىگىن تەكشەرىپ  چىعىش</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="97"/>
+        <source>Biometric Manager</source>
+        <translation>بىيولوگىيەلىك ۅزگۅچۅلۉگۉ باشقارىش  قۇرالى</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="100"/>
+        <source>biometric</source>
+        <translation>بىيولوگىيەلىك ۅزگۅچۅلۉك</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="700"/>
+        <source>FingerPrint</source>
+        <translation>بارماق ئزى</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="702"/>
+        <source>FingerVein</source>
+        <translation>بارماق ۋېنا تومۇرى</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="704"/>
+        <source>Iris</source>
+        <translation>كۅز ئالمىسى رەڭدار پەردىسى</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="706"/>
+        <source>Face</source>
+        <translation>جۉز</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="708"/>
+        <source>VoicePrint</source>
+        <translation>قووپسۇزدۇق  شىڧىرلىق اچقىچى</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="710"/>
+        <source>Ukey</source>
+        <translation>ەسەپتىك   كۉبۅلۉك</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="712"/>
+        <source>QRCode</source>
+        <translation>ەكىلىك  قۇپۇيا نومۇر</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+</context>
+<context>
+    <name>BioDevicesWidget</name>
+    <message>
+        <location filename="../src/biodeviceswidget.ui" line="14"/>
+        <source>Form</source>
+        <translation>جادىبال</translation>
+    </message>
+    <message>
+        <source>Device types:</source>
+        <translation type="vanished">设备类型:</translation>
+    </message>
+    <message>
+        <source>Back</source>
+        <translation type="vanished">返回</translation>
+    </message>
+    <message>
+        <source>OK</source>
+        <translation type="vanished">确定</translation>
+    </message>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="vanished">指纹</translation>
+    </message>
+</context>
+<context>
+    <name>LoginOptionsWidget</name>
+    <message>
+        <location filename="../src/loginoptionswidget.cpp" line="79"/>
+        <source>Login Options</source>
+        <translation>كىرۉۉ  تاندالمالارى</translation>
+    </message>
+    <message>
+        <location filename="../src/loginoptionswidget.cpp" line="320"/>
+        <source>Password</source>
+        <translation>جاشىرۇۇن  اچقىچ</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+    <message>
+        <source>Biometric</source>
+        <translation type="vanished">生物识别</translation>
+    </message>
+</context>
+<context>
+    <name>QObject</name>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="vanished">指纹</translation>
+    </message>
+    <message>
+        <source>FingerVein</source>
+        <translation type="vanished">指静脉</translation>
+    </message>
+    <message>
+        <source>Iris</source>
+        <translation type="vanished">虹膜</translation>
+    </message>
+    <message>
+        <source>Face</source>
+        <translation type="vanished">人脸</translation>
+    </message>
+    <message>
+        <source>VoicePrint</source>
+        <translation type="vanished">声纹</translation>
+    </message>
+</context>
+</TS>
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth/i18n_ts/mn.ts ukui-biometric-auth-4.20.0.0/bioauth/i18n_ts/mn.ts
--- ukui-biometric-auth-4.10.0.0/bioauth/i18n_ts/mn.ts	1970-01-01 08:00:00.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth/i18n_ts/mn.ts	2024-09-23 19:22:29.000000000 +0800
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="mn">
+<context>
+    <name>BioAuthWidget</name>
+    <message>
+        <location filename="../src/bioauthwidget.ui" line="14"/>
+        <source>Form</source>
+        <translation></translation>
+    </message>
+    <message>
+        <source>More</source>
+        <translation type="vanished">更多</translation>
+    </message>
+    <message>
+        <location filename="../src/bioauthwidget.ui" line="146"/>
+        <location filename="../src/bioauthwidget.cpp" line="41"/>
+        <source>Retry</source>
+        <translation>ᠳᠠᠬᠢᠨ ᠲᠤᠷᠰᠢᠬᠤ</translation>
+    </message>
+    <message>
+        <source>Too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">验证失败达最大次数,请使用密码解锁</translation>
+    </message>
+    <message>
+        <source>Bioauth authentication failed, you still have %1 verification opportunities</source>
+        <translation type="vanished">生物认证失败,您还有%1次尝试机会</translation>
+    </message>
+    <message>
+        <source>Password</source>
+        <translation>ᠨᠢᠭᠤᠴᠠ ᠺᠣᠳ᠋</translation>
+    </message>
+    <message>
+        <source>Current Device: </source>
+        <translation type="vanished">当前设备:</translation>
+    </message>
+    <message>
+        <location filename="../src/bioauthwidget.cpp" line="96"/>
+        <location filename="../src/bioauthwidget.cpp" line="212"/>
+        <source>%1 too many unsuccessful attempts,please enter password.</source>
+        <translation>%1 ᠢᠯᠠᠭᠳᠠᠭᠰᠠᠨ ᠲᠤᠷᠰᠢᠬᠤ ᠤᠳᠠᠭ᠎ᠠ ᠲᠣᠭ᠎ᠠ ᠬᠡᠳᠦ ᠣᠯᠠᠨ ᠂ ᠨᠢᠭᠤᠴᠠ ᠺᠣᠳ᠋ ᠣᠷᠣᠭᠤᠯᠤᠭᠠᠷᠠᠢ ᠃</translation>
+    </message>
+    <message>
+        <location filename="../src/bioauthwidget.cpp" line="102"/>
+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
+        <translation>%1 ᠪᠡᠶ᠎ᠡ᠎ᠶ᠋ᠢᠨ ᠬᠢᠷᠢ᠎ᠶ᠋ᠢᠨ ᠰᠢᠯᠭᠠᠨ ᠪᠠᠲᠤᠯᠠᠯᠲᠠ ᠢᠯᠠᠭᠳᠠᠪᠠ ᠂ ᠮᠥᠨ %2 ᠦᠯᠡᠳᠡᠬᠦ ᠲᠣᠬᠢᠶᠠᠯ ᠪᠣᠢ</translation>
+    </message>
+    <message>
+        <location filename="../src/bioauthwidget.cpp" line="226"/>
+        <source>Please use wechat to scan the code</source>
+        <translation>ᠸᠢᠴᠠᠲ᠎ᠢ᠋ᠶ᠋ᠠᠷ ᠦᠰᠦᠭ ᠰᠢᠷᠪᠢᠬᠦ ᠪᠣᠯᠪᠠᠤ</translation>
+    </message>
+</context>
+<context>
+    <name>BioDevices</name>
+    <message>
+        <location filename="../src/biodevices.cpp" line="78"/>
+        <source>Unplugging of %1 device detected</source>
+        <translation>%1 ᠲᠥᠬᠥᠭᠡᠷᠦᠮᠵᠢ᠎ᠶ᠋ᠢ ᠰᠤᠭᠤᠯᠵᠤ ᠭᠠᠷᠭᠠᠨ ᠠ</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="88"/>
+        <source>%1 device insertion detected</source>
+        <translation>%1 ᠲᠥᠬᠥᠭᠡᠷᠦᠮᠵᠢ ᠬᠠᠪᠴᠢᠭᠤᠯᠤᠭᠰᠠᠨ᠎ᠢ᠋ ᠪᠠᠢᠴᠠᠭᠠᠨ ᠣᠯᠪᠠ</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="97"/>
+        <source>Biometric Manager</source>
+        <translation>ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ᠎ᠤ᠋ᠨ ᠣᠨᠴᠠᠯᠢᠭ ᠬᠠᠮᠢᠶᠠᠷᠤᠯᠲᠠ᠎ᠶ᠋ᠢᠨ ᠪᠠᠭᠠᠵᠢ</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="100"/>
+        <source>biometric</source>
+        <translation>ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ᠎ᠤ᠋ᠨ ᠣᠨᠴᠠᠯᠢᠭ</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="700"/>
+        <source>FingerPrint</source>
+        <translation>ᠬᠤᠷᠤᠭᠤᠨ ᠬᠡ</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="702"/>
+        <source>FingerVein</source>
+        <translation>ᠬᠤᠷᠤᠭᠤᠨ ᠨᠠᠮᠵᠢᠭᠤᠨ ᠰᠤᠳᠠᠰᠤ</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="704"/>
+        <source>Iris</source>
+        <translation>ᠰᠣᠯᠣᠩᠭ᠎ᠠ ᠪᠦᠷᠬᠦᠭᠦᠯ</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="706"/>
+        <source>Face</source>
+        <translation>ᠬᠥᠮᠦᠨ᠎ᠦ᠌ ᠨᠢᠭᠤᠷ ᠲᠠᠨᠢᠬᠤ</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="708"/>
+        <source>VoicePrint</source>
+        <translation>ᠳᠠᠭᠤᠨ ᠡᠷᠢᠶᠡᠨ</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="710"/>
+        <source>Ukey</source>
+        <translation>ᠠᠶᠤᠯᠭᠦᠢ ᠨᠢᠭᠤᠴᠠ ᠲᠦᠯᠬᠢᠭᠦᠷ</translation>
+    </message>
+    <message>
+        <source>ukey</source>
+        <translation type="vanished">ᠠᠶᠤᠯᠭᠦᠢ ᠨᠢᠭᠤᠴᠠ ᠲᠦᠯᠬᠢᠭᠦᠷ</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="712"/>
+        <source>QRCode</source>
+        <translation>ᠬᠣᠶᠠᠷ ᠬᠡᠮᠵᠢᠯᠲᠦ ᠺᠣᠳ᠋</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+</context>
+<context>
+    <name>BioDevicesWidget</name>
+    <message>
+        <location filename="../src/biodeviceswidget.ui" line="14"/>
+        <source>Form</source>
+        <translation></translation>
+    </message>
+    <message>
+        <source>Device types:</source>
+        <translation type="vanished">设备类型:</translation>
+    </message>
+    <message>
+        <source>Back</source>
+        <translation type="vanished">返回</translation>
+    </message>
+    <message>
+        <source>OK</source>
+        <translation type="vanished">确定</translation>
+    </message>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="vanished">指纹</translation>
+    </message>
+</context>
+<context>
+    <name>LoginOptionsWidget</name>
+    <message>
+        <location filename="../src/loginoptionswidget.cpp" line="79"/>
+        <source>Login Options</source>
+        <translation>ᠲᠡᠮᠳᠡᠭᠯᠡᠬᠦ ᠰᠤᠩᠭᠤᠭᠳᠠᠬᠤᠨ</translation>
+    </message>
+    <message>
+        <location filename="../src/loginoptionswidget.cpp" line="320"/>
+        <source>Password</source>
+        <translation>ᠨᠢᠭᠤᠴᠠ ᠺᠣᠳ᠋</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+    <message>
+        <source>Biometric</source>
+        <translation type="vanished">生物识别</translation>
+    </message>
+</context>
+<context>
+    <name>QObject</name>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="vanished">指纹</translation>
+    </message>
+    <message>
+        <source>FingerVein</source>
+        <translation type="vanished">指静脉</translation>
+    </message>
+    <message>
+        <source>Iris</source>
+        <translation type="vanished">虹膜</translation>
+    </message>
+    <message>
+        <source>Face</source>
+        <translation type="vanished">人脸</translation>
+    </message>
+    <message>
+        <source>VoicePrint</source>
+        <translation type="vanished">声纹</translation>
+    </message>
+</context>
+</TS>
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth/i18n_ts/pt.ts ukui-biometric-auth-4.20.0.0/bioauth/i18n_ts/pt.ts
--- ukui-biometric-auth-4.10.0.0/bioauth/i18n_ts/pt.ts	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth/i18n_ts/pt.ts	2024-09-23 19:22:29.000000000 +0800
@@ -71,11 +71,15 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>ukui-biometric-manager</source>
+        <source>QRCode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>QRCode</source>
+        <source>Biometric Manager</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Ukey</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -104,5 +108,9 @@
         <source>Login Options</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Password</source>
+        <translation type="unfinished">Senha</translation>
+    </message>
 </context>
 </TS>
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth/i18n_ts/ru.ts ukui-biometric-auth-4.20.0.0/bioauth/i18n_ts/ru.ts
--- ukui-biometric-auth-4.10.0.0/bioauth/i18n_ts/ru.ts	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth/i18n_ts/ru.ts	2024-09-23 19:22:29.000000000 +0800
@@ -71,11 +71,15 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>ukui-biometric-manager</source>
+        <source>QRCode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>QRCode</source>
+        <source>Biometric Manager</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Ukey</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -104,5 +108,9 @@
         <source>Login Options</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Password</source>
+        <translation type="unfinished">пароль</translation>
+    </message>
 </context>
 </TS>
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth/i18n_ts/tr.ts ukui-biometric-auth-4.20.0.0/bioauth/i18n_ts/tr.ts
--- ukui-biometric-auth-4.10.0.0/bioauth/i18n_ts/tr.ts	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth/i18n_ts/tr.ts	2024-09-23 19:22:29.000000000 +0800
@@ -46,52 +46,57 @@
 <context>
     <name>BioDevices</name>
     <message>
-        <location filename="../src/biodevices.cpp" line="64"/>
+        <location filename="../src/biodevices.cpp" line="78"/>
         <source>Unplugging of %1 device detected</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/biodevices.cpp" line="74"/>
+        <location filename="../src/biodevices.cpp" line="88"/>
         <source>%1 device insertion detected</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/biodevices.cpp" line="83"/>
-        <source>ukui-biometric-manager</source>
+        <location filename="../src/biodevices.cpp" line="97"/>
+        <source>Biometric Manager</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/biodevices.cpp" line="86"/>
+        <location filename="../src/biodevices.cpp" line="100"/>
         <source>biometric</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/biodevices.cpp" line="457"/>
+        <location filename="../src/biodevices.cpp" line="700"/>
         <source>FingerPrint</source>
         <translation>Parmak İzi</translation>
     </message>
     <message>
-        <location filename="../src/biodevices.cpp" line="459"/>
+        <location filename="../src/biodevices.cpp" line="702"/>
         <source>FingerVein</source>
         <translation>Damar İzi</translation>
     </message>
     <message>
-        <location filename="../src/biodevices.cpp" line="461"/>
+        <location filename="../src/biodevices.cpp" line="704"/>
         <source>Iris</source>
         <translation>Göz</translation>
     </message>
     <message>
-        <location filename="../src/biodevices.cpp" line="463"/>
+        <location filename="../src/biodevices.cpp" line="706"/>
         <source>Face</source>
         <translation>Yüz</translation>
     </message>
     <message>
-        <location filename="../src/biodevices.cpp" line="465"/>
+        <location filename="../src/biodevices.cpp" line="708"/>
         <source>VoicePrint</source>
         <translation>Ses İzi</translation>
     </message>
     <message>
-        <location filename="../src/biodevices.cpp" line="467"/>
+        <location filename="../src/biodevices.cpp" line="710"/>
+        <source>Ukey</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="712"/>
         <source>QRCode</source>
         <translation type="unfinished"></translation>
     </message>
@@ -123,10 +128,15 @@
 <context>
     <name>LoginOptionsWidget</name>
     <message>
-        <location filename="../src/loginoptionswidget.cpp" line="59"/>
+        <location filename="../src/loginoptionswidget.cpp" line="79"/>
         <source>Login Options</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../src/loginoptionswidget.cpp" line="320"/>
+        <source>Password</source>
+        <translation type="unfinished">Parola</translation>
+    </message>
 </context>
 <context>
     <name>QObject</name>
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth/i18n_ts/ug.ts ukui-biometric-auth-4.20.0.0/bioauth/i18n_ts/ug.ts
--- ukui-biometric-auth-4.10.0.0/bioauth/i18n_ts/ug.ts	1970-01-01 08:00:00.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth/i18n_ts/ug.ts	2024-09-23 19:22:29.000000000 +0800
@@ -0,0 +1,184 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="ug">
+<context>
+    <name>BioAuthWidget</name>
+    <message>
+        <location filename="../src/bioauthwidget.ui" line="14"/>
+        <source>Form</source>
+        <translation>جەدۋەل</translation>
+    </message>
+    <message>
+        <source>More</source>
+        <translation type="vanished">更多</translation>
+    </message>
+    <message>
+        <location filename="../src/bioauthwidget.ui" line="146"/>
+        <location filename="../src/bioauthwidget.cpp" line="41"/>
+        <source>Retry</source>
+        <translation>قايتا قايتا تىرشىش</translation>
+    </message>
+    <message>
+        <source>Too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">验证失败达最大次数,请使用密码解锁</translation>
+    </message>
+    <message>
+        <source>Bioauth authentication failed, you still have %1 verification opportunities</source>
+        <translation type="vanished">生物认证失败,您还有%1次尝试机会</translation>
+    </message>
+    <message>
+        <source>Password</source>
+        <translation type="vanished">密码</translation>
+    </message>
+    <message>
+        <source>Current Device: </source>
+        <translation type="vanished">当前设备:</translation>
+    </message>
+    <message>
+        <location filename="../src/bioauthwidget.cpp" line="96"/>
+        <location filename="../src/bioauthwidget.cpp" line="212"/>
+        <source>%1 too many unsuccessful attempts,please enter password.</source>
+        <translation>مەغلۇپ بولۇش قېتىم سانى زىيادە كۆپ بولۇپ كەتتى، مەخپىي نومۇرنى كىرگۈزۈڭ</translation>
+    </message>
+    <message>
+        <location filename="../src/bioauthwidget.cpp" line="102"/>
+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
+        <translation>سالاھىيىتىنى دەلىللەش مەغلۇپ بولدى، يەنە ئىككى قېتىم پۇرسىتىڭىز قالدى</translation>
+    </message>
+    <message>
+        <location filename="../src/bioauthwidget.cpp" line="226"/>
+        <source>Please use wechat to scan the code</source>
+        <translation>ئۈندىداردا سىكانىرلاڭ</translation>
+    </message>
+</context>
+<context>
+    <name>BioDevices</name>
+    <message>
+        <location filename="../src/biodevices.cpp" line="78"/>
+        <source>Unplugging of %1 device detected</source>
+        <translation>تەكشۈرۈپ بايقىغان 1 ئۈسكۈنىنى تارتىپ چىقارماق</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="88"/>
+        <source>%1 device insertion detected</source>
+        <translation>1 ئۈسكۈنىنىڭ كىرگۈزۈلگەنلىكىنى تەكشۈرۈپ چىقماق</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="97"/>
+        <source>Biometric Manager</source>
+        <translation>بىئولەگىيەلىك ئالاھىدىلىكنى باشقۇرۇش قورالى</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="100"/>
+        <source>biometric</source>
+        <translation>بىئولوگىيەلىك ئالاھىدىلىك</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="700"/>
+        <source>FingerPrint</source>
+        <translation>بارماق ئىزى</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="702"/>
+        <source>FingerVein</source>
+        <translation>بارماقVein</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="704"/>
+        <source>Iris</source>
+        <translation>ئېرسى</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="706"/>
+        <source>Face</source>
+        <translation>يۈز</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="708"/>
+        <source>VoicePrint</source>
+        <translation>بىخەتەرلىك شىڧىرلىق ئاچقۇچى</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="710"/>
+        <source>Ukey</source>
+        <translation>رەقەملىك گۇۋاھنامە</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="712"/>
+        <source>QRCode</source>
+        <translation>ئىككىلىك كود</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+</context>
+<context>
+    <name>BioDevicesWidget</name>
+    <message>
+        <location filename="../src/biodeviceswidget.ui" line="14"/>
+        <source>Form</source>
+        <translation>جەدۋەل</translation>
+    </message>
+    <message>
+        <source>Device types:</source>
+        <translation type="vanished">设备类型:</translation>
+    </message>
+    <message>
+        <source>Back</source>
+        <translation type="vanished">返回</translation>
+    </message>
+    <message>
+        <source>OK</source>
+        <translation type="vanished">确定</translation>
+    </message>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="vanished">指纹</translation>
+    </message>
+</context>
+<context>
+    <name>LoginOptionsWidget</name>
+    <message>
+        <location filename="../src/loginoptionswidget.cpp" line="79"/>
+        <source>Login Options</source>
+        <translation>كىرىش تاللانمىلىرى</translation>
+    </message>
+    <message>
+        <location filename="../src/loginoptionswidget.cpp" line="320"/>
+        <source>Password</source>
+        <translation>مەخپىي ئاچقۇچ</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+    <message>
+        <source>Biometric</source>
+        <translation type="vanished">生物识别</translation>
+    </message>
+</context>
+<context>
+    <name>QObject</name>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="vanished">指纹</translation>
+    </message>
+    <message>
+        <source>FingerVein</source>
+        <translation type="vanished">指静脉</translation>
+    </message>
+    <message>
+        <source>Iris</source>
+        <translation type="vanished">虹膜</translation>
+    </message>
+    <message>
+        <source>Face</source>
+        <translation type="vanished">人脸</translation>
+    </message>
+    <message>
+        <source>VoicePrint</source>
+        <translation type="vanished">声纹</translation>
+    </message>
+</context>
+</TS>
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth/i18n_ts/zh_CN.ts ukui-biometric-auth-4.20.0.0/bioauth/i18n_ts/zh_CN.ts
--- ukui-biometric-auth-4.10.0.0/bioauth/i18n_ts/zh_CN.ts	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth/i18n_ts/zh_CN.ts	2024-09-23 19:22:29.000000000 +0800
@@ -28,7 +28,7 @@
     </message>
     <message>
         <source>Password</source>
-        <translation>密码</translation>
+        <translation type="vanished">密码</translation>
     </message>
     <message>
         <source>Current Device: </source>
@@ -54,57 +54,57 @@
 <context>
     <name>BioDevices</name>
     <message>
-        <location filename="../src/biodevices.cpp" line="64"/>
+        <location filename="../src/biodevices.cpp" line="78"/>
         <source>Unplugging of %1 device detected</source>
         <translation>检测到%1设备拔出</translation>
     </message>
     <message>
-        <location filename="../src/biodevices.cpp" line="74"/>
+        <location filename="../src/biodevices.cpp" line="88"/>
         <source>%1 device insertion detected</source>
         <translation>检测到%1设备插入</translation>
     </message>
     <message>
-        <location filename="../src/biodevices.cpp" line="83"/>
-        <source>ukui-biometric-manager</source>
+        <location filename="../src/biodevices.cpp" line="97"/>
+        <source>Biometric Manager</source>
         <translation>生物特征管理工具</translation>
     </message>
     <message>
-        <location filename="../src/biodevices.cpp" line="86"/>
+        <location filename="../src/biodevices.cpp" line="100"/>
         <source>biometric</source>
         <translation>生物特征</translation>
     </message>
     <message>
-        <location filename="../src/biodevices.cpp" line="457"/>
+        <location filename="../src/biodevices.cpp" line="700"/>
         <source>FingerPrint</source>
         <translation>指纹</translation>
     </message>
     <message>
-        <location filename="../src/biodevices.cpp" line="459"/>
+        <location filename="../src/biodevices.cpp" line="702"/>
         <source>FingerVein</source>
         <translation>指静脉</translation>
     </message>
     <message>
-        <location filename="../src/biodevices.cpp" line="461"/>
+        <location filename="../src/biodevices.cpp" line="704"/>
         <source>Iris</source>
         <translation>虹膜</translation>
     </message>
     <message>
-        <location filename="../src/biodevices.cpp" line="463"/>
+        <location filename="../src/biodevices.cpp" line="706"/>
         <source>Face</source>
         <translation>人脸识别</translation>
     </message>
     <message>
-        <location filename="../src/biodevices.cpp" line="465"/>
+        <location filename="../src/biodevices.cpp" line="708"/>
         <source>VoicePrint</source>
         <translation>声纹</translation>
     </message>
     <message>
-        <location filename="../src/biodevices.cpp" line="657"/>
-        <source>ukey</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/biodevices.cpp" line="710"/>
+        <source>Ukey</source>
+        <translation>安全密钥</translation>
     </message>
     <message>
-        <location filename="../src/biodevices.cpp" line="659"/>
+        <location filename="../src/biodevices.cpp" line="712"/>
         <source>QRCode</source>
         <translation>二维码</translation>
     </message>
@@ -140,12 +140,12 @@
 <context>
     <name>LoginOptionsWidget</name>
     <message>
-        <location filename="../src/loginoptionswidget.cpp" line="59"/>
+        <location filename="../src/loginoptionswidget.cpp" line="79"/>
         <source>Login Options</source>
         <translation>登录选项</translation>
     </message>
     <message>
-        <location filename="../src/loginoptionswidget.cpp" line="294"/>
+        <location filename="../src/loginoptionswidget.cpp" line="320"/>
         <source>Password</source>
         <translation>密码</translation>
     </message>
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth/i18n_ts/zh_HK.ts ukui-biometric-auth-4.20.0.0/bioauth/i18n_ts/zh_HK.ts
--- ukui-biometric-auth-4.10.0.0/bioauth/i18n_ts/zh_HK.ts	1970-01-01 08:00:00.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth/i18n_ts/zh_HK.ts	2024-09-23 19:22:29.000000000 +0800
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="zh_Hant">
+<context>
+    <name>BioAuthWidget</name>
+    <message>
+        <location filename="../src/bioauthwidget.ui" line="14"/>
+        <source>Form</source>
+        <translation></translation>
+    </message>
+    <message>
+        <source>More</source>
+        <translation type="vanished">更多</translation>
+    </message>
+    <message>
+        <location filename="../src/bioauthwidget.ui" line="146"/>
+        <location filename="../src/bioauthwidget.cpp" line="41"/>
+        <source>Retry</source>
+        <translation>重試</translation>
+    </message>
+    <message>
+        <source>Too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">验证失败达最大次数,请使用密码解锁</translation>
+    </message>
+    <message>
+        <source>Bioauth authentication failed, you still have %1 verification opportunities</source>
+        <translation type="vanished">生物认证失败,您还有%1次尝试机会</translation>
+    </message>
+    <message>
+        <source>Password</source>
+        <translation>密碼</translation>
+    </message>
+    <message>
+        <source>Current Device: </source>
+        <translation type="vanished">当前设备:</translation>
+    </message>
+    <message>
+        <location filename="../src/bioauthwidget.cpp" line="96"/>
+        <location filename="../src/bioauthwidget.cpp" line="212"/>
+        <source>%1 too many unsuccessful attempts,please enter password.</source>
+        <translation>%1失敗的嘗試次數太多,請輸入密碼</translation>
+    </message>
+    <message>
+        <location filename="../src/bioauthwidget.cpp" line="102"/>
+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
+        <translation>%1 身份驗證失敗,仍有 %2 個剩餘機會</translation>
+    </message>
+    <message>
+        <location filename="../src/bioauthwidget.cpp" line="226"/>
+        <source>Please use wechat to scan the code</source>
+        <translation>請使用微信掃碼</translation>
+    </message>
+</context>
+<context>
+    <name>BioDevices</name>
+    <message>
+        <location filename="../src/biodevices.cpp" line="78"/>
+        <source>Unplugging of %1 device detected</source>
+        <translation>檢測到 %1 設備的拔出</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="88"/>
+        <source>%1 device insertion detected</source>
+        <translation>檢測到 %1 個設備插入</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="97"/>
+        <source>Biometric Manager</source>
+        <translation>生物特徵管理工具</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="100"/>
+        <source>biometric</source>
+        <translation>生物特徵管理工具</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="700"/>
+        <source>FingerPrint</source>
+        <translation>指紋</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="702"/>
+        <source>FingerVein</source>
+        <translation>指靜脈</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="704"/>
+        <source>Iris</source>
+        <translation>虹膜</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="706"/>
+        <source>Face</source>
+        <translation>人臉</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="708"/>
+        <source>VoicePrint</source>
+        <translation>聲紋</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="710"/>
+        <source>Ukey</source>
+        <translation>安全金鑰</translation>
+    </message>
+    <message>
+        <source>ukey</source>
+        <translation type="vanished">安全金鑰</translation>
+    </message>
+    <message>
+        <location filename="../src/biodevices.cpp" line="712"/>
+        <source>QRCode</source>
+        <translation>微信掃碼</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+</context>
+<context>
+    <name>BioDevicesWidget</name>
+    <message>
+        <location filename="../src/biodeviceswidget.ui" line="14"/>
+        <source>Form</source>
+        <translation></translation>
+    </message>
+    <message>
+        <source>Device types:</source>
+        <translation type="vanished">设备类型:</translation>
+    </message>
+    <message>
+        <source>Back</source>
+        <translation type="vanished">返回</translation>
+    </message>
+    <message>
+        <source>OK</source>
+        <translation type="vanished">确定</translation>
+    </message>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="vanished">指纹</translation>
+    </message>
+</context>
+<context>
+    <name>LoginOptionsWidget</name>
+    <message>
+        <location filename="../src/loginoptionswidget.cpp" line="79"/>
+        <source>Login Options</source>
+        <translation>登錄選項</translation>
+    </message>
+    <message>
+        <location filename="../src/loginoptionswidget.cpp" line="320"/>
+        <source>Password</source>
+        <translation>密碼</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+    <message>
+        <source>Biometric</source>
+        <translation type="vanished">生物识别</translation>
+    </message>
+</context>
+<context>
+    <name>QObject</name>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="vanished">指纹</translation>
+    </message>
+    <message>
+        <source>FingerVein</source>
+        <translation type="vanished">指静脉</translation>
+    </message>
+    <message>
+        <source>Iris</source>
+        <translation type="vanished">虹膜</translation>
+    </message>
+    <message>
+        <source>Face</source>
+        <translation type="vanished">人脸</translation>
+    </message>
+    <message>
+        <source>VoicePrint</source>
+        <translation type="vanished">声纹</translation>
+    </message>
+</context>
+</TS>
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth/include/bioauth.h ukui-biometric-auth-4.20.0.0/bioauth/include/bioauth.h
--- ukui-biometric-auth-4.10.0.0/bioauth/include/bioauth.h	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth/include/bioauth.h	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -62,6 +62,7 @@
 
 signals:
     void authComplete(int uid, bool result, int retErrNo);
+    void authFinished();
     void notify(const QString &message);
     void notifyDetail(int deviceId, const QString &message);
     void frameWritten(int deviceId);
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth/include/bioauthwidget.h ukui-biometric-auth-4.20.0.0/bioauth/include/bioauthwidget.h
--- ukui-biometric-auth-4.10.0.0/bioauth/include/bioauthwidget.h	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth/include/bioauthwidget.h	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth/include/biodevices.h ukui-biometric-auth-4.20.0.0/bioauth/include/biodevices.h
--- ukui-biometric-auth-4.10.0.0/bioauth/include/biodevices.h	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth/include/biodevices.h	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -57,6 +57,7 @@
     void setIsShowHotPlug(bool isShow);
     int GetUserDevFeatureCount(int uid,int drvid);
     int GetUserDevCount(int uid);
+    FeatureMap GetUserFeatures(int uid);
     bool getUseFirstDevice();
     int getFailedTimes();
     bool GetHiddenSwitchButton();
@@ -71,6 +72,8 @@
      */
     StatusReslut UpdateStatus(int drvid);
     bool GetBioAuthEnable(uid_t uid);
+    bool GetDirveIsIdle(int drvid);
+    void recordAuthDrive(QString appName,int drvid,bool insert);
 
 private:
     void connectToService();
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth/include/biodeviceswidget.h ukui-biometric-auth-4.20.0.0/bioauth/include/biodeviceswidget.h
--- ukui-biometric-auth-4.10.0.0/bioauth/include/biodeviceswidget.h	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth/include/biodeviceswidget.h	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth/include/biometric.h ukui-biometric-auth-4.20.0.0/bioauth/include/biometric.h
--- ukui-biometric-auth-4.10.0.0/bioauth/include/biometric.h	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth/include/biometric.h	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth/include/biotypes.h ukui-biometric-auth-4.20.0.0/bioauth/include/biotypes.h
--- ukui-biometric-auth-4.10.0.0/bioauth/include/biotypes.h	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth/include/biotypes.h	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -225,6 +225,9 @@
 typedef std::shared_ptr<DeviceInfo> DeviceInfoPtr;
 typedef QList<DeviceInfoPtr> DeviceList;
 typedef QMap<int, DeviceList> DeviceMap;
+typedef std::shared_ptr<FeatureInfo> FeatureInfoPtr;
+typedef QList<FeatureInfoPtr> FeatureList;
+typedef QMap<QString, FeatureList> FeatureMap;
 
 QDBusArgument &operator<<(QDBusArgument &argument, const DeviceInfo &deviceInfo);
 const QDBusArgument &operator>>(const QDBusArgument &argument, DeviceInfo &deviceInfo);
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth/include/giodbus.h ukui-biometric-auth-4.20.0.0/bioauth/include/giodbus.h
--- ukui-biometric-auth-4.10.0.0/bioauth/include/giodbus.h	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth/include/giodbus.h	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2023 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth/include/loginoptionswidget.h ukui-biometric-auth-4.20.0.0/bioauth/include/loginoptionswidget.h
--- ukui-biometric-auth-4.10.0.0/bioauth/include/loginoptionswidget.h	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth/include/loginoptionswidget.h	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2023 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -100,6 +100,7 @@
 public slots:
     void readDevicesInfo();
     void onIdentifyComplete(int uid, bool ret, int retErrNo);
+    void onAuthFinished();
     void onStatusChanged(int drvid, const QString &message);
     void onFrameWritten(int drvid);
     void onUSBDeviceCountChange(int newNum);
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth/include/uniauthservice.h ukui-biometric-auth-4.20.0.0/bioauth/include/uniauthservice.h
--- ukui-biometric-auth-4.10.0.0/bioauth/include/uniauthservice.h	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth/include/uniauthservice.h	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2022 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -61,9 +61,13 @@
     bool getUseFirstDevice();
     // 获取是否隐藏切换按钮
     bool getHiddenSwitchButton();
-
+    // 获取正在认证的应用
+    QStringList getAuthingApp();
+    // 获取应用认证的驱动
+    int getAuthingAppDrivd(QString appName);
 public:
     bool isActivatable();
+    void recordAuthDrive(QString appName,int drvid,bool insert);
 
 Q_SIGNALS:
     //默认设备改变
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth/src/bioauth.cpp ukui-biometric-auth-4.20.0.0/bioauth/src/bioauth.cpp
--- ukui-biometric-auth-4.10.0.0/bioauth/src/bioauth.cpp	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth/src/bioauth.cpp	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -17,6 +17,7 @@
 **/
 #include "bioauth.h"
 #include <QList>
+#include <unistd.h>
 
 BioAuth::BioAuth(qint32 uid, const DeviceInfoPtr deviceInfo, QObject *parent)
     : QObject(parent),
@@ -110,6 +111,11 @@
         QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this);
         connect(watcher, &QDBusPendingCallWatcher::finished, this, &BioAuth::onIdentityComplete);
     }else{
+        //使用sudo等命令时,不停止设备,当存在其他可认证设备时,使用其他可认证设备,否则使用密码
+        if(qAppName() != "bioauth"){
+            //stopops在identify之前使用时,不要调用getFeaturelist,否则会出现identify被停止的现象,应该时框架的bug。
+            serviceInterface->call("StopOps", QVariant(deviceInfo->device_id), QVariant(3000));
+        }
         QDBusPendingCall call = serviceInterface->asyncCallWithArgumentList("Identify", args);
         QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this);
         connect(watcher, &QDBusPendingCallWatcher::finished, this, &BioAuth::onIdentityComplete);
@@ -175,6 +181,7 @@
 
     QDBusReply<int> reply = serviceInterface->call("StopOps", QVariant(deviceInfo->device_id), QVariant(3000));
 
+    emit authFinished();
     if(!reply.isValid())
         qWarning() << "StopOps error: " << reply.error();
 
@@ -188,6 +195,7 @@
 
 void BioAuth::onIdentityComplete(QDBusPendingCallWatcher *watcher)
 {
+    emit authFinished();
     QDBusPendingReply<qint32, qint32> reply = *watcher;
     if(reply.isError()){
         isInAuthentication = false;
@@ -227,6 +235,11 @@
         LOG() << msg.errorMessage();
         return;
     }
+
+    if(deviceInfo && deviceInfo->device_id != deviceId){
+        return ;
+    }
+
     QString message = msg.arguments().at(0).toString();
     LOG() << message;
     Q_EMIT notify(message);
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth/src/bioauthwidget.cpp ukui-biometric-auth-4.20.0.0/bioauth/src/bioauthwidget.cpp
--- ukui-biometric-auth-4.10.0.0/bioauth/src/bioauthwidget.cpp	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth/src/bioauthwidget.cpp	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth/src/biodevices.cpp ukui-biometric-auth-4.20.0.0/bioauth/src/biodevices.cpp
--- ukui-biometric-auth-4.10.0.0/bioauth/src/biodevices.cpp	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth/src/biodevices.cpp	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -94,7 +94,7 @@
                              "org.freedesktop.Notifications",
                              QDBusConnection::sessionBus());
         QList<QVariant> args;
-        args<<(tr("ukui-biometric-manager"))
+        args<<(tr("Biometric Manager"))
            <<((unsigned int) 0)
           <<"biometric-manager"
          <<tr("biometric")
@@ -200,10 +200,32 @@
 
 }
 
+FeatureMap BioDevices::GetUserFeatures(int uid)
+{
+    FeatureMap featureMap;
+    QList<QDBusVariant> qlist;
+    int listsize;
+    QDBusMessage result = serviceInterface->call(QStringLiteral("GetAllFeatureList"), uid, 0, -1);
+    if(result.type() == QDBusMessage::ErrorMessage)
+    {
+        qWarning() << "GetDevList error:" << result.errorMessage();
+        return featureMap;
+    }
+
+    QList<QVariant> variantList = result.arguments();
+    listsize = variantList[0].value<int>();
+    variantList[1].value<QDBusArgument>() >> qlist;
+    for (int i = 0; i < listsize; i++) {
+        FeatureInfoPtr pFeatureInfo = std::make_shared<FeatureInfo>();
+        qlist[i].variant().value<QDBusArgument>() >> *pFeatureInfo;
+        featureMap[pFeatureInfo->device_shortname].append(pFeatureInfo);
+    }
+
+    return featureMap;
+}
+
 int BioDevices::GetUserDevFeatureCount(int uid,int drvid)
 {
-    // stop last option
-    serviceInterface->call("StopOps", QVariant(drvid), QVariant(3000));
     QDBusMessage FeatureResult = serviceInterface->call(QStringLiteral("GetFeatureList"),drvid,uid,0,-1);
     if(FeatureResult.type() == QDBusMessage::ErrorMessage)
     {
@@ -218,7 +240,6 @@
     int res = 0;
     for(int i = 0; i < deviceInfos.count(); i++) {
         DeviceInfoPtr deviceInfo = deviceInfos.at(i);
-        QDBusReply<int> reply = serviceInterface->call("StopOps", QVariant(deviceInfo->device_id), QVariant(3000));
         QDBusMessage featurecount = serviceInterface->call("GetFeatureList",deviceInfo->device_id,uid,indexStart,indexEnd);
         if(featurecount.type() == QDBusMessage::ErrorMessage)
         {
@@ -237,6 +258,10 @@
     for(auto deviceInfo : deviceInfos) {
         if (deviceInfo->biotype == REMOTE_QRCODE_TYPE)  // 终端不使用扫码
             continue;
+
+        if(!GetDirveIsIdle(deviceInfo->device_id))
+            continue;
+
         devices[deviceInfo->biotype].push_back(*deviceInfo);
     }
 
@@ -406,6 +431,7 @@
     if(deviceInfos.size() <= 0)
         return nullptr;
 
+    FeatureMap mapFeatures = GetUserFeatures(uid);
     if (m_uniAuthService && m_uniAuthService->isActivatable()) {
         QString defaultDeviceName = "";
         struct passwd *pwdInfo = getpwuid(uid);
@@ -416,7 +442,8 @@
             if(!strDeviceName.isEmpty()) {
                 ptrDevInfo = findDevice(strDeviceName);
                 if (ptrDevInfo) {
-                    if (GetUserDevFeatureCount(uid,ptrDevInfo->device_id) > 0) {
+                    int isIdle = GetDirveIsIdle(ptrDevInfo->device_id);
+                    if(isIdle && mapFeatures.contains(ptrDevInfo->device_shortname)){
                         defaultDeviceName = strDeviceName;
                     }
                 }
@@ -454,9 +481,11 @@
         bool defValid = false;
         DeviceInfoPtr ptrDevInfo = findDevice(defaultDeviceName);
         if (ptrDevInfo) {
-            if (GetUserDevFeatureCount(uid,ptrDevInfo->device_id) > 0) {
+            int isIdle = GetDirveIsIdle(ptrDevInfo->device_id);
+            if(isIdle && mapFeatures.contains(ptrDevInfo->device_shortname)){
                 defValid = true;
             }
+
         }
 
         if (!defValid) {
@@ -467,11 +496,34 @@
     }
 }
 
+void BioDevices::recordAuthDrive(QString appName, int drvid, bool insert)
+{
+    if(m_uniAuthService && m_uniAuthService->isActivatable()){
+        m_uniAuthService->recordAuthDrive(appName,drvid,insert);
+    }
+}
+
+bool BioDevices::GetDirveIsIdle(int drvid)
+{
+    if(m_uniAuthService && m_uniAuthService->isActivatable()){
+        QStringList appList = m_uniAuthService->getAuthingApp();
+        for(QString appName : appList){
+            int id = m_uniAuthService->getAuthingAppDrivd(appName);
+            if(id == drvid){
+                return false;
+            }
+        }
+    }
+
+    return true;
+}
+
 DeviceInfoPtr BioDevices::getDefaultDevice(uid_t uid)
 {
     if(deviceInfos.size() <= 0)
         return nullptr;
 
+    FeatureMap mapFeatures = GetUserFeatures(uid);
     if (m_uniAuthService && m_uniAuthService->isActivatable()) {
         QString defaultDeviceName = "";
         struct passwd *pwdInfo = getpwuid(uid);
@@ -483,7 +535,8 @@
                 if(!strDeviceName.isEmpty()) {
                     ptrDevInfo = findDevice(strDeviceName);
                     if (ptrDevInfo) {
-                        if (GetUserDevFeatureCount(uid,ptrDevInfo->device_id) > 0) {
+                        int isIdle = GetDirveIsIdle(ptrDevInfo->device_id);
+                        if(isIdle && mapFeatures.contains(ptrDevInfo->device_shortname)){
                             defaultDeviceName = strDeviceName;
                             break;
                         }
@@ -525,7 +578,7 @@
         bool defValid = false;
         DeviceInfoPtr ptrDevInfo = findDevice(defaultDeviceName);
         if (ptrDevInfo) {
-            if (GetUserDevFeatureCount(uid,ptrDevInfo->device_id) > 0) {
+            if (mapFeatures.contains(ptrDevInfo->device_shortname)) {
                 defValid = true;
             }
         }
@@ -654,7 +707,7 @@
     case BIOTYPE_VOICEPRINT:
         return tr("VoicePrint");
     case LOGINOPT_TYPE_GENERAL_UKEY:
-        return tr("ukey");
+        return tr("Ukey");
     case REMOTE_QRCODE_TYPE:
         return tr("QRCode");
     }
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth/src/biodeviceswidget.cpp ukui-biometric-auth-4.20.0.0/bioauth/src/biodeviceswidget.cpp
--- ukui-biometric-auth-4.10.0.0/bioauth/src/biodeviceswidget.cpp	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth/src/biodeviceswidget.cpp	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth/src/biotypes.cpp ukui-biometric-auth-4.20.0.0/bioauth/src/biotypes.cpp
--- ukui-biometric-auth-4.10.0.0/bioauth/src/biotypes.cpp	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth/src/biotypes.cpp	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth/src/giodbus.cpp ukui-biometric-auth-4.20.0.0/bioauth/src/giodbus.cpp
--- ukui-biometric-auth-4.10.0.0/bioauth/src/giodbus.cpp	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth/src/giodbus.cpp	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2023 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth/src/loginoptionswidget.cpp ukui-biometric-auth-4.20.0.0/bioauth/src/loginoptionswidget.cpp
--- ukui-biometric-auth-4.10.0.0/bioauth/src/loginoptionswidget.cpp	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth/src/loginoptionswidget.cpp	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2023 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -48,6 +48,7 @@
     , m_bioDevices(new BioDevices())
     , w_timer(nullptr)
 {
+    m_bioDevices->recordAuthDrive("polkit",0,false);
     initUI();
     initConnections();
     m_mapDisableDev.clear();
@@ -161,6 +162,9 @@
 
         connect(m_biomericProxy, &BioAuth::authComplete,
                 this, &LoginOptionsWidget::onIdentifyComplete);
+
+        connect(m_biomericProxy, &BioAuth::authFinished,
+                this, &LoginOptionsWidget::onAuthFinished);
     }
     if (m_bioDevices) {
         connect(m_bioDevices, &BioDevices::deviceCountChanged,
@@ -399,6 +403,9 @@
     bool isQRCodeEnable = m_bioDevices->GetQRCodeEnable();
     DeviceList deviceList = m_bioDevices->GetDevList();
     QStringList listDefDevices = m_bioDevices->getAllDefDevices();
+    FeatureMap mapFeatures = m_bioDevices->GetUserFeatures(m_uid);
+        qDebug() << m_uid <<",count:"<<mapFeatures.size();
+
     for(auto pDeviceInfo : deviceList)
     {
         int nDevFeatureCount = 0;
@@ -407,8 +414,8 @@
         } else {
             if (m_uid == -1) {
                 nDevFeatureCount = 0;
-            } else {
-                nDevFeatureCount = m_bioDevices->GetUserDevFeatureCount(m_uid, pDeviceInfo->device_id);
+            } else if(mapFeatures.contains(pDeviceInfo->device_shortname)){
+                nDevFeatureCount = mapFeatures[pDeviceInfo->device_shortname].size();
             }
         }
         qDebug() << *pDeviceInfo << ",FeatureCount:"<<nDevFeatureCount;
@@ -496,6 +503,7 @@
         m_labelFaceLoad->show();
     }
     w_timer->start();
+    m_bioDevices->recordAuthDrive("polkit",m_curDevInfo->device_id,true);
     m_biomericProxy->startAuth(m_uid, m_curDevInfo);
 }
 
@@ -530,6 +538,13 @@
     }
 }
 
+void LoginOptionsWidget::onAuthFinished()
+{
+    if(m_bioDevices){
+        m_bioDevices->recordAuthDrive("polkit",0,false);
+    }
+}
+
 void LoginOptionsWidget::onIdentifyComplete(int uid, bool ret, int retErrNo)
 {
     if(m_isStopped == true)
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth/src/uniauthservice.cpp ukui-biometric-auth-4.20.0.0/bioauth/src/uniauthservice.cpp
--- ukui-biometric-auth-4.10.0.0/bioauth/src/uniauthservice.cpp	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth/src/uniauthservice.cpp	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2022 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -245,6 +245,45 @@
     }
 }
 
+// 获取正在认证的应用
+QStringList UniAuthService::getAuthingApp()
+{
+    QDBusMessage result = call(QStringLiteral("getAllAuthApp"));
+    if(result.type() == QDBusMessage::ErrorMessage)
+    {
+        qWarning() << "getAuthingApp error:" << result.errorMessage();
+        return QStringList();
+    }
+    QList<QVariant> varResult = result.arguments();
+    if (varResult.size() > 0) {
+        return varResult.takeFirst().toStringList();
+    } else {
+        return QStringList();
+    }
+}
+
+// 获取应用认证的驱动
+int UniAuthService::getAuthingAppDrivd(QString appName)
+{
+    QDBusMessage result = call(QStringLiteral("getAppAuthDrive"),appName);
+    if(result.type() == QDBusMessage::ErrorMessage)
+    {
+        qWarning() << "getAuthingAppDrivd error:" << result.errorMessage();
+        return -1;
+    }
+    QList<QVariant> varResult = result.arguments();
+    if (varResult.size() > 0) {
+        return varResult.takeFirst().toInt();
+    } else {
+        return -1;
+    }
+}
+
+void UniAuthService::recordAuthDrive(QString appName,int drvid,bool insert)
+{
+    call(QStringLiteral("recordAuthDrive"),appName,drvid,insert);
+}
+
 bool UniAuthService::isActivatable()
 {
     return m_isActivatable;
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth-bin/i18n_ts/bo.ts ukui-biometric-auth-4.20.0.0/bioauth-bin/i18n_ts/bo.ts
--- ukui-biometric-auth-4.10.0.0/bioauth-bin/i18n_ts/bo.ts	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth-bin/i18n_ts/bo.ts	2024-09-23 19:22:29.000000000 +0800
@@ -4,114 +4,134 @@
 <context>
     <name>QObject</name>
     <message>
-        <location filename="../src/main.cpp" line="100"/>
+        <location filename="../src/main.cpp" line="126"/>
+        <source>Enter the ukey password</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="150"/>
         <source>Try it again</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="102"/>
+        <location filename="../src/main.cpp" line="152"/>
         <source>Use other Devices</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="103"/>
+        <location filename="../src/main.cpp" line="153"/>
         <source>Cancel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="112"/>
+        <location filename="../src/main.cpp" line="162"/>
         <source>Choose the option</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="134"/>
-        <location filename="../src/main.cpp" line="169"/>
-        <location filename="../src/main.cpp" line="178"/>
+        <location filename="../src/main.cpp" line="184"/>
+        <location filename="../src/main.cpp" line="219"/>
+        <location filename="../src/main.cpp" line="228"/>
         <source>Invaild response &quot;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="134"/>
-        <location filename="../src/main.cpp" line="169"/>
-        <location filename="../src/main.cpp" line="178"/>
+        <location filename="../src/main.cpp" line="184"/>
+        <location filename="../src/main.cpp" line="219"/>
+        <location filename="../src/main.cpp" line="228"/>
         <source>authentication will be canceld</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="135"/>
-        <location filename="../src/main.cpp" line="170"/>
-        <location filename="../src/main.cpp" line="179"/>
-        <location filename="../src/main.cpp" line="315"/>
+        <location filename="../src/main.cpp" line="185"/>
+        <location filename="../src/main.cpp" line="220"/>
+        <location filename="../src/main.cpp" line="229"/>
+        <location filename="../src/main.cpp" line="408"/>
         <source>AUTHENTICATION CANCELED</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="146"/>
+        <location filename="../src/main.cpp" line="196"/>
         <source>=== BIOMETRIC DEVICES ===</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="157"/>
+        <location filename="../src/main.cpp" line="207"/>
         <source>Choose the device</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="210"/>
+        <location filename="../src/main.cpp" line="260"/>
         <source>Sevice Name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="211"/>
+        <location filename="../src/main.cpp" line="261"/>
         <source>DISPLAY env</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="212"/>
+        <location filename="../src/main.cpp" line="262"/>
         <source>User</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="213"/>
+        <location filename="../src/main.cpp" line="263"/>
         <source>Display debug information</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="214"/>
+        <location filename="../src/main.cpp" line="264"/>
         <source>Device short name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="249"/>
+        <location filename="../src/main.cpp" line="306"/>
+        <source>UKEY AUTHENTICATION</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="308"/>
         <source>BIOMETRIC AUTHENTICATION</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="251"/>
+        <location filename="../src/main.cpp" line="310"/>
         <source>Press Q or Esc to cancel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="263"/>
+        <location filename="../src/main.cpp" line="330"/>
+        <source>BIOMETRIC AUTHENTICATION IS CLOSED</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="334"/>
         <source>AUTHENTICATION SUCCESS</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="267"/>
+        <location filename="../src/main.cpp" line="338"/>
         <source>AUTHENTICATION FAILED</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="277"/>
+        <location filename="../src/main.cpp" line="348"/>
         <source>Failed to verify %1, you still have %2 verification opportunities</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="279"/>
+        <location filename="../src/main.cpp" line="350"/>
         <source>Unable to verify %1, please enter password.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="302"/>
+        <location filename="../src/main.cpp" line="386"/>
+        <source>AUTHENTICATION END</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="388"/>
         <source>BIOMETRIC AUTHENTICATION END</source>
         <translation type="unfinished"></translation>
     </message>
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth-bin/i18n_ts/bo_CN.ts ukui-biometric-auth-4.20.0.0/bioauth-bin/i18n_ts/bo_CN.ts
--- ukui-biometric-auth-4.10.0.0/bioauth-bin/i18n_ts/bo_CN.ts	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth-bin/i18n_ts/bo_CN.ts	2024-09-23 19:22:29.000000000 +0800
@@ -13,7 +13,7 @@
     </message>
     <message>
         <source>=== BIOMETRIC DEVICES ===</source>
-        <translation>=== 生物识别设备 ===</translation>
+        <translation>=== སྐྱེ་དངོས་ངོས་འཛིན་སྒྲིག་ཆས། ===</translation>
     </message>
     <message>
         <source>Display debug information</source>
@@ -81,28 +81,27 @@
     </message>
     <message>
         <source>Failed to verify %1, you still have %2 verification opportunities</source>
-        <translation type="unfinished"></translation>
+        <translation>ཚོད་ལྟས་ར་སྤྲོད་%1ཕམ་ཉེས་བྱུང་།ཁྱེད་རང་ད་དུང་ཡོད།%2ཚོད་ལྟ་བྱེད་པའི་གོ་སྐབས་ཤིག་རེད།</translation>
     </message>
     <message>
         <source>Unable to verify %1, please enter password.</source>
-        <translation type="unfinished"></translation>
+        <translation>ཚོད་ལྟས་ར་སྤྲོད་བྱེད་ཐབས་མེད%1,ཁྱོད་ཀྱིས་གསང་གྲངས་ནང་འཇུག་བྱེད་རོགས།</translation>
     </message>
     <message>
         <source>UKEY AUTHENTICATION</source>
-        <translation type="unfinished"></translation>
+        <translation>བདེ་འཇགས་ཀྱི་གསང་བའི་བདེན་དཔང་ར་སྤྲོད།</translation>
     </message>
     <message>
         <source>BIOMETRIC AUTHENTICATION IS CLOSED</source>
-        <translation type="unfinished"></translation>
+        <translation>སྐྱེ་དངོས་ཀྱི་ངོས་འཛིན་ཁས་ལེན་བྱས་པ་སྒོ་བརྒྱབ་ཟིན།</translation>
     </message>
     <message>
         <source>AUTHENTICATION END</source>
-        <translation type="unfinished"></translation>
+        <translation>བདེན་དཔང་ར་སྤྲོད་མཇུག་བསྒྲི</translation>
     </message>
     <message>
-        <source>Enter the ukey password
-</source>
-        <translation type="unfinished"></translation>
+        <source>Enter the ukey password</source>
+        <translation>བདེ་འཇགས་ཀྱི་གསང་བའི་གསང་བའི་ཨང་གྲངས་ནང་འཇུག་བྱེད་དགོས།</translation>
     </message>
 </context>
 </TS>
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth-bin/i18n_ts/de.ts ukui-biometric-auth-4.20.0.0/bioauth-bin/i18n_ts/de.ts
--- ukui-biometric-auth-4.10.0.0/bioauth-bin/i18n_ts/de.ts	1970-01-01 08:00:00.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth-bin/i18n_ts/de.ts	2024-09-23 19:22:29.000000000 +0800
@@ -0,0 +1,287 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="de">
+<context>
+    <name>BioAuthWidget</name>
+    <message>
+        <source>More</source>
+        <translation type="vanished">更多</translation>
+    </message>
+    <message>
+        <source>Retry</source>
+        <translation type="vanished">wiederholen</translation>
+    </message>
+    <message>
+        <source>Too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">验证失败达最大次数,请使用密码解锁</translation>
+    </message>
+    <message>
+        <source>Bioauth authentication failed, you still have %1 verification opportunities</source>
+        <translation type="vanished">生物认证失败,您还有%1次尝试机会</translation>
+    </message>
+    <message>
+        <source>Password</source>
+        <translation type="vanished">Passwort</translation>
+    </message>
+    <message>
+        <source>Current Device: </source>
+        <translation type="vanished">当前设备:</translation>
+    </message>
+    <message>
+        <source>%1 too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">%1 Es gibt zu viele fehlgeschlagene Versuche, bitte geben Sie Ihr Passwort ein.</translation>
+    </message>
+    <message>
+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
+        <translation type="vanished">%1 Authentifizierung fehlgeschlagen und es sind noch %2 verbleibende Chancen</translation>
+    </message>
+    <message>
+        <source>Please use wechat to scan the code</source>
+        <translation type="vanished">Bitte verwenden Sie WeChat, um den Code zu scannen</translation>
+    </message>
+</context>
+<context>
+    <name>BioDevices</name>
+    <message>
+        <source>Unplugging of %1 device detected</source>
+        <translation type="vanished">Das %1-Gerät wurde vom Stromnetz getrennt</translation>
+    </message>
+    <message>
+        <source>%1 device insertion detected</source>
+        <translation type="vanished">%1 angeschlossenes Gerät erkannt</translation>
+    </message>
+    <message>
+        <source>ukui-biometric-manager</source>
+        <translation type="vanished">Tools für die biometrische Verwaltung</translation>
+    </message>
+    <message>
+        <source>biometric</source>
+        <translation type="vanished">Biologische Eigenschaften</translation>
+    </message>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="vanished">Fingerabdruck</translation>
+    </message>
+    <message>
+        <source>FingerVein</source>
+        <translation type="vanished">Fingervenen</translation>
+    </message>
+    <message>
+        <source>Iris</source>
+        <translation type="vanished">Iris</translation>
+    </message>
+    <message>
+        <source>Face</source>
+        <translation type="vanished">Gesichtserkennung</translation>
+    </message>
+    <message>
+        <source>VoicePrint</source>
+        <translation type="vanished">Stimmenausdruck</translation>
+    </message>
+    <message>
+        <source>ukey</source>
+        <translation type="vanished">Sicherheitsschlüssel</translation>
+    </message>
+    <message>
+        <source>QRCode</source>
+        <translation type="vanished">QR-Code</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+</context>
+<context>
+    <name>BioDevicesWidget</name>
+    <message>
+        <source>Device types:</source>
+        <translation type="vanished">设备类型:</translation>
+    </message>
+    <message>
+        <source>Back</source>
+        <translation type="vanished">返回</translation>
+    </message>
+    <message>
+        <source>OK</source>
+        <translation type="vanished">确定</translation>
+    </message>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="vanished">指纹</translation>
+    </message>
+</context>
+<context>
+    <name>LoginOptionsWidget</name>
+    <message>
+        <source>Login Options</source>
+        <translation type="vanished">Anmeldeoptionen</translation>
+    </message>
+    <message>
+        <source>Password</source>
+        <translation type="vanished">Passwort</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+    <message>
+        <source>Biometric</source>
+        <translation type="vanished">生物识别</translation>
+    </message>
+</context>
+<context>
+    <name>QObject</name>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="vanished">指纹</translation>
+    </message>
+    <message>
+        <source>FingerVein</source>
+        <translation type="vanished">指静脉</translation>
+    </message>
+    <message>
+        <source>Iris</source>
+        <translation type="vanished">虹膜</translation>
+    </message>
+    <message>
+        <source>Face</source>
+        <translation type="vanished">人脸</translation>
+    </message>
+    <message>
+        <source>VoicePrint</source>
+        <translation type="vanished">声纹</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="126"/>
+        <source>Enter the ukey password</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="150"/>
+        <source>Try it again</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="152"/>
+        <source>Use other Devices</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="153"/>
+        <source>Cancel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="162"/>
+        <source>Choose the option</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="184"/>
+        <location filename="../src/main.cpp" line="219"/>
+        <location filename="../src/main.cpp" line="228"/>
+        <source>Invaild response &quot;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="184"/>
+        <location filename="../src/main.cpp" line="219"/>
+        <location filename="../src/main.cpp" line="228"/>
+        <source>authentication will be canceld</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="185"/>
+        <location filename="../src/main.cpp" line="220"/>
+        <location filename="../src/main.cpp" line="229"/>
+        <location filename="../src/main.cpp" line="408"/>
+        <source>AUTHENTICATION CANCELED</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="196"/>
+        <source>=== BIOMETRIC DEVICES ===</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="207"/>
+        <source>Choose the device</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="260"/>
+        <source>Sevice Name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="261"/>
+        <source>DISPLAY env</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="262"/>
+        <source>User</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="263"/>
+        <source>Display debug information</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="264"/>
+        <source>Device short name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="306"/>
+        <source>UKEY AUTHENTICATION</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="308"/>
+        <source>BIOMETRIC AUTHENTICATION</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="310"/>
+        <source>Press Q or Esc to cancel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="330"/>
+        <source>BIOMETRIC AUTHENTICATION IS CLOSED</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="334"/>
+        <source>AUTHENTICATION SUCCESS</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="338"/>
+        <source>AUTHENTICATION FAILED</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="348"/>
+        <source>Failed to verify %1, you still have %2 verification opportunities</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="350"/>
+        <source>Unable to verify %1, please enter password.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="386"/>
+        <source>AUTHENTICATION END</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="388"/>
+        <source>BIOMETRIC AUTHENTICATION END</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+</TS>
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth-bin/i18n_ts/es.ts ukui-biometric-auth-4.20.0.0/bioauth-bin/i18n_ts/es.ts
--- ukui-biometric-auth-4.10.0.0/bioauth-bin/i18n_ts/es.ts	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth-bin/i18n_ts/es.ts	2024-09-23 19:22:29.000000000 +0800
@@ -2,10 +2,69 @@
 <!DOCTYPE TS>
 <TS version="2.1" language="es">
 <context>
+    <name>BioAuthWidget</name>
+    <message>
+        <source>Form</source>
+        <translation type="vanished">Forma</translation>
+    </message>
+    <message>
+        <source>More</source>
+        <translation type="vanished">更多</translation>
+    </message>
+    <message>
+        <source>Retry</source>
+        <translation type="vanished">Reintentar</translation>
+    </message>
+    <message>
+        <source>Too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">验证失败达最大次数,请使用密码解锁</translation>
+    </message>
+    <message>
+        <source>Bioauth authentication failed, you still have %1 verification opportunities</source>
+        <translation type="vanished">生物认证失败,您还有%1次尝试机会</translation>
+    </message>
+    <message>
+        <source>Password</source>
+        <translation type="vanished">Contraseña</translation>
+    </message>
+    <message>
+        <source>Current Device: </source>
+        <translation type="vanished">当前设备:</translation>
+    </message>
+    <message>
+        <source>%1 too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">%1 Demasiados intentos fallidos, ingrese la contraseña.</translation>
+    </message>
+    <message>
+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
+        <translation type="vanished">%1 error de autenticación, todavía quedan %2 oportunidades</translation>
+    </message>
+    <message>
+        <source>Please use wechat to scan the code</source>
+        <translation type="vanished">Utilice wechat para escanear el código</translation>
+    </message>
+</context>
+<context>
     <name>BioDevices</name>
     <message>
+        <source>Unplugging of %1 device detected</source>
+        <translation type="vanished">Se ha detectado la desconexión del dispositivo %1</translation>
+    </message>
+    <message>
+        <source>%1 device insertion detected</source>
+        <translation type="vanished">%1 inserción de dispositivo detectada</translation>
+    </message>
+    <message>
+        <source>ukui-biometric-manager</source>
+        <translation type="vanished">ukui-gestor-biométrico</translation>
+    </message>
+    <message>
+        <source>biometric</source>
+        <translation type="vanished">biométrico</translation>
+    </message>
+    <message>
         <source>FingerPrint</source>
-        <translation type="vanished">Huella dactilar</translation>
+        <translation type="vanished">Huellas</translation>
     </message>
     <message>
         <source>FingerVein</source>
@@ -21,93 +80,215 @@
     </message>
     <message>
         <source>VoicePrint</source>
-        <translation type="vanished">Impresión de voz</translation>
+        <translation type="vanished">Huella de voz</translation>
+    </message>
+    <message>
+        <source>ukey</source>
+        <translation type="vanished">ukey</translation>
+    </message>
+    <message>
+        <source>QRCode</source>
+        <translation type="vanished">QRCode</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+</context>
+<context>
+    <name>BioDevicesWidget</name>
+    <message>
+        <source>Form</source>
+        <translation type="vanished">Forma</translation>
+    </message>
+    <message>
+        <source>Device types:</source>
+        <translation type="vanished">设备类型:</translation>
+    </message>
+    <message>
+        <source>Back</source>
+        <translation type="vanished">返回</translation>
+    </message>
+    <message>
+        <source>OK</source>
+        <translation type="vanished">确定</translation>
+    </message>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="vanished">指纹</translation>
+    </message>
+</context>
+<context>
+    <name>LoginOptionsWidget</name>
+    <message>
+        <source>Login Options</source>
+        <translation type="vanished">Opciones de inicio de sesión</translation>
+    </message>
+    <message>
+        <source>Password</source>
+        <translation type="vanished">Contraseña</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+    <message>
+        <source>Biometric</source>
+        <translation type="vanished">生物识别</translation>
     </message>
 </context>
 <context>
     <name>QObject</name>
     <message>
+        <source>FingerPrint</source>
+        <translation type="vanished">指纹</translation>
+    </message>
+    <message>
+        <source>FingerVein</source>
+        <translation type="vanished">指静脉</translation>
+    </message>
+    <message>
+        <source>Iris</source>
+        <translation type="vanished">虹膜</translation>
+    </message>
+    <message>
+        <source>Face</source>
+        <translation type="vanished">人脸</translation>
+    </message>
+    <message>
+        <source>VoicePrint</source>
+        <translation type="vanished">声纹</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="126"/>
+        <source>Enter the ukey password</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="150"/>
         <source>Try it again</source>
-        <translation>Pruébalo otra vez</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../src/main.cpp" line="152"/>
         <source>Use other Devices</source>
-        <translation>Usa otros dispositivos</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../src/main.cpp" line="153"/>
         <source>Cancel</source>
-        <translation>Cancelar</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../src/main.cpp" line="162"/>
         <source>Choose the option</source>
-        <translation>Elige la opción</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../src/main.cpp" line="184"/>
+        <location filename="../src/main.cpp" line="219"/>
+        <location filename="../src/main.cpp" line="228"/>
         <source>Invaild response &quot;</source>
-        <translation>Respuesta interna</translation>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="184"/>
+        <location filename="../src/main.cpp" line="219"/>
+        <location filename="../src/main.cpp" line="228"/>
+        <source>authentication will be canceld</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../src/main.cpp" line="185"/>
+        <location filename="../src/main.cpp" line="220"/>
+        <location filename="../src/main.cpp" line="229"/>
+        <location filename="../src/main.cpp" line="408"/>
         <source>AUTHENTICATION CANCELED</source>
-        <translation>AUTENTIFICACIÓN CANCELADA</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../src/main.cpp" line="196"/>
         <source>=== BIOMETRIC DEVICES ===</source>
-        <translation>=== DISPOSITIVOS BIOMÉTRICOS ===</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../src/main.cpp" line="207"/>
         <source>Choose the device</source>
-        <translation>Elige el dispositivo</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../src/main.cpp" line="260"/>
         <source>Sevice Name</source>
-        <translation>Nombre del Servicio</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../src/main.cpp" line="261"/>
         <source>DISPLAY env</source>
-        <translation>PANTALLA env</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../src/main.cpp" line="262"/>
         <source>User</source>
-        <translation>Usuario</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../src/main.cpp" line="263"/>
         <source>Display debug information</source>
-        <translation>Mostrar información de depuración</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../src/main.cpp" line="264"/>
         <source>Device short name</source>
-        <translation>Nombre corto del dispositivo</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../src/main.cpp" line="306"/>
+        <source>UKEY AUTHENTICATION</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="308"/>
         <source>BIOMETRIC AUTHENTICATION</source>
-        <translation>AUTENTICACIÓN BIOMÉTRICA</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../src/main.cpp" line="310"/>
         <source>Press Q or Esc to cancel</source>
-        <translation>Presione Q o Esc para cancelar</translation>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="330"/>
+        <source>BIOMETRIC AUTHENTICATION IS CLOSED</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../src/main.cpp" line="334"/>
         <source>AUTHENTICATION SUCCESS</source>
-        <translation>ÉXITO DE LA AUTENTICACIÓN</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../src/main.cpp" line="338"/>
         <source>AUTHENTICATION FAILED</source>
-        <translation>Falla la autenticacion</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>BIOMETRIC AUTHENTICATION END</source>
-        <translation>FINALIZACIÓN BIOMÉTRICA FINAL</translation>
+        <location filename="../src/main.cpp" line="348"/>
+        <source>Failed to verify %1, you still have %2 verification opportunities</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>authentication will be canceld</source>
+        <location filename="../src/main.cpp" line="350"/>
+        <source>Unable to verify %1, please enter password.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Failed to verify %1, you still have %2 verification opportunities</source>
+        <location filename="../src/main.cpp" line="386"/>
+        <source>AUTHENTICATION END</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Unable to verify %1, please enter password.</source>
+        <location filename="../src/main.cpp" line="388"/>
+        <source>BIOMETRIC AUTHENTICATION END</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth-bin/i18n_ts/fr.ts ukui-biometric-auth-4.20.0.0/bioauth-bin/i18n_ts/fr.ts
--- ukui-biometric-auth-4.10.0.0/bioauth-bin/i18n_ts/fr.ts	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth-bin/i18n_ts/fr.ts	2024-09-23 19:22:29.000000000 +0800
@@ -2,112 +2,293 @@
 <!DOCTYPE TS>
 <TS version="2.1" language="fr">
 <context>
+    <name>BioAuthWidget</name>
+    <message>
+        <source>Form</source>
+        <translation type="vanished">Forme</translation>
+    </message>
+    <message>
+        <source>More</source>
+        <translation type="vanished">更多</translation>
+    </message>
+    <message>
+        <source>Retry</source>
+        <translation type="vanished">réessayer</translation>
+    </message>
+    <message>
+        <source>Too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">验证失败达最大次数,请使用密码解锁</translation>
+    </message>
+    <message>
+        <source>Bioauth authentication failed, you still have %1 verification opportunities</source>
+        <translation type="vanished">生物认证失败,您还有%1次尝试机会</translation>
+    </message>
+    <message>
+        <source>Password</source>
+        <translation type="vanished">mot de passe</translation>
+    </message>
+    <message>
+        <source>Current Device: </source>
+        <translation type="vanished">当前设备:</translation>
+    </message>
+    <message>
+        <source>%1 too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">%1 Il y a trop de tentatives infructueuses, veuillez saisir votre mot de passe.</translation>
+    </message>
+    <message>
+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
+        <translation type="vanished">%1 authentification a échoué et il reste encore %2 chances</translation>
+    </message>
+    <message>
+        <source>Please use wechat to scan the code</source>
+        <translation type="vanished">Veuillez utiliser WeChat pour scanner le code</translation>
+    </message>
+</context>
+<context>
     <name>BioDevices</name>
     <message>
+        <source>Unplugging of %1 device detected</source>
+        <translation type="vanished">L’appareil %1 a été débranché</translation>
+    </message>
+    <message>
+        <source>%1 device insertion detected</source>
+        <translation type="vanished">%1 périphérique branché détecté</translation>
+    </message>
+    <message>
+        <source>ukui-biometric-manager</source>
+        <translation type="vanished">Outils de gestion biométrique</translation>
+    </message>
+    <message>
+        <source>biometric</source>
+        <translation type="vanished">Caractéristiques biologiques</translation>
+    </message>
+    <message>
         <source>FingerPrint</source>
-        <translation type="vanished">Empreinte digitale</translation>
+        <translation type="vanished">empreinte digitale</translation>
     </message>
     <message>
         <source>FingerVein</source>
-        <translation type="vanished">FingerVein</translation>
+        <translation type="vanished">Veines des doigts</translation>
     </message>
     <message>
         <source>Iris</source>
-        <translation type="vanished">Iris</translation>
+        <translation type="vanished">iris</translation>
     </message>
     <message>
         <source>Face</source>
-        <translation type="vanished">Visage</translation>
+        <translation type="vanished">Reconnaissance faciale</translation>
     </message>
     <message>
         <source>VoicePrint</source>
-        <translation type="vanished">VoicePrint</translation>
+        <translation type="vanished">Voiceprint</translation>
+    </message>
+    <message>
+        <source>ukey</source>
+        <translation type="vanished">Clés de sécurité</translation>
+    </message>
+    <message>
+        <source>QRCode</source>
+        <translation type="vanished">Code QR</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+</context>
+<context>
+    <name>BioDevicesWidget</name>
+    <message>
+        <source>Form</source>
+        <translation type="vanished">Forme</translation>
+    </message>
+    <message>
+        <source>Device types:</source>
+        <translation type="vanished">设备类型:</translation>
+    </message>
+    <message>
+        <source>Back</source>
+        <translation type="vanished">返回</translation>
+    </message>
+    <message>
+        <source>OK</source>
+        <translation type="vanished">确定</translation>
+    </message>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="vanished">指纹</translation>
+    </message>
+</context>
+<context>
+    <name>LoginOptionsWidget</name>
+    <message>
+        <source>Login Options</source>
+        <translation type="vanished">Options de connexion</translation>
+    </message>
+    <message>
+        <source>Password</source>
+        <translation type="vanished">mot de passe</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+    <message>
+        <source>Biometric</source>
+        <translation type="vanished">生物识别</translation>
     </message>
 </context>
 <context>
     <name>QObject</name>
     <message>
+        <source>FingerPrint</source>
+        <translation type="vanished">指纹</translation>
+    </message>
+    <message>
+        <source>FingerVein</source>
+        <translation type="vanished">指静脉</translation>
+    </message>
+    <message>
+        <source>Iris</source>
+        <translation type="vanished">虹膜</translation>
+    </message>
+    <message>
+        <source>Face</source>
+        <translation type="vanished">人脸</translation>
+    </message>
+    <message>
+        <source>VoicePrint</source>
+        <translation type="vanished">声纹</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="126"/>
+        <source>Enter the ukey password</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="150"/>
         <source>Try it again</source>
-        <translation>Essayez à nouveau</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../src/main.cpp" line="152"/>
         <source>Use other Devices</source>
-        <translation>Utiliser d&apos;autres appareils</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../src/main.cpp" line="153"/>
         <source>Cancel</source>
-        <translation>Annuler</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../src/main.cpp" line="162"/>
         <source>Choose the option</source>
-        <translation>Choisissez l&apos;option</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../src/main.cpp" line="184"/>
+        <location filename="../src/main.cpp" line="219"/>
+        <location filename="../src/main.cpp" line="228"/>
         <source>Invaild response &quot;</source>
-        <translation>Réponse Invaild \ &quot;</translation>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="184"/>
+        <location filename="../src/main.cpp" line="219"/>
+        <location filename="../src/main.cpp" line="228"/>
+        <source>authentication will be canceld</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../src/main.cpp" line="185"/>
+        <location filename="../src/main.cpp" line="220"/>
+        <location filename="../src/main.cpp" line="229"/>
+        <location filename="../src/main.cpp" line="408"/>
         <source>AUTHENTICATION CANCELED</source>
-        <translation>AUTHENTIFICATION ANNULEE</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../src/main.cpp" line="196"/>
         <source>=== BIOMETRIC DEVICES ===</source>
-        <translation>=== DISPOSITIFS BIOMETRIQUES ===</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../src/main.cpp" line="207"/>
         <source>Choose the device</source>
-        <translation>Choisissez l&apos;appareil</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../src/main.cpp" line="260"/>
         <source>Sevice Name</source>
-        <translation>Nom de Sevice</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../src/main.cpp" line="261"/>
         <source>DISPLAY env</source>
-        <translation>AFFICHER env</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../src/main.cpp" line="262"/>
         <source>User</source>
-        <translation>Utilisateur</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../src/main.cpp" line="263"/>
         <source>Display debug information</source>
-        <translation>Afficher les informations de débogage</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../src/main.cpp" line="264"/>
         <source>Device short name</source>
-        <translation>Nom abrégé de l&apos;appareil</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../src/main.cpp" line="306"/>
+        <source>UKEY AUTHENTICATION</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="308"/>
         <source>BIOMETRIC AUTHENTICATION</source>
-        <translation>AUTHENTIFICATION BIOMETRIQUE</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../src/main.cpp" line="310"/>
         <source>Press Q or Esc to cancel</source>
-        <translation>Appuyez sur Q ou Echap pour annuler</translation>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="330"/>
+        <source>BIOMETRIC AUTHENTICATION IS CLOSED</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../src/main.cpp" line="334"/>
         <source>AUTHENTICATION SUCCESS</source>
-        <translation>SUCCÈS D&apos;AUTHENTIFICATION</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../src/main.cpp" line="338"/>
         <source>AUTHENTICATION FAILED</source>
-        <translation>AUTHENTIFICATION ÉCHOUÉE</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>BIOMETRIC AUTHENTICATION END</source>
-        <translation>FIN DE L&apos;AUTHENTIFICATION BIOMÉTRIQUE</translation>
+        <location filename="../src/main.cpp" line="348"/>
+        <source>Failed to verify %1, you still have %2 verification opportunities</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>authentication will be canceld</source>
+        <location filename="../src/main.cpp" line="350"/>
+        <source>Unable to verify %1, please enter password.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Failed to verify %1, you still have %2 verification opportunities</source>
+        <location filename="../src/main.cpp" line="386"/>
+        <source>AUTHENTICATION END</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Unable to verify %1, please enter password.</source>
+        <location filename="../src/main.cpp" line="388"/>
+        <source>BIOMETRIC AUTHENTICATION END</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth-bin/i18n_ts/kk.ts ukui-biometric-auth-4.20.0.0/bioauth-bin/i18n_ts/kk.ts
--- ukui-biometric-auth-4.10.0.0/bioauth-bin/i18n_ts/kk.ts	1970-01-01 08:00:00.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth-bin/i18n_ts/kk.ts	2024-09-23 19:22:29.000000000 +0800
@@ -0,0 +1,295 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="kk">
+<context>
+    <name>BioAuthWidget</name>
+    <message>
+        <source>Form</source>
+        <translation type="vanished">Пішін</translation>
+    </message>
+    <message>
+        <source>More</source>
+        <translation type="vanished">更多</translation>
+    </message>
+    <message>
+        <source>Retry</source>
+        <translation type="vanished">ретри</translation>
+    </message>
+    <message>
+        <source>Too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">验证失败达最大次数,请使用密码解锁</translation>
+    </message>
+    <message>
+        <source>Bioauth authentication failed, you still have %1 verification opportunities</source>
+        <translation type="vanished">生物认证失败,您还有%1次尝试机会</translation>
+    </message>
+    <message>
+        <source>Password</source>
+        <translation type="vanished">құпиясөз</translation>
+    </message>
+    <message>
+        <source>Current Device: </source>
+        <translation type="vanished">当前设备:</translation>
+    </message>
+    <message>
+        <source>%1 too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">% 1 Қате әрекеттер тым көп, құпия сөзіңізді енгізіңіз.</translation>
+    </message>
+    <message>
+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
+        <translation type="vanished">% 1 аутентификациясы жаңылысқан және әлі де% 2 мүмкіндігі бар</translation>
+    </message>
+    <message>
+        <source>Please use wechat to scan the code</source>
+        <translation type="vanished">Кодты сканерлеу үшін WeChat пайдалануыңызды сұраймын</translation>
+    </message>
+</context>
+<context>
+    <name>BioDevices</name>
+    <message>
+        <source>Unplugging of %1 device detected</source>
+        <translation type="vanished">% 1 құрылғы ажыратылды</translation>
+    </message>
+    <message>
+        <source>%1 device insertion detected</source>
+        <translation type="vanished">% 1 құрылғы анықталды</translation>
+    </message>
+    <message>
+        <source>ukui-biometric-manager</source>
+        <translation type="vanished">Биометриялық басқару құралдары</translation>
+    </message>
+    <message>
+        <source>biometric</source>
+        <translation type="vanished">Биологиялық сипаттамалары</translation>
+    </message>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="vanished">саусақ ізі</translation>
+    </message>
+    <message>
+        <source>FingerVein</source>
+        <translation type="vanished">Саусақ көктамырлары</translation>
+    </message>
+    <message>
+        <source>Iris</source>
+        <translation type="vanished">ирис</translation>
+    </message>
+    <message>
+        <source>Face</source>
+        <translation type="vanished">Бет тану</translation>
+    </message>
+    <message>
+        <source>VoicePrint</source>
+        <translation type="vanished">Дауыстық із</translation>
+    </message>
+    <message>
+        <source>ukey</source>
+        <translation type="vanished">Қауіпсіздік кілттері</translation>
+    </message>
+    <message>
+        <source>QRCode</source>
+        <translation type="vanished">QR коды</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+</context>
+<context>
+    <name>BioDevicesWidget</name>
+    <message>
+        <source>Form</source>
+        <translation type="vanished">Пішін</translation>
+    </message>
+    <message>
+        <source>Device types:</source>
+        <translation type="vanished">设备类型:</translation>
+    </message>
+    <message>
+        <source>Back</source>
+        <translation type="vanished">返回</translation>
+    </message>
+    <message>
+        <source>OK</source>
+        <translation type="vanished">确定</translation>
+    </message>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="vanished">指纹</translation>
+    </message>
+</context>
+<context>
+    <name>LoginOptionsWidget</name>
+    <message>
+        <source>Login Options</source>
+        <translation type="vanished">Кіру параметрлері</translation>
+    </message>
+    <message>
+        <source>Password</source>
+        <translation type="vanished">құпиясөз</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+    <message>
+        <source>Biometric</source>
+        <translation type="vanished">生物识别</translation>
+    </message>
+</context>
+<context>
+    <name>QObject</name>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="vanished">指纹</translation>
+    </message>
+    <message>
+        <source>FingerVein</source>
+        <translation type="vanished">指静脉</translation>
+    </message>
+    <message>
+        <source>Iris</source>
+        <translation type="vanished">虹膜</translation>
+    </message>
+    <message>
+        <source>Face</source>
+        <translation type="vanished">人脸</translation>
+    </message>
+    <message>
+        <source>VoicePrint</source>
+        <translation type="vanished">声纹</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="126"/>
+        <source>Enter the ukey password</source>
+        <translation>ukey قۇپيا نۇمىردى كىرگىزىڭىز</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="150"/>
+        <source>Try it again</source>
+        <translation>قاتە سىناڭ</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="152"/>
+        <source>Use other Devices</source>
+        <translation>باسقا اسباب ٸستەتۋ</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="153"/>
+        <source>Cancel</source>
+        <translation>كۇشىنەن قالدىرۋ</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="162"/>
+        <source>Choose the option</source>
+        <translation>تالداۋ تۇرى</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="184"/>
+        <location filename="../src/main.cpp" line="219"/>
+        <location filename="../src/main.cpp" line="228"/>
+        <source>Invaild response &quot;</source>
+        <translation>ونٸمسٸز جاۋاپ</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="184"/>
+        <location filename="../src/main.cpp" line="219"/>
+        <location filename="../src/main.cpp" line="228"/>
+        <source>authentication will be canceld</source>
+        <translation>ازاماتتىق تەكسەرۋ كۇشىنەن قالدىرىلدى</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="185"/>
+        <location filename="../src/main.cpp" line="220"/>
+        <location filename="../src/main.cpp" line="229"/>
+        <location filename="../src/main.cpp" line="408"/>
+        <source>AUTHENTICATION CANCELED</source>
+        <translation>ازاماتتىق تەكسەرۋ كۇشىنەن قالدىرىلدى</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="196"/>
+        <source>=== BIOMETRIC DEVICES ===</source>
+        <translation>= = = بىيولوگىيەلىك پارىقتاندىرۋ اسپابٸ = = =</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="207"/>
+        <source>Choose the device</source>
+        <translation>باسقا اسباب تالدا</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="260"/>
+        <source>Sevice Name</source>
+        <translation>قىزىمەت مى</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="261"/>
+        <source>DISPLAY env</source>
+        <translation>كورسەتۋ ورتا</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="262"/>
+        <source>User</source>
+        <translation>الارمان مى</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="263"/>
+        <source>Display debug information</source>
+        <translation>تەڭشەۋ حاباردٸ كورسەتۋ</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="264"/>
+        <source>Device short name</source>
+        <translation>اسبابٸتٸڭ قىسقا مى</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="306"/>
+        <source>UKEY AUTHENTICATION</source>
+        <translation>UKEY سالاۋاتىن دالەلدەۋ</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="308"/>
+        <source>BIOMETRIC AUTHENTICATION</source>
+        <translation>بىيولوگىيەلىك ەرەكشەلىك كۋالٸكتٸ</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="310"/>
+        <source>Press Q or Esc to cancel</source>
+        <translation>Q ياكي Esc نى باسٸپ كۇشىنەن قالدىرىڭ</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="330"/>
+        <source>BIOMETRIC AUTHENTICATION IS CLOSED</source>
+        <translation>بىئولوگىيەلىك ەرەكشەلىكتى دالەلدەۋ جابٸلدٸ</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="334"/>
+        <source>AUTHENTICATION SUCCESS</source>
+        <translation>ازاماتتىق تەكسەرۋ ناتيجەلى قالدى</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="338"/>
+        <source>AUTHENTICATION FAILED</source>
+        <translation>ازاماتتىق تەكسەرۋ جەڭىلىپ قالدى.</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="348"/>
+        <source>Failed to verify %1, you still have %2 verification opportunities</source>
+        <translation>٪1 نى دالەلدەۋ جەڭىلىپ قالدى، سىزدە جانەدە ٪2 دالەلدەۋ ورايى بار</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="350"/>
+        <source>Unable to verify %1, please enter password.</source>
+        <translation>%1 نى دالەلى بولمايدى، قۇپيا نۇمىردى كىرگىزىڭىز.</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="386"/>
+        <source>AUTHENTICATION END</source>
+        <translation>ازاماتتىق تەكسەرۋ اياقتاتادى.</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="388"/>
+        <source>BIOMETRIC AUTHENTICATION END</source>
+        <translation>بىئولوگىيەلىك ەرەكشەلىك دالەل بەرۋ ۇشى</translation>
+    </message>
+</context>
+</TS>
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth-bin/i18n_ts/ky.ts ukui-biometric-auth-4.20.0.0/bioauth-bin/i18n_ts/ky.ts
--- ukui-biometric-auth-4.10.0.0/bioauth-bin/i18n_ts/ky.ts	1970-01-01 08:00:00.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth-bin/i18n_ts/ky.ts	2024-09-23 19:22:29.000000000 +0800
@@ -0,0 +1,287 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="ky">
+<context>
+    <name>BioAuthWidget</name>
+    <message>
+        <source>More</source>
+        <translation type="vanished">更多</translation>
+    </message>
+    <message>
+        <source>Retry</source>
+        <translation type="vanished">Ретри</translation>
+    </message>
+    <message>
+        <source>Too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">验证失败达最大次数,请使用密码解锁</translation>
+    </message>
+    <message>
+        <source>Bioauth authentication failed, you still have %1 verification opportunities</source>
+        <translation type="vanished">生物认证失败,您还有%1次尝试机会</translation>
+    </message>
+    <message>
+        <source>Password</source>
+        <translation type="vanished">Сырсөз</translation>
+    </message>
+    <message>
+        <source>Current Device: </source>
+        <translation type="vanished">当前设备:</translation>
+    </message>
+    <message>
+        <source>%1 too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">%1 өтө көп ийгиликсиз аракеттер,, сураныч, сырсөз киргизүү.</translation>
+    </message>
+    <message>
+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
+        <translation type="vanished">%1 аутентификациялык жетишсиздик,дагы эле %2 калган мүмкүнчүлүктөр бар</translation>
+    </message>
+    <message>
+        <source>Please use wechat to scan the code</source>
+        <translation type="vanished">Кодду сканерлеу үчүн вечат колдонуңуз</translation>
+    </message>
+</context>
+<context>
+    <name>BioDevices</name>
+    <message>
+        <source>Unplugging of %1 device detected</source>
+        <translation type="vanished">%1 орнотмосунун өчүрүлүшү аныкталды</translation>
+    </message>
+    <message>
+        <source>%1 device insertion detected</source>
+        <translation type="vanished">%1 түзмөк орнотмосу аныкталды</translation>
+    </message>
+    <message>
+        <source>ukui-biometric-manager</source>
+        <translation type="vanished">укуи-биометриялык-менеджери</translation>
+    </message>
+    <message>
+        <source>biometric</source>
+        <translation type="vanished">биометрия</translation>
+    </message>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="vanished">Манжа изи</translation>
+    </message>
+    <message>
+        <source>FingerVein</source>
+        <translation type="vanished">Манжавейн</translation>
+    </message>
+    <message>
+        <source>Iris</source>
+        <translation type="vanished">Ирис</translation>
+    </message>
+    <message>
+        <source>Face</source>
+        <translation type="vanished">Бет</translation>
+    </message>
+    <message>
+        <source>VoicePrint</source>
+        <translation type="vanished">VoicePrint</translation>
+    </message>
+    <message>
+        <source>ukey</source>
+        <translation type="vanished">уики</translation>
+    </message>
+    <message>
+        <source>QRCode</source>
+        <translation type="vanished">QRCode</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+</context>
+<context>
+    <name>BioDevicesWidget</name>
+    <message>
+        <source>Device types:</source>
+        <translation type="vanished">设备类型:</translation>
+    </message>
+    <message>
+        <source>Back</source>
+        <translation type="vanished">返回</translation>
+    </message>
+    <message>
+        <source>OK</source>
+        <translation type="vanished">确定</translation>
+    </message>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="vanished">指纹</translation>
+    </message>
+</context>
+<context>
+    <name>LoginOptionsWidget</name>
+    <message>
+        <source>Login Options</source>
+        <translation type="vanished">Кирүү параметрлери</translation>
+    </message>
+    <message>
+        <source>Password</source>
+        <translation type="vanished">Сырсөз</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+    <message>
+        <source>Biometric</source>
+        <translation type="vanished">生物识别</translation>
+    </message>
+</context>
+<context>
+    <name>QObject</name>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="vanished">指纹</translation>
+    </message>
+    <message>
+        <source>FingerVein</source>
+        <translation type="vanished">指静脉</translation>
+    </message>
+    <message>
+        <source>Iris</source>
+        <translation type="vanished">虹膜</translation>
+    </message>
+    <message>
+        <source>Face</source>
+        <translation type="vanished">人脸</translation>
+    </message>
+    <message>
+        <source>VoicePrint</source>
+        <translation type="vanished">声纹</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="126"/>
+        <source>Enter the ukey password</source>
+        <translation>ukey جاشىرۇۇن  نومۇرۇن كىرگىزىڭ</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="150"/>
+        <source>Try it again</source>
+        <translation>قايرا سىناڭ</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="152"/>
+        <source>Use other Devices</source>
+        <translation>باشقا شايمان ىشتەتىش</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="153"/>
+        <source>Cancel</source>
+        <translation>ارعادان  قالتىرىش</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="162"/>
+        <source>Choose the option</source>
+        <translation>تانداش  تۉرۉ</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="184"/>
+        <location filename="../src/main.cpp" line="219"/>
+        <location filename="../src/main.cpp" line="228"/>
+        <source>Invaild response &quot;</source>
+        <translation>ۅنۉمسۉز ىنكاس</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="184"/>
+        <location filename="../src/main.cpp" line="219"/>
+        <location filename="../src/main.cpp" line="228"/>
+        <source>authentication will be canceld</source>
+        <translation>اتۇۇلدۇق  تەكشەرىش  ارعادان  قالتىرلات</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="185"/>
+        <location filename="../src/main.cpp" line="220"/>
+        <location filename="../src/main.cpp" line="229"/>
+        <location filename="../src/main.cpp" line="408"/>
+        <source>AUTHENTICATION CANCELED</source>
+        <translation>اتۇۇلدۇق  تەكشەرىش  ارعادان  قالتىرىلدى</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="196"/>
+        <source>=== BIOMETRIC DEVICES ===</source>
+        <translation>= = = بىيولوگىيەلىك ايىرمالاندىرىش  جابدۇۇسۇ = = =</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="207"/>
+        <source>Choose the device</source>
+        <translation>باشقا شايمان تانداڭ</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="260"/>
+        <source>Sevice Name</source>
+        <translation>تەيلۅۅ ناامى</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="261"/>
+        <source>DISPLAY env</source>
+        <translation>كۅرسۅتۉۉ  چۅيرۅسۉ</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="262"/>
+        <source>User</source>
+        <translation>كەرەكتۅۅچۉ ناامى</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="263"/>
+        <source>Display debug information</source>
+        <translation>تەڭشۅۅ  ۇچۇردۇ كۅرسۅتۉۉ</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="264"/>
+        <source>Device short name</source>
+        <translation>جابدۇۇسۇنۇن قىسقا ناامى</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="306"/>
+        <source>UKEY AUTHENTICATION</source>
+        <translation>UKEY تولۇمدۇۇلۇق دالىلدۅ</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="308"/>
+        <source>BIOMETRIC AUTHENTICATION</source>
+        <translation>بىيولوگىيەلىك ۅزگۅچۅلۉك ىسپاتى</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="310"/>
+        <source>Press Q or Esc to cancel</source>
+        <translation>Q كۅرۉنۉشتۅرۉ Esc نى باسىپ ارعادان  قالتىرىڭ</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="330"/>
+        <source>BIOMETRIC AUTHENTICATION IS CLOSED</source>
+        <translation>بىئولوگىيەلىك ۅزگۅچۅلۉگۉ دالىلدۅ تاقالدى</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="334"/>
+        <source>AUTHENTICATION SUCCESS</source>
+        <translation>اتۇۇلدۇق  تەكشەرىش  جەڭىشتۉۉ بولدۇ</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="338"/>
+        <source>AUTHENTICATION FAILED</source>
+        <translation>اتۇۇلدۇق  تەكشەرىش  جەڭىلۉۉ بولدۇ .</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="348"/>
+        <source>Failed to verify %1, you still have %2 verification opportunities</source>
+        <translation>٪1 نى دالىلدۅ جەڭىلۉۉ بولدۇ ، سىزدە  داعى ەلە ٪2 دالىلدۅ مۅۅرتۉ بار</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="350"/>
+        <source>Unable to verify %1, please enter password.</source>
+        <translation>%1 نى دالىلدەگەلى بولبويت ، جاشىرۇۇن  نومۇردۇ  كىرگىزىڭ.</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="386"/>
+        <source>AUTHENTICATION END</source>
+        <translation>اتۇۇلدۇق  تەكشەرىش  سوڭۇنا چىقتى.</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="388"/>
+        <source>BIOMETRIC AUTHENTICATION END</source>
+        <translation>بىئولوگىيەلىك ۅزگۅچۅلۉك ىسپات بەرۉۉ ۇچۇ</translation>
+    </message>
+</context>
+</TS>
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth-bin/i18n_ts/mn.ts ukui-biometric-auth-4.20.0.0/bioauth-bin/i18n_ts/mn.ts
--- ukui-biometric-auth-4.10.0.0/bioauth-bin/i18n_ts/mn.ts	1970-01-01 08:00:00.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth-bin/i18n_ts/mn.ts	2024-09-23 19:22:29.000000000 +0800
@@ -0,0 +1,287 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="mn">
+<context>
+    <name>BioAuthWidget</name>
+    <message>
+        <source>More</source>
+        <translation type="vanished">更多</translation>
+    </message>
+    <message>
+        <source>Retry</source>
+        <translation type="vanished">ᠳᠠᠬᠢᠨ ᠲᠤᠷᠰᠢᠬᠤ</translation>
+    </message>
+    <message>
+        <source>Too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">验证失败达最大次数,请使用密码解锁</translation>
+    </message>
+    <message>
+        <source>Bioauth authentication failed, you still have %1 verification opportunities</source>
+        <translation type="vanished">生物认证失败,您还有%1次尝试机会</translation>
+    </message>
+    <message>
+        <source>Password</source>
+        <translation type="vanished">ᠨᠢᠭᠤᠴᠠ ᠺᠣᠳ᠋</translation>
+    </message>
+    <message>
+        <source>Current Device: </source>
+        <translation type="vanished">当前设备:</translation>
+    </message>
+    <message>
+        <source>%1 too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">%1 ᠢᠯᠠᠭᠳᠠᠭᠰᠠᠨ ᠲᠤᠷᠰᠢᠬᠤ ᠤᠳᠠᠭ᠎ᠠ ᠲᠣᠭ᠎ᠠ ᠬᠡᠳᠦ ᠣᠯᠠᠨ ᠂ ᠨᠢᠭᠤᠴᠠ ᠺᠣᠳ᠋ ᠣᠷᠣᠭᠤᠯᠤᠭᠠᠷᠠᠢ ᠃</translation>
+    </message>
+    <message>
+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
+        <translation type="vanished">%1 ᠪᠡᠶ᠎ᠡ᠎ᠶ᠋ᠢᠨ ᠬᠢᠷᠢ᠎ᠶ᠋ᠢᠨ ᠰᠢᠯᠭᠠᠨ ᠪᠠᠲᠤᠯᠠᠯᠲᠠ ᠢᠯᠠᠭᠳᠠᠪᠠ ᠂ ᠮᠥᠨ %2 ᠦᠯᠡᠳᠡᠬᠦ ᠲᠣᠬᠢᠶᠠᠯ ᠪᠣᠢ</translation>
+    </message>
+    <message>
+        <source>Please use wechat to scan the code</source>
+        <translation type="vanished">ᠸᠢᠴᠠᠲ᠎ᠢ᠋ᠶ᠋ᠠᠷ ᠦᠰᠦᠭ ᠰᠢᠷᠪᠢᠬᠦ ᠪᠣᠯᠪᠠᠤ</translation>
+    </message>
+</context>
+<context>
+    <name>BioDevices</name>
+    <message>
+        <source>Unplugging of %1 device detected</source>
+        <translation type="vanished">%1 ᠲᠥᠬᠥᠭᠡᠷᠦᠮᠵᠢ᠎ᠶ᠋ᠢ ᠰᠤᠭᠤᠯᠵᠤ ᠭᠠᠷᠭᠠᠨ ᠠ</translation>
+    </message>
+    <message>
+        <source>%1 device insertion detected</source>
+        <translation type="vanished">%1 ᠲᠥᠬᠥᠭᠡᠷᠦᠮᠵᠢ ᠬᠠᠪᠴᠢᠭᠤᠯᠤᠭᠰᠠᠨ᠎ᠢ᠋ ᠪᠠᠢᠴᠠᠭᠠᠨ ᠣᠯᠪᠠ</translation>
+    </message>
+    <message>
+        <source>ukui-biometric-manager</source>
+        <translation type="vanished">ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ᠎ᠤ᠋ᠨ ᠣᠨᠴᠠᠯᠢᠭ ᠬᠠᠮᠢᠶᠠᠷᠤᠯᠲᠠ᠎ᠶ᠋ᠢᠨ ᠪᠠᠭᠠᠵᠢ</translation>
+    </message>
+    <message>
+        <source>biometric</source>
+        <translation type="vanished">ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ᠎ᠤ᠋ᠨ ᠣᠨᠴᠠᠯᠢᠭ</translation>
+    </message>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="vanished">ᠬᠤᠷᠤᠭᠤᠨ ᠬᠡ</translation>
+    </message>
+    <message>
+        <source>FingerVein</source>
+        <translation type="vanished">ᠬᠤᠷᠤᠭᠤᠨ ᠨᠠᠮᠵᠢᠭᠤᠨ ᠰᠤᠳᠠᠰᠤ</translation>
+    </message>
+    <message>
+        <source>Iris</source>
+        <translation type="vanished">ᠰᠣᠯᠣᠩᠭ᠎ᠠ ᠪᠦᠷᠬᠦᠭᠦᠯ</translation>
+    </message>
+    <message>
+        <source>Face</source>
+        <translation type="vanished">ᠬᠥᠮᠦᠨ᠎ᠦ᠌ ᠨᠢᠭᠤᠷ ᠲᠠᠨᠢᠬᠤ</translation>
+    </message>
+    <message>
+        <source>VoicePrint</source>
+        <translation type="vanished">ᠳᠠᠭᠤᠨ ᠡᠷᠢᠶᠡᠨ</translation>
+    </message>
+    <message>
+        <source>ukey</source>
+        <translation type="vanished">ᠠᠶᠤᠯᠭᠦᠢ ᠨᠢᠭᠤᠴᠠ ᠲᠦᠯᠬᠢᠭᠦᠷ</translation>
+    </message>
+    <message>
+        <source>QRCode</source>
+        <translation type="vanished">ᠬᠣᠶᠠᠷ ᠬᠡᠮᠵᠢᠯᠲᠦ ᠺᠣᠳ᠋</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+</context>
+<context>
+    <name>BioDevicesWidget</name>
+    <message>
+        <source>Device types:</source>
+        <translation type="vanished">设备类型:</translation>
+    </message>
+    <message>
+        <source>Back</source>
+        <translation type="vanished">返回</translation>
+    </message>
+    <message>
+        <source>OK</source>
+        <translation type="vanished">确定</translation>
+    </message>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="vanished">指纹</translation>
+    </message>
+</context>
+<context>
+    <name>LoginOptionsWidget</name>
+    <message>
+        <source>Login Options</source>
+        <translation type="vanished">ᠲᠡᠮᠳᠡᠭᠯᠡᠬᠦ ᠰᠤᠩᠭᠤᠭᠳᠠᠬᠤᠨ</translation>
+    </message>
+    <message>
+        <source>Password</source>
+        <translation type="vanished">ᠨᠢᠭᠤᠴᠠ ᠺᠣᠳ᠋</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+    <message>
+        <source>Biometric</source>
+        <translation type="vanished">生物识别</translation>
+    </message>
+</context>
+<context>
+    <name>QObject</name>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="vanished">指纹</translation>
+    </message>
+    <message>
+        <source>FingerVein</source>
+        <translation type="vanished">指静脉</translation>
+    </message>
+    <message>
+        <source>Iris</source>
+        <translation type="vanished">虹膜</translation>
+    </message>
+    <message>
+        <source>Face</source>
+        <translation type="vanished">人脸</translation>
+    </message>
+    <message>
+        <source>VoicePrint</source>
+        <translation type="vanished">声纹</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="126"/>
+        <source>Enter the ukey password</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="150"/>
+        <source>Try it again</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="152"/>
+        <source>Use other Devices</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="153"/>
+        <source>Cancel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="162"/>
+        <source>Choose the option</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="184"/>
+        <location filename="../src/main.cpp" line="219"/>
+        <location filename="../src/main.cpp" line="228"/>
+        <source>Invaild response &quot;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="184"/>
+        <location filename="../src/main.cpp" line="219"/>
+        <location filename="../src/main.cpp" line="228"/>
+        <source>authentication will be canceld</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="185"/>
+        <location filename="../src/main.cpp" line="220"/>
+        <location filename="../src/main.cpp" line="229"/>
+        <location filename="../src/main.cpp" line="408"/>
+        <source>AUTHENTICATION CANCELED</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="196"/>
+        <source>=== BIOMETRIC DEVICES ===</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="207"/>
+        <source>Choose the device</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="260"/>
+        <source>Sevice Name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="261"/>
+        <source>DISPLAY env</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="262"/>
+        <source>User</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="263"/>
+        <source>Display debug information</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="264"/>
+        <source>Device short name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="306"/>
+        <source>UKEY AUTHENTICATION</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="308"/>
+        <source>BIOMETRIC AUTHENTICATION</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="310"/>
+        <source>Press Q or Esc to cancel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="330"/>
+        <source>BIOMETRIC AUTHENTICATION IS CLOSED</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="334"/>
+        <source>AUTHENTICATION SUCCESS</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="338"/>
+        <source>AUTHENTICATION FAILED</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="348"/>
+        <source>Failed to verify %1, you still have %2 verification opportunities</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="350"/>
+        <source>Unable to verify %1, please enter password.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="386"/>
+        <source>AUTHENTICATION END</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="388"/>
+        <source>BIOMETRIC AUTHENTICATION END</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+</TS>
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth-bin/i18n_ts/pt.ts ukui-biometric-auth-4.20.0.0/bioauth-bin/i18n_ts/pt.ts
--- ukui-biometric-auth-4.10.0.0/bioauth-bin/i18n_ts/pt.ts	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth-bin/i18n_ts/pt.ts	2024-09-23 19:22:29.000000000 +0800
@@ -110,5 +110,21 @@
         <source>Unable to verify %1, please enter password.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Enter the ukey password</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>UKEY AUTHENTICATION</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>BIOMETRIC AUTHENTICATION IS CLOSED</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>AUTHENTICATION END</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth-bin/i18n_ts/ru.ts ukui-biometric-auth-4.20.0.0/bioauth-bin/i18n_ts/ru.ts
--- ukui-biometric-auth-4.10.0.0/bioauth-bin/i18n_ts/ru.ts	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth-bin/i18n_ts/ru.ts	2024-09-23 19:22:29.000000000 +0800
@@ -110,5 +110,21 @@
         <source>Unable to verify %1, please enter password.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Enter the ukey password</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>UKEY AUTHENTICATION</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>BIOMETRIC AUTHENTICATION IS CLOSED</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>AUTHENTICATION END</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth-bin/i18n_ts/tr.ts ukui-biometric-auth-4.20.0.0/bioauth-bin/i18n_ts/tr.ts
--- ukui-biometric-auth-4.10.0.0/bioauth-bin/i18n_ts/tr.ts	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth-bin/i18n_ts/tr.ts	2024-09-23 19:22:29.000000000 +0800
@@ -27,114 +27,134 @@
 <context>
     <name>QObject</name>
     <message>
-        <location filename="../src/main.cpp" line="100"/>
+        <location filename="../src/main.cpp" line="126"/>
+        <source>Enter the ukey password</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="150"/>
         <source>Try it again</source>
         <translation>Yeniden Dene</translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="102"/>
+        <location filename="../src/main.cpp" line="152"/>
         <source>Use other Devices</source>
         <translation>Diğer Cihazları Kullan</translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="103"/>
+        <location filename="../src/main.cpp" line="153"/>
         <source>Cancel</source>
         <translation>İptal</translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="112"/>
+        <location filename="../src/main.cpp" line="162"/>
         <source>Choose the option</source>
         <translation>Seçeneği seçin</translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="134"/>
-        <location filename="../src/main.cpp" line="169"/>
-        <location filename="../src/main.cpp" line="178"/>
+        <location filename="../src/main.cpp" line="184"/>
+        <location filename="../src/main.cpp" line="219"/>
+        <location filename="../src/main.cpp" line="228"/>
         <source>Invaild response &quot;</source>
         <translation>Geçersiz cevap &quot;</translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="134"/>
-        <location filename="../src/main.cpp" line="169"/>
-        <location filename="../src/main.cpp" line="178"/>
+        <location filename="../src/main.cpp" line="184"/>
+        <location filename="../src/main.cpp" line="219"/>
+        <location filename="../src/main.cpp" line="228"/>
         <source>authentication will be canceld</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="135"/>
-        <location filename="../src/main.cpp" line="170"/>
-        <location filename="../src/main.cpp" line="179"/>
-        <location filename="../src/main.cpp" line="315"/>
+        <location filename="../src/main.cpp" line="185"/>
+        <location filename="../src/main.cpp" line="220"/>
+        <location filename="../src/main.cpp" line="229"/>
+        <location filename="../src/main.cpp" line="408"/>
         <source>AUTHENTICATION CANCELED</source>
         <translation>KİMLİK DOĞRULAMA</translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="146"/>
+        <location filename="../src/main.cpp" line="196"/>
         <source>=== BIOMETRIC DEVICES ===</source>
         <translation>=== BİYOMETRİK CİHAZLAR ===</translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="157"/>
+        <location filename="../src/main.cpp" line="207"/>
         <source>Choose the device</source>
         <translation>Cihazı seçin</translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="210"/>
+        <location filename="../src/main.cpp" line="260"/>
         <source>Sevice Name</source>
         <translation>Servis Adı</translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="211"/>
+        <location filename="../src/main.cpp" line="261"/>
         <source>DISPLAY env</source>
         <translation>EKRAN env</translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="212"/>
+        <location filename="../src/main.cpp" line="262"/>
         <source>User</source>
         <translation type="unfinished">Kullanıcı</translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="213"/>
+        <location filename="../src/main.cpp" line="263"/>
         <source>Display debug information</source>
         <translation>Hata ayıklama bilgilerini görüntüle</translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="214"/>
+        <location filename="../src/main.cpp" line="264"/>
         <source>Device short name</source>
         <translation type="unfinished">Cihaz kısa adı</translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="249"/>
+        <location filename="../src/main.cpp" line="306"/>
+        <source>UKEY AUTHENTICATION</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="308"/>
         <source>BIOMETRIC AUTHENTICATION</source>
         <translation>BİYOMETRİK KİMLİK DOĞRULAMA</translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="251"/>
+        <location filename="../src/main.cpp" line="310"/>
         <source>Press Q or Esc to cancel</source>
         <translation>İptal etmek için Q veya Esc tuşuna basın</translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="263"/>
+        <location filename="../src/main.cpp" line="330"/>
+        <source>BIOMETRIC AUTHENTICATION IS CLOSED</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="334"/>
         <source>AUTHENTICATION SUCCESS</source>
         <translation>KİMLİK DOĞRULAMA</translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="267"/>
+        <location filename="../src/main.cpp" line="338"/>
         <source>AUTHENTICATION FAILED</source>
         <translation>KİMLİK DOĞRULAMA BAŞARISIZ OLDU</translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="277"/>
+        <location filename="../src/main.cpp" line="348"/>
         <source>Failed to verify %1, you still have %2 verification opportunities</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="279"/>
+        <location filename="../src/main.cpp" line="350"/>
         <source>Unable to verify %1, please enter password.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="302"/>
+        <location filename="../src/main.cpp" line="386"/>
+        <source>AUTHENTICATION END</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="388"/>
         <source>BIOMETRIC AUTHENTICATION END</source>
         <translation>BİYOMETRİK KİMLİK DOĞRULAMA SONU</translation>
     </message>
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth-bin/i18n_ts/ug.ts ukui-biometric-auth-4.20.0.0/bioauth-bin/i18n_ts/ug.ts
--- ukui-biometric-auth-4.10.0.0/bioauth-bin/i18n_ts/ug.ts	1970-01-01 08:00:00.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth-bin/i18n_ts/ug.ts	2024-09-23 19:22:29.000000000 +0800
@@ -0,0 +1,287 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="ug">
+<context>
+    <name>BioAuthWidget</name>
+    <message>
+        <source>More</source>
+        <translation type="vanished">更多</translation>
+    </message>
+    <message>
+        <source>Retry</source>
+        <translation type="vanished">قايتا سىناپ بىقىڭ</translation>
+    </message>
+    <message>
+        <source>Too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">验证失败达最大次数,请使用密码解锁</translation>
+    </message>
+    <message>
+        <source>Bioauth authentication failed, you still have %1 verification opportunities</source>
+        <translation type="vanished">生物认证失败,您还有%1次尝试机会</translation>
+    </message>
+    <message>
+        <source>Password</source>
+        <translation type="vanished">مەخپىي نومۇر</translation>
+    </message>
+    <message>
+        <source>Current Device: </source>
+        <translation type="vanished">当前设备:</translation>
+    </message>
+    <message>
+        <source>%1 too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">1-نومۇر مەغلۇپ بولغان سىناق قېتىم سانى زىيادە كۆپ، مەخپىي نومۇرنى كىرگۈزۈڭ</translation>
+    </message>
+    <message>
+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
+        <translation type="vanished">بىر كىملىك دەلىللەش مەغلۇپ بولدى، يەنىلا ٪2 ئېشىپ قالغان پۇرسەت بار</translation>
+    </message>
+    <message>
+        <source>Please use wechat to scan the code</source>
+        <translation type="vanished">ئۈندىداردا كود سۈپۈرۈڭ</translation>
+    </message>
+</context>
+<context>
+    <name>BioDevices</name>
+    <message>
+        <source>Unplugging of %1 device detected</source>
+        <translation type="vanished">تەكشۈرۈپ بايقىغان 1 ئۈسكۈنىنى تارتىپ چىقارماق</translation>
+    </message>
+    <message>
+        <source>%1 device insertion detected</source>
+        <translation type="vanished">٪1 ئۈسكۈنىنىڭ كىرگۈزۈلگەنلىكىنى تەكشۈرۈپ چىقماق</translation>
+    </message>
+    <message>
+        <source>ukui-biometric-manager</source>
+        <translation type="vanished">بىئولوگىيەلىك ئالاھىدىلىك باشقۇرۇش قورالى</translation>
+    </message>
+    <message>
+        <source>biometric</source>
+        <translation type="vanished">بىئولوگىيەلىك ئالاھىدىلىك</translation>
+    </message>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="vanished">بارماق ئىزى</translation>
+    </message>
+    <message>
+        <source>FingerVein</source>
+        <translation type="vanished">ۋېنانى كۆرسىتىدۇ</translation>
+    </message>
+    <message>
+        <source>Iris</source>
+        <translation type="vanished">رەڭدار پەردە</translation>
+    </message>
+    <message>
+        <source>Face</source>
+        <translation type="vanished">ئادەم يۈزىنى پەرقلەندۈرۈش</translation>
+    </message>
+    <message>
+        <source>VoicePrint</source>
+        <translation type="vanished">ئاۋاز سىزىقى</translation>
+    </message>
+    <message>
+        <source>ukey</source>
+        <translation type="vanished">بىخەتەر ئاچقۇچ</translation>
+    </message>
+    <message>
+        <source>QRCode</source>
+        <translation type="vanished">ئىككى ئۆلچەملىك كود</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+</context>
+<context>
+    <name>BioDevicesWidget</name>
+    <message>
+        <source>Device types:</source>
+        <translation type="vanished">设备类型:</translation>
+    </message>
+    <message>
+        <source>Back</source>
+        <translation type="vanished">返回</translation>
+    </message>
+    <message>
+        <source>OK</source>
+        <translation type="vanished">确定</translation>
+    </message>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="vanished">指纹</translation>
+    </message>
+</context>
+<context>
+    <name>LoginOptionsWidget</name>
+    <message>
+        <source>Login Options</source>
+        <translation type="vanished">تاللاش تۈرىگە كىرمەك</translation>
+    </message>
+    <message>
+        <source>Password</source>
+        <translation type="vanished">مەخپىي نومۇر</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+    <message>
+        <source>Biometric</source>
+        <translation type="vanished">生物识别</translation>
+    </message>
+</context>
+<context>
+    <name>QObject</name>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="vanished">指纹</translation>
+    </message>
+    <message>
+        <source>FingerVein</source>
+        <translation type="vanished">指静脉</translation>
+    </message>
+    <message>
+        <source>Iris</source>
+        <translation type="vanished">虹膜</translation>
+    </message>
+    <message>
+        <source>Face</source>
+        <translation type="vanished">人脸</translation>
+    </message>
+    <message>
+        <source>VoicePrint</source>
+        <translation type="vanished">声纹</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="126"/>
+        <source>Enter the ukey password</source>
+        <translation>ukey مەخپىي نومۇرىنى كىرگۈزۈڭ</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="150"/>
+        <source>Try it again</source>
+        <translation>قايتا سىناڭ</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="152"/>
+        <source>Use other Devices</source>
+        <translation>باشقا ئۈسكۈنە ئىشلىتىش</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="153"/>
+        <source>Cancel</source>
+        <translation>ئەمەلدىن قالدۇرۇش</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="162"/>
+        <source>Choose the option</source>
+        <translation>تاللاش تۈرى</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="184"/>
+        <location filename="../src/main.cpp" line="219"/>
+        <location filename="../src/main.cpp" line="228"/>
+        <source>Invaild response &quot;</source>
+        <translation>ئۈنۈمسىز ئىنكاس</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="184"/>
+        <location filename="../src/main.cpp" line="219"/>
+        <location filename="../src/main.cpp" line="228"/>
+        <source>authentication will be canceld</source>
+        <translation>سالاھىيەت تەكشۈرۈش ئەمەلدىن قالدۇرۇلىدۇ</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="185"/>
+        <location filename="../src/main.cpp" line="220"/>
+        <location filename="../src/main.cpp" line="229"/>
+        <location filename="../src/main.cpp" line="408"/>
+        <source>AUTHENTICATION CANCELED</source>
+        <translation>سالاھىيەت تەكشۈرۈش ئەمەلدىن قالدۇرۇلدى</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="196"/>
+        <source>=== BIOMETRIC DEVICES ===</source>
+        <translation>= = = بىيولوگىيەلىك پەرقلەندۈرۈش ئۈسكۈنىسى = = =</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="207"/>
+        <source>Choose the device</source>
+        <translation>باشقا ئۈسكۈنە تاللاڭ</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="260"/>
+        <source>Sevice Name</source>
+        <translation>مۇلازىمەت نامى</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="261"/>
+        <source>DISPLAY env</source>
+        <translation>كۆرسىتىش مۇھىتى</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="262"/>
+        <source>User</source>
+        <translation>ئىشلەتكۈچى</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="263"/>
+        <source>Display debug information</source>
+        <translation>تەڭشەش ئۇچۇرىنى كۆرسىتىش</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="264"/>
+        <source>Device short name</source>
+        <translation>ئۈسكۈنىنىڭ قىسقا نامى</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="306"/>
+        <source>UKEY AUTHENTICATION</source>
+        <translation>UKEY سالاھىيىتىنى دەلىللەش</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="308"/>
+        <source>BIOMETRIC AUTHENTICATION</source>
+        <translation>بىيولوگىيەلىك ئالاھىدىلىك ئىسپاتى</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="310"/>
+        <source>Press Q or Esc to cancel</source>
+        <translation>Q ياكى Esc نى بېسىپ ئەمەلدىن قالدۇرۇڭ</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="330"/>
+        <source>BIOMETRIC AUTHENTICATION IS CLOSED</source>
+        <translation>بىئولوگىيەلىك ئالاھىدىلىكنى دەلىللەش تاقالدى</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="334"/>
+        <source>AUTHENTICATION SUCCESS</source>
+        <translation>سالاھىيەت تەكشۈرۈش مۇۋەپپەقىيەتلىك بولدى</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="338"/>
+        <source>AUTHENTICATION FAILED</source>
+        <translation>سالاھىيەت تەكشۈرۈش مەغلۇپ بولدى.</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="348"/>
+        <source>Failed to verify %1, you still have %2 verification opportunities</source>
+        <translation>٪1  دەلىللەش مەغلۇپ بولدى، سىزدە يەنە ٪2 دەلىللەش پۇرسىتى بار</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="350"/>
+        <source>Unable to verify %1, please enter password.</source>
+        <translation>%1 نى دەلىللىگىلى بولمايدۇ، مەخپىي نومۇرنى كىرگۈزۈڭ.</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="386"/>
+        <source>AUTHENTICATION END</source>
+        <translation>سالاھىيەت تەكشۈرۈش ئاخىرلاشتى.</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="388"/>
+        <source>BIOMETRIC AUTHENTICATION END</source>
+        <translation>بىئولوگىيەلىك ئالاھىدىلىك ئىسپات بېرىش ئۇچى</translation>
+    </message>
+</context>
+</TS>
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth-bin/i18n_ts/zh_CN.ts ukui-biometric-auth-4.20.0.0/bioauth-bin/i18n_ts/zh_CN.ts
--- ukui-biometric-auth-4.10.0.0/bioauth-bin/i18n_ts/zh_CN.ts	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth-bin/i18n_ts/zh_CN.ts	2024-09-23 19:22:29.000000000 +0800
@@ -4,12 +4,14 @@
 <context>
     <name>QObject</name>
     <message>
+        <location filename="../src/main.cpp" line="126"/>
         <source>Enter the ukey password</source>
         <translation>输入ukey密码</translation>
     </message>
     <message>
         <location filename="../src/main.cpp" line="110"/>
-        <source>Enter the ukey password</source>
+        <source>Enter the ukey password
+</source>
         <translation>输入ukey密码\n</translation>
     </message>
     <message>
@@ -18,124 +20,124 @@
         <translation>再试一次</translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="102"/>
+        <location filename="../src/main.cpp" line="152"/>
         <source>Use other Devices</source>
         <translation>使用其他设备</translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="103"/>
+        <location filename="../src/main.cpp" line="153"/>
         <source>Cancel</source>
         <translation>取消</translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="112"/>
+        <location filename="../src/main.cpp" line="162"/>
         <source>Choose the option</source>
         <translation>选择选项</translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="134"/>
-        <location filename="../src/main.cpp" line="169"/>
-        <location filename="../src/main.cpp" line="178"/>
+        <location filename="../src/main.cpp" line="184"/>
+        <location filename="../src/main.cpp" line="219"/>
+        <location filename="../src/main.cpp" line="228"/>
         <source>Invaild response &quot;</source>
         <translation>不能识别的响应 &quot;</translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="134"/>
-        <location filename="../src/main.cpp" line="169"/>
-        <location filename="../src/main.cpp" line="178"/>
+        <location filename="../src/main.cpp" line="184"/>
+        <location filename="../src/main.cpp" line="219"/>
+        <location filename="../src/main.cpp" line="228"/>
         <source>authentication will be canceld</source>
         <translation>认证将要被取消</translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="135"/>
-        <location filename="../src/main.cpp" line="170"/>
-        <location filename="../src/main.cpp" line="179"/>
-        <location filename="../src/main.cpp" line="323"/>
+        <location filename="../src/main.cpp" line="185"/>
+        <location filename="../src/main.cpp" line="220"/>
+        <location filename="../src/main.cpp" line="229"/>
+        <location filename="../src/main.cpp" line="408"/>
         <source>AUTHENTICATION CANCELED</source>
         <translation>认证被取消</translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="146"/>
+        <location filename="../src/main.cpp" line="196"/>
         <source>=== BIOMETRIC DEVICES ===</source>
         <translation>=== 生物识别设备 ===</translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="157"/>
+        <location filename="../src/main.cpp" line="207"/>
         <source>Choose the device</source>
         <translation>选择设备</translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="210"/>
+        <location filename="../src/main.cpp" line="260"/>
         <source>Sevice Name</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="211"/>
+        <location filename="../src/main.cpp" line="261"/>
         <source>DISPLAY env</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="212"/>
+        <location filename="../src/main.cpp" line="262"/>
         <source>User</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="213"/>
+        <location filename="../src/main.cpp" line="263"/>
         <source>Display debug information</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="214"/>
+        <location filename="../src/main.cpp" line="264"/>
         <source>Device short name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="282"/>
+        <location filename="../src/main.cpp" line="306"/>
         <source>UKEY AUTHENTICATION</source>
         <translation>ukey认证</translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="284"/>
+        <location filename="../src/main.cpp" line="308"/>
         <source>BIOMETRIC AUTHENTICATION</source>
         <translation>生物识别认证</translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="251"/>
+        <location filename="../src/main.cpp" line="310"/>
         <source>Press Q or Esc to cancel</source>
         <translation>按Q或者Esc取消</translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="267"/>
+        <location filename="../src/main.cpp" line="330"/>
         <source>BIOMETRIC AUTHENTICATION IS CLOSED</source>
         <translation>生物识别认证已关闭</translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="271"/>
+        <location filename="../src/main.cpp" line="334"/>
         <source>AUTHENTICATION SUCCESS</source>
         <translation>认证成功</translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="267"/>
+        <location filename="../src/main.cpp" line="338"/>
         <source>AUTHENTICATION FAILED</source>
         <translation>认证失败</translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="277"/>
+        <location filename="../src/main.cpp" line="348"/>
         <source>Failed to verify %1, you still have %2 verification opportunities</source>
         <translation>验证%1失败,您还有%2次尝试机会</translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="279"/>
+        <location filename="../src/main.cpp" line="350"/>
         <source>Unable to verify %1, please enter password.</source>
         <translation>无法验证%1,请输入密码.</translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="357"/>
+        <location filename="../src/main.cpp" line="386"/>
         <source>AUTHENTICATION END</source>
         <translation>认证结束</translation>
     </message>
     <message>
-        <location filename="../src/main.cpp" line="359"/>
+        <location filename="../src/main.cpp" line="388"/>
         <source>BIOMETRIC AUTHENTICATION END</source>
         <translation>生物识别认证结束</translation>
     </message>
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth-bin/i18n_ts/zh_HK.ts ukui-biometric-auth-4.20.0.0/bioauth-bin/i18n_ts/zh_HK.ts
--- ukui-biometric-auth-4.10.0.0/bioauth-bin/i18n_ts/zh_HK.ts	1970-01-01 08:00:00.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth-bin/i18n_ts/zh_HK.ts	2024-09-23 19:22:29.000000000 +0800
@@ -0,0 +1,287 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="zh_Hant">
+<context>
+    <name>BioAuthWidget</name>
+    <message>
+        <source>More</source>
+        <translation type="vanished">更多</translation>
+    </message>
+    <message>
+        <source>Retry</source>
+        <translation type="vanished">重試</translation>
+    </message>
+    <message>
+        <source>Too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">验证失败达最大次数,请使用密码解锁</translation>
+    </message>
+    <message>
+        <source>Bioauth authentication failed, you still have %1 verification opportunities</source>
+        <translation type="vanished">生物认证失败,您还有%1次尝试机会</translation>
+    </message>
+    <message>
+        <source>Password</source>
+        <translation type="vanished">密碼</translation>
+    </message>
+    <message>
+        <source>Current Device: </source>
+        <translation type="vanished">当前设备:</translation>
+    </message>
+    <message>
+        <source>%1 too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">%1失敗的嘗試次數太多,請輸入密碼</translation>
+    </message>
+    <message>
+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
+        <translation type="vanished">%1 身份驗證失敗,仍有 %2 個剩餘機會</translation>
+    </message>
+    <message>
+        <source>Please use wechat to scan the code</source>
+        <translation type="vanished">請使用微信掃碼</translation>
+    </message>
+</context>
+<context>
+    <name>BioDevices</name>
+    <message>
+        <source>Unplugging of %1 device detected</source>
+        <translation type="vanished">檢測到 %1 設備的拔出</translation>
+    </message>
+    <message>
+        <source>%1 device insertion detected</source>
+        <translation type="vanished">檢測到 %1 個設備插入</translation>
+    </message>
+    <message>
+        <source>ukui-biometric-manager</source>
+        <translation type="vanished">生物特徵管理工具</translation>
+    </message>
+    <message>
+        <source>biometric</source>
+        <translation type="vanished">生物特徵管理工具</translation>
+    </message>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="vanished">指紋</translation>
+    </message>
+    <message>
+        <source>FingerVein</source>
+        <translation type="vanished">指靜脈</translation>
+    </message>
+    <message>
+        <source>Iris</source>
+        <translation type="vanished">虹膜</translation>
+    </message>
+    <message>
+        <source>Face</source>
+        <translation type="vanished">人臉</translation>
+    </message>
+    <message>
+        <source>VoicePrint</source>
+        <translation type="vanished">聲紋</translation>
+    </message>
+    <message>
+        <source>ukey</source>
+        <translation type="vanished">安全金鑰</translation>
+    </message>
+    <message>
+        <source>QRCode</source>
+        <translation type="vanished">微信掃碼</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+</context>
+<context>
+    <name>BioDevicesWidget</name>
+    <message>
+        <source>Device types:</source>
+        <translation type="vanished">设备类型:</translation>
+    </message>
+    <message>
+        <source>Back</source>
+        <translation type="vanished">返回</translation>
+    </message>
+    <message>
+        <source>OK</source>
+        <translation type="vanished">确定</translation>
+    </message>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="vanished">指纹</translation>
+    </message>
+</context>
+<context>
+    <name>LoginOptionsWidget</name>
+    <message>
+        <source>Login Options</source>
+        <translation type="vanished">登錄選項</translation>
+    </message>
+    <message>
+        <source>Password</source>
+        <translation type="vanished">密碼</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+    <message>
+        <source>Biometric</source>
+        <translation type="vanished">生物识别</translation>
+    </message>
+</context>
+<context>
+    <name>QObject</name>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="vanished">指纹</translation>
+    </message>
+    <message>
+        <source>FingerVein</source>
+        <translation type="vanished">指静脉</translation>
+    </message>
+    <message>
+        <source>Iris</source>
+        <translation type="vanished">虹膜</translation>
+    </message>
+    <message>
+        <source>Face</source>
+        <translation type="vanished">人脸</translation>
+    </message>
+    <message>
+        <source>VoicePrint</source>
+        <translation type="vanished">声纹</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="126"/>
+        <source>Enter the ukey password</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="150"/>
+        <source>Try it again</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="152"/>
+        <source>Use other Devices</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="153"/>
+        <source>Cancel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="162"/>
+        <source>Choose the option</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="184"/>
+        <location filename="../src/main.cpp" line="219"/>
+        <location filename="../src/main.cpp" line="228"/>
+        <source>Invaild response &quot;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="184"/>
+        <location filename="../src/main.cpp" line="219"/>
+        <location filename="../src/main.cpp" line="228"/>
+        <source>authentication will be canceld</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="185"/>
+        <location filename="../src/main.cpp" line="220"/>
+        <location filename="../src/main.cpp" line="229"/>
+        <location filename="../src/main.cpp" line="408"/>
+        <source>AUTHENTICATION CANCELED</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="196"/>
+        <source>=== BIOMETRIC DEVICES ===</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="207"/>
+        <source>Choose the device</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="260"/>
+        <source>Sevice Name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="261"/>
+        <source>DISPLAY env</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="262"/>
+        <source>User</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="263"/>
+        <source>Display debug information</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="264"/>
+        <source>Device short name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="306"/>
+        <source>UKEY AUTHENTICATION</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="308"/>
+        <source>BIOMETRIC AUTHENTICATION</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="310"/>
+        <source>Press Q or Esc to cancel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="330"/>
+        <source>BIOMETRIC AUTHENTICATION IS CLOSED</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="334"/>
+        <source>AUTHENTICATION SUCCESS</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="338"/>
+        <source>AUTHENTICATION FAILED</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="348"/>
+        <source>Failed to verify %1, you still have %2 verification opportunities</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="350"/>
+        <source>Unable to verify %1, please enter password.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="386"/>
+        <source>AUTHENTICATION END</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="388"/>
+        <source>BIOMETRIC AUTHENTICATION END</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+</TS>
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth-bin/src/keywatcher.cpp ukui-biometric-auth-4.20.0.0/bioauth-bin/src/keywatcher.cpp
--- ukui-biometric-auth-4.10.0.0/bioauth-bin/src/keywatcher.cpp	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth-bin/src/keywatcher.cpp	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -35,6 +35,7 @@
     current.c_cc[VMIN] = 1;
     current.c_cc[VTIME] = 0;
     tcsetattr(0, TCSANOW, &current);
+    bool isInputEnd = false;
 
     while(!isInterruptionRequested()){
 
@@ -52,11 +53,18 @@
             break;
         default:
             // 'q' | 'Q' or Esc
-            if((ch = getchar()) == 'q' || ch == 'Q' || ch == 27){
+            if((ch = getchar()) == 'q' || ch == 'Q' || ch == 27 || ch == EOF){
                 tcsetattr(0, TCSANOW, &save);
                 emit exit();
+                if (ch == EOF) {
+                    isInputEnd = true;
+                    break;
+                }
             }
         }
+        if (isInputEnd) {
+            break;
+        }
     }
 
     tcsetattr(0, TCSANOW, &save);   // 恢复原来的终端属性,以免干扰shall和之后的程序运行
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth-bin/src/keywatcher.h ukui-biometric-auth-4.20.0.0/bioauth-bin/src/keywatcher.h
--- ukui-biometric-auth-4.10.0.0/bioauth-bin/src/keywatcher.h	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth-bin/src/keywatcher.h	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff -Nru ukui-biometric-auth-4.10.0.0/bioauth-bin/src/main.cpp ukui-biometric-auth-4.20.0.0/bioauth-bin/src/main.cpp
--- ukui-biometric-auth-4.10.0.0/bioauth-bin/src/main.cpp	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/bioauth-bin/src/main.cpp	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -93,6 +93,22 @@
     fprintf(stdout, RESET_COLOR);
 }
 
+static bool isQuickInput() {
+    fd_set readfds;
+    FD_ZERO(&readfds);
+    FD_SET(0, &readfds);    // stdin
+    struct timeval timeout = {0, 10*1000};
+    switch (select(32, &readfds, NULL, NULL, &timeout)) {
+    case 0: // time out
+        break;
+    case -1: // error
+        break;
+    default:
+        return true;
+    }
+    return false;
+}
+
 QString inputPinCode()
 {
     struct termios current;
@@ -241,7 +257,7 @@
     a.installTranslator(&translator_bin);
 
     QCommandLineParser parser;
-    QCommandLineOption serviceOption({"s", "service"}, QObject::tr("Sevice Name"));
+    QCommandLineOption serviceOption({"s", "service"}, QObject::tr("Sevice Name"), "service", "");
     QCommandLineOption displayOption({"x", "display"}, QObject::tr("DISPLAY env"), "display", ":0");
     QCommandLineOption usernameOption({"u", "user"}, QObject::tr("User"), "user", "");
     QCommandLineOption debugOption({"d", "debug"}, QObject::tr("Display debug information"));
@@ -258,6 +274,11 @@
     logPrefix = "[pam-diaglog]:";
     qInstallMessageHandler(outputMessage);
 
+    QString serverName = parser.value(serviceOption);
+    if (serverName == "sudo" && isQuickInput()) {
+        exit(BIO_ERROR);
+    }
+
     QString userName = parser.value(usernameOption);
     if(userName.isEmpty())
         exit(BIO_ERROR);
@@ -298,12 +319,13 @@
     });
     QObject::connect(&bioAuth, &BioAuth::authComplete, &a, [&](uid_t uid_, int result, int retErrNo){
         Q_UNUSED(retErrNo);
+
         watcher.stop();
         bool isBioEnable = bioDevices.GetBioAuthEnable(uid_);
-	bool isUkeyDevice = false;
-	if(deviceInfo && deviceInfo->biotype == 6){
-	    isUkeyDevice = true;
-	}
+        bool isUkeyDevice = false;
+        if(deviceInfo && deviceInfo->biotype == 6){
+            isUkeyDevice = true;
+        }
         if(!isBioEnable && !isUkeyDevice){
             showMessage(QObject::tr("BIOMETRIC AUTHENTICATION IS CLOSED"), RESULT);
             exit(BIO_IGNORE);
@@ -328,11 +350,11 @@
                 showMessage(QObject::tr("Unable to verify %1, please enter password.").arg(bioDevices.bioTypeToString_tr(curDeviceInfo->biotype)),RESULT);
                 exit(BIO_IGNORE);
             }
-            Option option = showOption(bioDevices.count() > 1);
+            Option option = showOption(bioDevices.getAllDevices().count() > 1);
             switch(option) {
             case OPTION_TRY_AGAIN:
                 
-		if(deviceInfo->biotype == 6){
+                if(deviceInfo->biotype == 6){
                     QString code = inputPinCode();
                     bioAuth.SetExtraInfo("pincode",code);
                 }
@@ -346,7 +368,7 @@
                 *deviceInfo = showDevices(bioDevices.getAllDevices());
                 bioAuth.setDevice(deviceInfo);
 
-		if(deviceInfo->biotype == 6){
+                if(deviceInfo->biotype == 6){
                     QString code = inputPinCode();
                     bioAuth.SetExtraInfo("pincode",code);
                 }
@@ -360,12 +382,12 @@
                 {
                     exit(BIO_ERROR);
                 }else{
-		    if(deviceInfo->biotype == 6){
-			showMessage(QObject::tr("AUTHENTICATION END"), START);
+                    if(deviceInfo->biotype == 6){
+                        showMessage(QObject::tr("AUTHENTICATION END"), START);
                     }else{
-			showMessage(QObject::tr("BIOMETRIC AUTHENTICATION END"), START);
-		    }
-		    exit(BIO_IGNORE);
+                        showMessage(QObject::tr("BIOMETRIC AUTHENTICATION END"), START);
+                    }
+                    exit(BIO_IGNORE);
                     break;
                 }
             default:
@@ -375,8 +397,8 @@
     });
 
     if(deviceInfo->biotype == 6){
-	QString code = inputPinCode();
-	bioAuth.SetExtraInfo("pincode",code);
+        QString code = inputPinCode();
+        bioAuth.SetExtraInfo("pincode",code);
     }
 
     bioAuth.startAuth();
diff -Nru ukui-biometric-auth-4.10.0.0/common/generic.cpp ukui-biometric-auth-4.20.0.0/common/generic.cpp
--- ukui-biometric-auth-4.10.0.0/common/generic.cpp	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/common/generic.cpp	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff -Nru ukui-biometric-auth-4.10.0.0/common/generic.h ukui-biometric-auth-4.20.0.0/common/generic.h
--- ukui-biometric-auth-4.10.0.0/common/generic.h	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/common/generic.h	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff -Nru ukui-biometric-auth-4.10.0.0/debian/changelog ukui-biometric-auth-4.20.0.0/debian/changelog
--- ukui-biometric-auth-4.10.0.0/debian/changelog	2024-04-23 10:31:46.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/debian/changelog	2024-11-15 17:01:40.000000000 +0800
@@ -1,3 +1,39 @@
+ukui-biometric-auth (4.20.0.0-ok1.2) huanghe; urgency=medium
+
+  * BUG号:#IB4M9L 修改密码等需要授权认证的操作直接失败,无法打开提权窗口
+  * 需求号:无
+  * 其他改动说明:无
+  * 其他改动影响域:无
+
+ -- Yang Min <yangmin@kylinos.cn>  Fri, 15 Nov 2024 17:01:40 +0800
+
+ukui-biometric-auth (4.20.0.0-ok1) huanghe; urgency=medium
+
+  * BUG号:无
+  * 需求号:#18336 登录锁屏生物特征验证流程优化
+  * 其他改动说明:无
+  * 其他改动影响域:无
+
+ -- Yang Min <yangmin@kylinos.cn>  Wed, 13 Nov 2024 19:56:28 +0800
+
+ukui-biometric-auth (4.10.0.0-ok9) nile; urgency=medium
+
+  * BUG号:无
+  * 需求号:无
+  * 其他改动说明:添加维文翻译
+  * 其他改动影响域:无
+
+ -- Yang Min <yangmin@kylinos.cn>  Tue, 27 Aug 2024 17:13:35 +0800
+
+ukui-biometric-auth (4.10.0.0-ok8) nile; urgency=medium
+
+  * BUG号:无
+  * 需求号:无
+  * 其他改动说明:更新desktop文件名
+  * 其他改动影响域:无
+
+ -- Kevin Duan <duankaiwen@kylinos.cn>  Tue, 23 Apr 2024 10:31:46 +0800
+
 ukui-biometric-auth (4.10.0.0-ok7) nile; urgency=medium
 
   * BUG号:无
diff -Nru ukui-biometric-auth-4.10.0.0/debian/control ukui-biometric-auth-4.20.0.0/debian/control
--- ukui-biometric-auth-4.10.0.0/debian/control	2024-04-23 10:31:46.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/debian/control	2024-11-15 17:01:40.000000000 +0800
@@ -16,6 +16,7 @@
                qttools5-dev,
                qttools5-dev-tools,
                libkysdk-sysinfo-dev,
+               libkysdk-qtwidgets-dev,
                libukui-log4qt-dev,
                libssl-dev,
                liblightdm-qt5-3-dev,
diff -Nru ukui-biometric-auth-4.10.0.0/debian/patches/0001-update-change.patch ukui-biometric-auth-4.20.0.0/debian/patches/0001-update-change.patch
--- ukui-biometric-auth-4.10.0.0/debian/patches/0001-update-change.patch	2024-04-23 10:31:46.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/debian/patches/0001-update-change.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,8309 +0,0 @@
-From: yangmin <winner_yangmin@163.com>
-Date: Thu, 16 Nov 2023 14:49:19 +0800
-Subject: update change
-
----
- bioauth-bin/i18n_ts/de.ts                          | 184 +++++++++
- bioauth-bin/i18n_ts/es.ts                          | 178 ++++++---
- bioauth-bin/i18n_ts/fr.ts                          | 178 ++++++---
- bioauth-bin/i18n_ts/kk.ts                          | 184 +++++++++
- bioauth-bin/i18n_ts/ky.ts                          | 184 +++++++++
- bioauth-bin/i18n_ts/mn.ts                          | 184 +++++++++
- bioauth-bin/i18n_ts/ug.ts                          | 184 +++++++++
- bioauth-bin/i18n_ts/zh_HK.ts                       | 184 +++++++++
- bioauth-bin/src/keywatcher.cpp                     |  10 +-
- bioauth-bin/src/main.cpp                           |  52 ++-
- bioauth/i18n_ts/mn.ts                              | 184 +++++++++
- bioauth/i18n_ts/zh_CN.ts                           |   4 +-
- bioauth/i18n_ts/zh_HK.ts                           | 184 +++++++++
- bioauth/include/bioauth.h                          |   1 +
- bioauth/include/biodevices.h                       |   3 +
- bioauth/include/biotypes.h                         |   3 +
- bioauth/include/loginoptionswidget.h               |   1 +
- bioauth/include/uniauthservice.h                   |   6 +-
- bioauth/src/bioauth.cpp                            |  13 +
- bioauth/src/biodevices.cpp                         |  71 +++-
- bioauth/src/loginoptionswidget.cpp                 |  19 +-
- bioauth/src/uniauthservice.cpp                     |  39 ++
- images/ukui-loginopt-finger.svg                    |   2 +-
- ...desktop.plicykit.pkexec.bioctl-helper.policy.in |   2 +
- ...freedesktop.plicykit.pkexec.biodrvctl.policy.in |   4 +-
- ...reedesktop.plicykit.pkexec.biorestart.policy.in |   4 +-
- pam-biometric/data/ukui-biometric.conf             |   1 +
- polkit-agent/CMakeLists.txt                        |   3 +-
- polkit-agent/i18n_ts/bo_CN.ts                      |  62 ++-
- polkit-agent/i18n_ts/de.ts                         | 421 ++++++++++++++++++++
- polkit-agent/i18n_ts/es.ts                         | 376 ++++++++++++++----
- polkit-agent/i18n_ts/fr.ts                         | 372 +++++++++++++----
- polkit-agent/i18n_ts/kk.ts                         | 421 ++++++++++++++++++++
- polkit-agent/i18n_ts/ky.ts                         | 421 ++++++++++++++++++++
- polkit-agent/i18n_ts/mn.ts                         | 441 +++++++++++++++++++++
- polkit-agent/i18n_ts/ug.ts                         | 421 ++++++++++++++++++++
- polkit-agent/i18n_ts/zh_HK.ts                      | 441 +++++++++++++++++++++
- polkit-agent/src/PolkitListener.cpp                |   1 +
- polkit-agent/src/mainwindow.cpp                    |  89 +++--
- polkit-agent/src/mainwindow.ui                     |  24 +-
- polkit-agent/src/modeButton.cpp                    |   2 +-
- uniauth-backend/CMakeLists.txt                     |  10 +-
- uniauth-backend/src/CSingleton.h                   |  46 +++
- uniauth-backend/src/biodeviceinfo.h                |   5 +
- uniauth-backend/src/main.cpp                       |   3 +
- uniauth-backend/src/personalizeddata.cpp           | 345 ++++++++++++++++
- uniauth-backend/src/personalizeddata.h             | 140 +++++++
- uniauth-backend/src/rsac.cpp                       | 199 ++++++++++
- uniauth-backend/src/rsac.h                         |  26 ++
- uniauth-backend/src/serviceinterface.cpp           | 331 +++++++++++++++-
- uniauth-backend/src/serviceinterface.h             |  62 ++-
- uniauth-backend/src/servicemanager.cpp             |   2 +
- uniauth-backend/src/servicemanager.h               |   1 +
- 53 files changed, 6309 insertions(+), 419 deletions(-)
- create mode 100644 bioauth-bin/i18n_ts/de.ts
- create mode 100644 bioauth-bin/i18n_ts/kk.ts
- create mode 100644 bioauth-bin/i18n_ts/ky.ts
- create mode 100644 bioauth-bin/i18n_ts/mn.ts
- create mode 100644 bioauth-bin/i18n_ts/ug.ts
- create mode 100644 bioauth-bin/i18n_ts/zh_HK.ts
- create mode 100644 bioauth/i18n_ts/mn.ts
- create mode 100644 bioauth/i18n_ts/zh_HK.ts
- create mode 100644 polkit-agent/i18n_ts/de.ts
- create mode 100644 polkit-agent/i18n_ts/kk.ts
- create mode 100644 polkit-agent/i18n_ts/ky.ts
- create mode 100644 polkit-agent/i18n_ts/mn.ts
- create mode 100644 polkit-agent/i18n_ts/ug.ts
- create mode 100644 polkit-agent/i18n_ts/zh_HK.ts
- create mode 100644 uniauth-backend/src/CSingleton.h
- create mode 100644 uniauth-backend/src/personalizeddata.cpp
- create mode 100644 uniauth-backend/src/personalizeddata.h
- create mode 100644 uniauth-backend/src/rsac.cpp
- create mode 100644 uniauth-backend/src/rsac.h
-
-diff --git a/bioauth-bin/i18n_ts/de.ts b/bioauth-bin/i18n_ts/de.ts
-new file mode 100644
-index 0000000..c3eb69c
---- /dev/null
-+++ b/bioauth-bin/i18n_ts/de.ts
-@@ -0,0 +1,184 @@
-+<?xml version="1.0" encoding="utf-8"?>
-+<!DOCTYPE TS>
-+<TS version="2.1" language="de">
-+<context>
-+    <name>BioAuthWidget</name>
-+    <message>
-+        <location filename="../src/bioauthwidget.ui" line="14"/>
-+        <source>Form</source>
-+        <translation></translation>
-+    </message>
-+    <message>
-+        <source>More</source>
-+        <translation type="vanished">更多</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.ui" line="146"/>
-+        <location filename="../src/bioauthwidget.cpp" line="41"/>
-+        <source>Retry</source>
-+        <translation>wiederholen</translation>
-+    </message>
-+    <message>
-+        <source>Too many unsuccessful attempts,please enter password.</source>
-+        <translation type="vanished">验证失败达最大次数,请使用密码解锁</translation>
-+    </message>
-+    <message>
-+        <source>Bioauth authentication failed, you still have %1 verification opportunities</source>
-+        <translation type="vanished">生物认证失败,您还有%1次尝试机会</translation>
-+    </message>
-+    <message>
-+        <source>Password</source>
-+        <translation>Passwort</translation>
-+    </message>
-+    <message>
-+        <source>Current Device: </source>
-+        <translation type="vanished">当前设备:</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="96"/>
-+        <location filename="../src/bioauthwidget.cpp" line="212"/>
-+        <source>%1 too many unsuccessful attempts,please enter password.</source>
-+        <translation>%1 Es gibt zu viele fehlgeschlagene Versuche, bitte geben Sie Ihr Passwort ein.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="102"/>
-+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
-+        <translation>%1 Authentifizierung fehlgeschlagen und es sind noch %2 verbleibende Chancen</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="226"/>
-+        <source>Please use wechat to scan the code</source>
-+        <translation>Bitte verwenden Sie WeChat, um den Code zu scannen</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>BioDevices</name>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="78"/>
-+        <source>Unplugging of %1 device detected</source>
-+        <translation>Das %1-Gerät wurde vom Stromnetz getrennt</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="88"/>
-+        <source>%1 device insertion detected</source>
-+        <translation>%1 angeschlossenes Gerät erkannt</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="97"/>
-+        <source>ukui-biometric-manager</source>
-+        <translation>Tools für die biometrische Verwaltung</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="100"/>
-+        <source>biometric</source>
-+        <translation>Biologische Eigenschaften</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="647"/>
-+        <source>FingerPrint</source>
-+        <translation>Fingerabdruck</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="649"/>
-+        <source>FingerVein</source>
-+        <translation>Fingervenen</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="651"/>
-+        <source>Iris</source>
-+        <translation>Iris</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="653"/>
-+        <source>Face</source>
-+        <translation>Gesichtserkennung</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="655"/>
-+        <source>VoicePrint</source>
-+        <translation>Stimmenausdruck</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="657"/>
-+        <source>ukey</source>
-+        <translation>Sicherheitsschlüssel</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="659"/>
-+        <source>QRCode</source>
-+        <translation>QR-Code</translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>BioDevicesWidget</name>
-+    <message>
-+        <location filename="../src/biodeviceswidget.ui" line="14"/>
-+        <source>Form</source>
-+        <translation></translation>
-+    </message>
-+    <message>
-+        <source>Device types:</source>
-+        <translation type="vanished">设备类型:</translation>
-+    </message>
-+    <message>
-+        <source>Back</source>
-+        <translation type="vanished">返回</translation>
-+    </message>
-+    <message>
-+        <source>OK</source>
-+        <translation type="vanished">确定</translation>
-+    </message>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="vanished">指纹</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>LoginOptionsWidget</name>
-+    <message>
-+        <location filename="../src/loginoptionswidget.cpp" line="61"/>
-+        <source>Login Options</source>
-+        <translation>Anmeldeoptionen</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/loginoptionswidget.cpp" line="294"/>
-+        <source>Password</source>
-+        <translation>Passwort</translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+    <message>
-+        <source>Biometric</source>
-+        <translation type="vanished">生物识别</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>QObject</name>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="vanished">指纹</translation>
-+    </message>
-+    <message>
-+        <source>FingerVein</source>
-+        <translation type="vanished">指静脉</translation>
-+    </message>
-+    <message>
-+        <source>Iris</source>
-+        <translation type="vanished">虹膜</translation>
-+    </message>
-+    <message>
-+        <source>Face</source>
-+        <translation type="vanished">人脸</translation>
-+    </message>
-+    <message>
-+        <source>VoicePrint</source>
-+        <translation type="vanished">声纹</translation>
-+    </message>
-+</context>
-+</TS>
-diff --git a/bioauth-bin/i18n_ts/es.ts b/bioauth-bin/i18n_ts/es.ts
-index 17f03ca..03ba179 100644
---- a/bioauth-bin/i18n_ts/es.ts
-+++ b/bioauth-bin/i18n_ts/es.ts
-@@ -2,113 +2,183 @@
- <!DOCTYPE TS>
- <TS version="2.1" language="es">
- <context>
--    <name>BioDevices</name>
-+    <name>BioAuthWidget</name>
-     <message>
--        <source>FingerPrint</source>
--        <translation type="vanished">Huella dactilar</translation>
-+        <location filename="../src/bioauthwidget.ui" line="14"/>
-+        <source>Form</source>
-+        <translation>Forma</translation>
-     </message>
-     <message>
--        <source>FingerVein</source>
--        <translation type="vanished">FingerVein</translation>
-+        <source>More</source>
-+        <translation type="vanished">更多</translation>
-     </message>
-     <message>
--        <source>Iris</source>
--        <translation type="vanished">Iris</translation>
-+        <location filename="../src/bioauthwidget.ui" line="146"/>
-+        <location filename="../src/bioauthwidget.cpp" line="41"/>
-+        <source>Retry</source>
-+        <translation>Reintentar</translation>
-     </message>
-     <message>
--        <source>Face</source>
--        <translation type="vanished">Cara</translation>
-+        <source>Too many unsuccessful attempts,please enter password.</source>
-+        <translation type="vanished">验证失败达最大次数,请使用密码解锁</translation>
-     </message>
-     <message>
--        <source>VoicePrint</source>
--        <translation type="vanished">Impresión de voz</translation>
-+        <source>Bioauth authentication failed, you still have %1 verification opportunities</source>
-+        <translation type="vanished">生物认证失败,您还有%1次尝试机会</translation>
-+    </message>
-+    <message>
-+        <source>Password</source>
-+        <translation>Contraseña</translation>
-+    </message>
-+    <message>
-+        <source>Current Device: </source>
-+        <translation type="vanished">当前设备:</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="96"/>
-+        <location filename="../src/bioauthwidget.cpp" line="212"/>
-+        <source>%1 too many unsuccessful attempts,please enter password.</source>
-+        <translation>%1 Demasiados intentos fallidos, ingrese la contraseña.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="102"/>
-+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
-+        <translation>%1 error de autenticación, todavía quedan %2 oportunidades</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="226"/>
-+        <source>Please use wechat to scan the code</source>
-+        <translation>Utilice wechat para escanear el código</translation>
-     </message>
- </context>
- <context>
--    <name>QObject</name>
-+    <name>BioDevices</name>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="78"/>
-+        <source>Unplugging of %1 device detected</source>
-+        <translation>Se ha detectado la desconexión del dispositivo %1</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="88"/>
-+        <source>%1 device insertion detected</source>
-+        <translation>%1 inserción de dispositivo detectada</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="97"/>
-+        <source>ukui-biometric-manager</source>
-+        <translation>ukui-gestor-biométrico</translation>
-+    </message>
-     <message>
--        <source>Try it again</source>
--        <translation>Pruébalo otra vez</translation>
-+        <location filename="../src/biodevices.cpp" line="100"/>
-+        <source>biometric</source>
-+        <translation>biométrico</translation>
-     </message>
-     <message>
--        <source>Use other Devices</source>
--        <translation>Usa otros dispositivos</translation>
-+        <location filename="../src/biodevices.cpp" line="647"/>
-+        <source>FingerPrint</source>
-+        <translation>Huellas</translation>
-     </message>
-     <message>
--        <source>Cancel</source>
--        <translation>Cancelar</translation>
-+        <location filename="../src/biodevices.cpp" line="649"/>
-+        <source>FingerVein</source>
-+        <translation>FingerVein</translation>
-     </message>
-     <message>
--        <source>Choose the option</source>
--        <translation>Elige la opción</translation>
-+        <location filename="../src/biodevices.cpp" line="651"/>
-+        <source>Iris</source>
-+        <translation>Iris</translation>
-     </message>
-     <message>
--        <source>Invaild response &quot;</source>
--        <translation>Respuesta interna</translation>
-+        <location filename="../src/biodevices.cpp" line="653"/>
-+        <source>Face</source>
-+        <translation>Cara</translation>
-     </message>
-     <message>
--        <source>AUTHENTICATION CANCELED</source>
--        <translation>AUTENTIFICACIÓN CANCELADA</translation>
-+        <location filename="../src/biodevices.cpp" line="655"/>
-+        <source>VoicePrint</source>
-+        <translation>Huella de voz</translation>
-     </message>
-     <message>
--        <source>=== BIOMETRIC DEVICES ===</source>
--        <translation>=== DISPOSITIVOS BIOMÉTRICOS ===</translation>
-+        <location filename="../src/biodevices.cpp" line="657"/>
-+        <source>ukey</source>
-+        <translation>ukey</translation>
-     </message>
-     <message>
--        <source>Choose the device</source>
--        <translation>Elige el dispositivo</translation>
-+        <location filename="../src/biodevices.cpp" line="659"/>
-+        <source>QRCode</source>
-+        <translation>QRCode</translation>
-     </message>
-     <message>
--        <source>Sevice Name</source>
--        <translation>Nombre del Servicio</translation>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-     </message>
-+</context>
-+<context>
-+    <name>BioDevicesWidget</name>
-     <message>
--        <source>DISPLAY env</source>
--        <translation>PANTALLA env</translation>
-+        <location filename="../src/biodeviceswidget.ui" line="14"/>
-+        <source>Form</source>
-+        <translation>Forma</translation>
-     </message>
-     <message>
--        <source>User</source>
--        <translation>Usuario</translation>
-+        <source>Device types:</source>
-+        <translation type="vanished">设备类型:</translation>
-     </message>
-     <message>
--        <source>Display debug information</source>
--        <translation>Mostrar información de depuración</translation>
-+        <source>Back</source>
-+        <translation type="vanished">返回</translation>
-     </message>
-     <message>
--        <source>Device short name</source>
--        <translation>Nombre corto del dispositivo</translation>
-+        <source>OK</source>
-+        <translation type="vanished">确定</translation>
-     </message>
-     <message>
--        <source>BIOMETRIC AUTHENTICATION</source>
--        <translation>AUTENTICACIÓN BIOMÉTRICA</translation>
-+        <source>FingerPrint</source>
-+        <translation type="vanished">指纹</translation>
-     </message>
-+</context>
-+<context>
-+    <name>LoginOptionsWidget</name>
-     <message>
--        <source>Press Q or Esc to cancel</source>
--        <translation>Presione Q o Esc para cancelar</translation>
-+        <location filename="../src/loginoptionswidget.cpp" line="61"/>
-+        <source>Login Options</source>
-+        <translation>Opciones de inicio de sesión</translation>
-     </message>
-     <message>
--        <source>AUTHENTICATION SUCCESS</source>
--        <translation>ÉXITO DE LA AUTENTICACIÓN</translation>
-+        <location filename="../src/loginoptionswidget.cpp" line="294"/>
-+        <source>Password</source>
-+        <translation>Contraseña</translation>
-     </message>
-     <message>
--        <source>AUTHENTICATION FAILED</source>
--        <translation>Falla la autenticacion</translation>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-     </message>
-     <message>
--        <source>BIOMETRIC AUTHENTICATION END</source>
--        <translation>FINALIZACIÓN BIOMÉTRICA FINAL</translation>
-+        <source>Biometric</source>
-+        <translation type="vanished">生物识别</translation>
-     </message>
-+</context>
-+<context>
-+    <name>QObject</name>
-     <message>
--        <source>authentication will be canceld</source>
--        <translation type="unfinished"></translation>
-+        <source>FingerPrint</source>
-+        <translation type="vanished">指纹</translation>
-     </message>
-     <message>
--        <source>Failed to verify %1, you still have %2 verification opportunities</source>
--        <translation type="unfinished"></translation>
-+        <source>FingerVein</source>
-+        <translation type="vanished">指静脉</translation>
-     </message>
-     <message>
--        <source>Unable to verify %1, please enter password.</source>
--        <translation type="unfinished"></translation>
-+        <source>Iris</source>
-+        <translation type="vanished">虹膜</translation>
-+    </message>
-+    <message>
-+        <source>Face</source>
-+        <translation type="vanished">人脸</translation>
-+    </message>
-+    <message>
-+        <source>VoicePrint</source>
-+        <translation type="vanished">声纹</translation>
-     </message>
- </context>
- </TS>
-diff --git a/bioauth-bin/i18n_ts/fr.ts b/bioauth-bin/i18n_ts/fr.ts
-index bb60fd2..8dbf86c 100644
---- a/bioauth-bin/i18n_ts/fr.ts
-+++ b/bioauth-bin/i18n_ts/fr.ts
-@@ -2,113 +2,183 @@
- <!DOCTYPE TS>
- <TS version="2.1" language="fr">
- <context>
--    <name>BioDevices</name>
-+    <name>BioAuthWidget</name>
-     <message>
--        <source>FingerPrint</source>
--        <translation type="vanished">Empreinte digitale</translation>
-+        <location filename="../src/bioauthwidget.ui" line="14"/>
-+        <source>Form</source>
-+        <translation>Forme</translation>
-     </message>
-     <message>
--        <source>FingerVein</source>
--        <translation type="vanished">FingerVein</translation>
-+        <source>More</source>
-+        <translation type="vanished">更多</translation>
-     </message>
-     <message>
--        <source>Iris</source>
--        <translation type="vanished">Iris</translation>
-+        <location filename="../src/bioauthwidget.ui" line="146"/>
-+        <location filename="../src/bioauthwidget.cpp" line="41"/>
-+        <source>Retry</source>
-+        <translation>réessayer</translation>
-     </message>
-     <message>
--        <source>Face</source>
--        <translation type="vanished">Visage</translation>
-+        <source>Too many unsuccessful attempts,please enter password.</source>
-+        <translation type="vanished">验证失败达最大次数,请使用密码解锁</translation>
-     </message>
-     <message>
--        <source>VoicePrint</source>
--        <translation type="vanished">VoicePrint</translation>
-+        <source>Bioauth authentication failed, you still have %1 verification opportunities</source>
-+        <translation type="vanished">生物认证失败,您还有%1次尝试机会</translation>
-+    </message>
-+    <message>
-+        <source>Password</source>
-+        <translation>mot de passe</translation>
-+    </message>
-+    <message>
-+        <source>Current Device: </source>
-+        <translation type="vanished">当前设备:</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="96"/>
-+        <location filename="../src/bioauthwidget.cpp" line="212"/>
-+        <source>%1 too many unsuccessful attempts,please enter password.</source>
-+        <translation>%1 Il y a trop de tentatives infructueuses, veuillez saisir votre mot de passe.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="102"/>
-+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
-+        <translation>%1 authentification a échoué et il reste encore %2 chances</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="226"/>
-+        <source>Please use wechat to scan the code</source>
-+        <translation>Veuillez utiliser WeChat pour scanner le code</translation>
-     </message>
- </context>
- <context>
--    <name>QObject</name>
-+    <name>BioDevices</name>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="78"/>
-+        <source>Unplugging of %1 device detected</source>
-+        <translation>L’appareil %1 a été débranché</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="88"/>
-+        <source>%1 device insertion detected</source>
-+        <translation>%1 périphérique branché détecté</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="97"/>
-+        <source>ukui-biometric-manager</source>
-+        <translation>Outils de gestion biométrique</translation>
-+    </message>
-     <message>
--        <source>Try it again</source>
--        <translation>Essayez à nouveau</translation>
-+        <location filename="../src/biodevices.cpp" line="100"/>
-+        <source>biometric</source>
-+        <translation>Caractéristiques biologiques</translation>
-     </message>
-     <message>
--        <source>Use other Devices</source>
--        <translation>Utiliser d&apos;autres appareils</translation>
-+        <location filename="../src/biodevices.cpp" line="647"/>
-+        <source>FingerPrint</source>
-+        <translation>empreinte digitale</translation>
-     </message>
-     <message>
--        <source>Cancel</source>
--        <translation>Annuler</translation>
-+        <location filename="../src/biodevices.cpp" line="649"/>
-+        <source>FingerVein</source>
-+        <translation>Veines des doigts</translation>
-     </message>
-     <message>
--        <source>Choose the option</source>
--        <translation>Choisissez l&apos;option</translation>
-+        <location filename="../src/biodevices.cpp" line="651"/>
-+        <source>Iris</source>
-+        <translation>iris</translation>
-     </message>
-     <message>
--        <source>Invaild response &quot;</source>
--        <translation>Réponse Invaild \ &quot;</translation>
-+        <location filename="../src/biodevices.cpp" line="653"/>
-+        <source>Face</source>
-+        <translation>Reconnaissance faciale</translation>
-     </message>
-     <message>
--        <source>AUTHENTICATION CANCELED</source>
--        <translation>AUTHENTIFICATION ANNULEE</translation>
-+        <location filename="../src/biodevices.cpp" line="655"/>
-+        <source>VoicePrint</source>
-+        <translation>Voiceprint</translation>
-     </message>
-     <message>
--        <source>=== BIOMETRIC DEVICES ===</source>
--        <translation>=== DISPOSITIFS BIOMETRIQUES ===</translation>
-+        <location filename="../src/biodevices.cpp" line="657"/>
-+        <source>ukey</source>
-+        <translation>Clés de sécurité</translation>
-     </message>
-     <message>
--        <source>Choose the device</source>
--        <translation>Choisissez l&apos;appareil</translation>
-+        <location filename="../src/biodevices.cpp" line="659"/>
-+        <source>QRCode</source>
-+        <translation>Code QR</translation>
-     </message>
-     <message>
--        <source>Sevice Name</source>
--        <translation>Nom de Sevice</translation>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-     </message>
-+</context>
-+<context>
-+    <name>BioDevicesWidget</name>
-     <message>
--        <source>DISPLAY env</source>
--        <translation>AFFICHER env</translation>
-+        <location filename="../src/biodeviceswidget.ui" line="14"/>
-+        <source>Form</source>
-+        <translation>Forme</translation>
-     </message>
-     <message>
--        <source>User</source>
--        <translation>Utilisateur</translation>
-+        <source>Device types:</source>
-+        <translation type="vanished">设备类型:</translation>
-     </message>
-     <message>
--        <source>Display debug information</source>
--        <translation>Afficher les informations de débogage</translation>
-+        <source>Back</source>
-+        <translation type="vanished">返回</translation>
-     </message>
-     <message>
--        <source>Device short name</source>
--        <translation>Nom abrégé de l&apos;appareil</translation>
-+        <source>OK</source>
-+        <translation type="vanished">确定</translation>
-     </message>
-     <message>
--        <source>BIOMETRIC AUTHENTICATION</source>
--        <translation>AUTHENTIFICATION BIOMETRIQUE</translation>
-+        <source>FingerPrint</source>
-+        <translation type="vanished">指纹</translation>
-     </message>
-+</context>
-+<context>
-+    <name>LoginOptionsWidget</name>
-     <message>
--        <source>Press Q or Esc to cancel</source>
--        <translation>Appuyez sur Q ou Echap pour annuler</translation>
-+        <location filename="../src/loginoptionswidget.cpp" line="61"/>
-+        <source>Login Options</source>
-+        <translation>Options de connexion</translation>
-     </message>
-     <message>
--        <source>AUTHENTICATION SUCCESS</source>
--        <translation>SUCCÈS D&apos;AUTHENTIFICATION</translation>
-+        <location filename="../src/loginoptionswidget.cpp" line="294"/>
-+        <source>Password</source>
-+        <translation>mot de passe</translation>
-     </message>
-     <message>
--        <source>AUTHENTICATION FAILED</source>
--        <translation>AUTHENTIFICATION ÉCHOUÉE</translation>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-     </message>
-     <message>
--        <source>BIOMETRIC AUTHENTICATION END</source>
--        <translation>FIN DE L&apos;AUTHENTIFICATION BIOMÉTRIQUE</translation>
-+        <source>Biometric</source>
-+        <translation type="vanished">生物识别</translation>
-     </message>
-+</context>
-+<context>
-+    <name>QObject</name>
-     <message>
--        <source>authentication will be canceld</source>
--        <translation type="unfinished"></translation>
-+        <source>FingerPrint</source>
-+        <translation type="vanished">指纹</translation>
-     </message>
-     <message>
--        <source>Failed to verify %1, you still have %2 verification opportunities</source>
--        <translation type="unfinished"></translation>
-+        <source>FingerVein</source>
-+        <translation type="vanished">指静脉</translation>
-     </message>
-     <message>
--        <source>Unable to verify %1, please enter password.</source>
--        <translation type="unfinished"></translation>
-+        <source>Iris</source>
-+        <translation type="vanished">虹膜</translation>
-+    </message>
-+    <message>
-+        <source>Face</source>
-+        <translation type="vanished">人脸</translation>
-+    </message>
-+    <message>
-+        <source>VoicePrint</source>
-+        <translation type="vanished">声纹</translation>
-     </message>
- </context>
- </TS>
-diff --git a/bioauth-bin/i18n_ts/kk.ts b/bioauth-bin/i18n_ts/kk.ts
-new file mode 100644
-index 0000000..ad57405
---- /dev/null
-+++ b/bioauth-bin/i18n_ts/kk.ts
-@@ -0,0 +1,184 @@
-+<?xml version="1.0" encoding="utf-8"?>
-+<!DOCTYPE TS>
-+<TS version="2.1" language="kk">
-+<context>
-+    <name>BioAuthWidget</name>
-+    <message>
-+        <location filename="../src/bioauthwidget.ui" line="14"/>
-+        <source>Form</source>
-+        <translation>Пішін</translation>
-+    </message>
-+    <message>
-+        <source>More</source>
-+        <translation type="vanished">更多</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.ui" line="146"/>
-+        <location filename="../src/bioauthwidget.cpp" line="41"/>
-+        <source>Retry</source>
-+        <translation>ретри</translation>
-+    </message>
-+    <message>
-+        <source>Too many unsuccessful attempts,please enter password.</source>
-+        <translation type="vanished">验证失败达最大次数,请使用密码解锁</translation>
-+    </message>
-+    <message>
-+        <source>Bioauth authentication failed, you still have %1 verification opportunities</source>
-+        <translation type="vanished">生物认证失败,您还有%1次尝试机会</translation>
-+    </message>
-+    <message>
-+        <source>Password</source>
-+        <translation>құпиясөз</translation>
-+    </message>
-+    <message>
-+        <source>Current Device: </source>
-+        <translation type="vanished">当前设备:</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="96"/>
-+        <location filename="../src/bioauthwidget.cpp" line="212"/>
-+        <source>%1 too many unsuccessful attempts,please enter password.</source>
-+        <translation>% 1 Қате әрекеттер тым көп, құпия сөзіңізді енгізіңіз.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="102"/>
-+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
-+        <translation>% 1 аутентификациясы жаңылысқан және әлі де% 2 мүмкіндігі бар</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="226"/>
-+        <source>Please use wechat to scan the code</source>
-+        <translation>Кодты сканерлеу үшін WeChat пайдалануыңызды сұраймын</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>BioDevices</name>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="78"/>
-+        <source>Unplugging of %1 device detected</source>
-+        <translation>% 1 құрылғы ажыратылды</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="88"/>
-+        <source>%1 device insertion detected</source>
-+        <translation>% 1 құрылғы анықталды</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="97"/>
-+        <source>ukui-biometric-manager</source>
-+        <translation>Биометриялық басқару құралдары</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="100"/>
-+        <source>biometric</source>
-+        <translation>Биологиялық сипаттамалары</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="647"/>
-+        <source>FingerPrint</source>
-+        <translation>саусақ ізі</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="649"/>
-+        <source>FingerVein</source>
-+        <translation>Саусақ көктамырлары</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="651"/>
-+        <source>Iris</source>
-+        <translation>ирис</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="653"/>
-+        <source>Face</source>
-+        <translation>Бет тану</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="655"/>
-+        <source>VoicePrint</source>
-+        <translation>Дауыстық із</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="657"/>
-+        <source>ukey</source>
-+        <translation>Қауіпсіздік кілттері</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="659"/>
-+        <source>QRCode</source>
-+        <translation>QR коды</translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>BioDevicesWidget</name>
-+    <message>
-+        <location filename="../src/biodeviceswidget.ui" line="14"/>
-+        <source>Form</source>
-+        <translation>Пішін</translation>
-+    </message>
-+    <message>
-+        <source>Device types:</source>
-+        <translation type="vanished">设备类型:</translation>
-+    </message>
-+    <message>
-+        <source>Back</source>
-+        <translation type="vanished">返回</translation>
-+    </message>
-+    <message>
-+        <source>OK</source>
-+        <translation type="vanished">确定</translation>
-+    </message>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="vanished">指纹</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>LoginOptionsWidget</name>
-+    <message>
-+        <location filename="../src/loginoptionswidget.cpp" line="61"/>
-+        <source>Login Options</source>
-+        <translation>Кіру параметрлері</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/loginoptionswidget.cpp" line="294"/>
-+        <source>Password</source>
-+        <translation>құпиясөз</translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+    <message>
-+        <source>Biometric</source>
-+        <translation type="vanished">生物识别</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>QObject</name>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="vanished">指纹</translation>
-+    </message>
-+    <message>
-+        <source>FingerVein</source>
-+        <translation type="vanished">指静脉</translation>
-+    </message>
-+    <message>
-+        <source>Iris</source>
-+        <translation type="vanished">虹膜</translation>
-+    </message>
-+    <message>
-+        <source>Face</source>
-+        <translation type="vanished">人脸</translation>
-+    </message>
-+    <message>
-+        <source>VoicePrint</source>
-+        <translation type="vanished">声纹</translation>
-+    </message>
-+</context>
-+</TS>
-diff --git a/bioauth-bin/i18n_ts/ky.ts b/bioauth-bin/i18n_ts/ky.ts
-new file mode 100644
-index 0000000..e9a3f13
---- /dev/null
-+++ b/bioauth-bin/i18n_ts/ky.ts
-@@ -0,0 +1,184 @@
-+<?xml version="1.0" encoding="utf-8"?>
-+<!DOCTYPE TS>
-+<TS version="2.1" language="ky">
-+<context>
-+    <name>BioAuthWidget</name>
-+    <message>
-+        <location filename="../src/bioauthwidget.ui" line="14"/>
-+        <source>Form</source>
-+        <translation></translation>
-+    </message>
-+    <message>
-+        <source>More</source>
-+        <translation type="vanished">更多</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.ui" line="146"/>
-+        <location filename="../src/bioauthwidget.cpp" line="41"/>
-+        <source>Retry</source>
-+        <translation>Ретри</translation>
-+    </message>
-+    <message>
-+        <source>Too many unsuccessful attempts,please enter password.</source>
-+        <translation type="vanished">验证失败达最大次数,请使用密码解锁</translation>
-+    </message>
-+    <message>
-+        <source>Bioauth authentication failed, you still have %1 verification opportunities</source>
-+        <translation type="vanished">生物认证失败,您还有%1次尝试机会</translation>
-+    </message>
-+    <message>
-+        <source>Password</source>
-+        <translation>Сырсөз</translation>
-+    </message>
-+    <message>
-+        <source>Current Device: </source>
-+        <translation type="vanished">当前设备:</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="96"/>
-+        <location filename="../src/bioauthwidget.cpp" line="212"/>
-+        <source>%1 too many unsuccessful attempts,please enter password.</source>
-+        <translation>%1 өтө көп ийгиликсиз аракеттер,, сураныч, сырсөз киргизүү.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="102"/>
-+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
-+        <translation>%1 аутентификациялык жетишсиздик,дагы эле %2 калган мүмкүнчүлүктөр бар</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="226"/>
-+        <source>Please use wechat to scan the code</source>
-+        <translation>Кодду сканерлеу үчүн вечат колдонуңуз</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>BioDevices</name>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="78"/>
-+        <source>Unplugging of %1 device detected</source>
-+        <translation>%1 орнотмосунун өчүрүлүшү аныкталды</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="88"/>
-+        <source>%1 device insertion detected</source>
-+        <translation>%1 түзмөк орнотмосу аныкталды</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="97"/>
-+        <source>ukui-biometric-manager</source>
-+        <translation>укуи-биометриялык-менеджери</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="100"/>
-+        <source>biometric</source>
-+        <translation>биометрия</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="647"/>
-+        <source>FingerPrint</source>
-+        <translation>Манжа изи</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="649"/>
-+        <source>FingerVein</source>
-+        <translation>Манжавейн</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="651"/>
-+        <source>Iris</source>
-+        <translation>Ирис</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="653"/>
-+        <source>Face</source>
-+        <translation>Бет</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="655"/>
-+        <source>VoicePrint</source>
-+        <translation>VoicePrint</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="657"/>
-+        <source>ukey</source>
-+        <translation>уики</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="659"/>
-+        <source>QRCode</source>
-+        <translation>QRCode</translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>BioDevicesWidget</name>
-+    <message>
-+        <location filename="../src/biodeviceswidget.ui" line="14"/>
-+        <source>Form</source>
-+        <translation></translation>
-+    </message>
-+    <message>
-+        <source>Device types:</source>
-+        <translation type="vanished">设备类型:</translation>
-+    </message>
-+    <message>
-+        <source>Back</source>
-+        <translation type="vanished">返回</translation>
-+    </message>
-+    <message>
-+        <source>OK</source>
-+        <translation type="vanished">确定</translation>
-+    </message>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="vanished">指纹</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>LoginOptionsWidget</name>
-+    <message>
-+        <location filename="../src/loginoptionswidget.cpp" line="61"/>
-+        <source>Login Options</source>
-+        <translation>Кирүү параметрлери</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/loginoptionswidget.cpp" line="294"/>
-+        <source>Password</source>
-+        <translation>Сырсөз</translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+    <message>
-+        <source>Biometric</source>
-+        <translation type="vanished">生物识别</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>QObject</name>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="vanished">指纹</translation>
-+    </message>
-+    <message>
-+        <source>FingerVein</source>
-+        <translation type="vanished">指静脉</translation>
-+    </message>
-+    <message>
-+        <source>Iris</source>
-+        <translation type="vanished">虹膜</translation>
-+    </message>
-+    <message>
-+        <source>Face</source>
-+        <translation type="vanished">人脸</translation>
-+    </message>
-+    <message>
-+        <source>VoicePrint</source>
-+        <translation type="vanished">声纹</translation>
-+    </message>
-+</context>
-+</TS>
-diff --git a/bioauth-bin/i18n_ts/mn.ts b/bioauth-bin/i18n_ts/mn.ts
-new file mode 100644
-index 0000000..b96b503
---- /dev/null
-+++ b/bioauth-bin/i18n_ts/mn.ts
-@@ -0,0 +1,184 @@
-+<?xml version="1.0" encoding="utf-8"?>
-+<!DOCTYPE TS>
-+<TS version="2.1" language="mn">
-+<context>
-+    <name>BioAuthWidget</name>
-+    <message>
-+        <location filename="../src/bioauthwidget.ui" line="14"/>
-+        <source>Form</source>
-+        <translation></translation>
-+    </message>
-+    <message>
-+        <source>More</source>
-+        <translation type="vanished">更多</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.ui" line="146"/>
-+        <location filename="../src/bioauthwidget.cpp" line="41"/>
-+        <source>Retry</source>
-+        <translation>ᠳᠠᠬᠢᠨ ᠲᠤᠷᠰᠢᠬᠤ</translation>
-+    </message>
-+    <message>
-+        <source>Too many unsuccessful attempts,please enter password.</source>
-+        <translation type="vanished">验证失败达最大次数,请使用密码解锁</translation>
-+    </message>
-+    <message>
-+        <source>Bioauth authentication failed, you still have %1 verification opportunities</source>
-+        <translation type="vanished">生物认证失败,您还有%1次尝试机会</translation>
-+    </message>
-+    <message>
-+        <source>Password</source>
-+        <translation>ᠨᠢᠭᠤᠴᠠ ᠺᠣᠳ᠋</translation>
-+    </message>
-+    <message>
-+        <source>Current Device: </source>
-+        <translation type="vanished">当前设备:</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="96"/>
-+        <location filename="../src/bioauthwidget.cpp" line="212"/>
-+        <source>%1 too many unsuccessful attempts,please enter password.</source>
-+        <translation>%1 ᠢᠯᠠᠭᠳᠠᠭᠰᠠᠨ ᠲᠤᠷᠰᠢᠬᠤ ᠤᠳᠠᠭ᠎ᠠ ᠲᠣᠭ᠎ᠠ ᠬᠡᠳᠦ ᠣᠯᠠᠨ ᠂ ᠨᠢᠭᠤᠴᠠ ᠺᠣᠳ᠋ ᠣᠷᠣᠭᠤᠯᠤᠭᠠᠷᠠᠢ ᠃</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="102"/>
-+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
-+        <translation>%1 ᠪᠡᠶ᠎ᠡ᠎ᠶ᠋ᠢᠨ ᠬᠢᠷᠢ᠎ᠶ᠋ᠢᠨ ᠰᠢᠯᠭᠠᠨ ᠪᠠᠲᠤᠯᠠᠯᠲᠠ ᠢᠯᠠᠭᠳᠠᠪᠠ ᠂ ᠮᠥᠨ %2 ᠦᠯᠡᠳᠡᠬᠦ ᠲᠣᠬᠢᠶᠠᠯ ᠪᠣᠢ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="226"/>
-+        <source>Please use wechat to scan the code</source>
-+        <translation>ᠸᠢᠴᠠᠲ᠎ᠢ᠋ᠶ᠋ᠠᠷ ᠦᠰᠦᠭ ᠰᠢᠷᠪᠢᠬᠦ ᠪᠣᠯᠪᠠᠤ</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>BioDevices</name>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="78"/>
-+        <source>Unplugging of %1 device detected</source>
-+        <translation>%1 ᠲᠥᠬᠥᠭᠡᠷᠦᠮᠵᠢ᠎ᠶ᠋ᠢ ᠰᠤᠭᠤᠯᠵᠤ ᠭᠠᠷᠭᠠᠨ ᠠ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="88"/>
-+        <source>%1 device insertion detected</source>
-+        <translation>%1 ᠲᠥᠬᠥᠭᠡᠷᠦᠮᠵᠢ ᠬᠠᠪᠴᠢᠭᠤᠯᠤᠭᠰᠠᠨ᠎ᠢ᠋ ᠪᠠᠢᠴᠠᠭᠠᠨ ᠣᠯᠪᠠ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="97"/>
-+        <source>ukui-biometric-manager</source>
-+        <translation>ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ᠎ᠤ᠋ᠨ ᠣᠨᠴᠠᠯᠢᠭ ᠬᠠᠮᠢᠶᠠᠷᠤᠯᠲᠠ᠎ᠶ᠋ᠢᠨ ᠪᠠᠭᠠᠵᠢ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="100"/>
-+        <source>biometric</source>
-+        <translation>ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ᠎ᠤ᠋ᠨ ᠣᠨᠴᠠᠯᠢᠭ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="647"/>
-+        <source>FingerPrint</source>
-+        <translation>ᠬᠤᠷᠤᠭᠤᠨ ᠬᠡ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="649"/>
-+        <source>FingerVein</source>
-+        <translation>ᠬᠤᠷᠤᠭᠤᠨ ᠨᠠᠮᠵᠢᠭᠤᠨ ᠰᠤᠳᠠᠰᠤ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="651"/>
-+        <source>Iris</source>
-+        <translation>ᠰᠣᠯᠣᠩᠭ᠎ᠠ ᠪᠦᠷᠬᠦᠭᠦᠯ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="653"/>
-+        <source>Face</source>
-+        <translation>ᠬᠥᠮᠦᠨ᠎ᠦ᠌ ᠨᠢᠭᠤᠷ ᠲᠠᠨᠢᠬᠤ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="655"/>
-+        <source>VoicePrint</source>
-+        <translation>ᠳᠠᠭᠤᠨ ᠡᠷᠢᠶᠡᠨ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="657"/>
-+        <source>ukey</source>
-+        <translation>ᠠᠶᠤᠯᠭᠦᠢ ᠨᠢᠭᠤᠴᠠ ᠲᠦᠯᠬᠢᠭᠦᠷ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="659"/>
-+        <source>QRCode</source>
-+        <translation>ᠬᠣᠶᠠᠷ ᠬᠡᠮᠵᠢᠯᠲᠦ ᠺᠣᠳ᠋</translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>BioDevicesWidget</name>
-+    <message>
-+        <location filename="../src/biodeviceswidget.ui" line="14"/>
-+        <source>Form</source>
-+        <translation></translation>
-+    </message>
-+    <message>
-+        <source>Device types:</source>
-+        <translation type="vanished">设备类型:</translation>
-+    </message>
-+    <message>
-+        <source>Back</source>
-+        <translation type="vanished">返回</translation>
-+    </message>
-+    <message>
-+        <source>OK</source>
-+        <translation type="vanished">确定</translation>
-+    </message>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="vanished">指纹</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>LoginOptionsWidget</name>
-+    <message>
-+        <location filename="../src/loginoptionswidget.cpp" line="61"/>
-+        <source>Login Options</source>
-+        <translation>ᠲᠡᠮᠳᠡᠭᠯᠡᠬᠦ ᠰᠤᠩᠭᠤᠭᠳᠠᠬᠤᠨ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/loginoptionswidget.cpp" line="294"/>
-+        <source>Password</source>
-+        <translation>ᠨᠢᠭᠤᠴᠠ ᠺᠣᠳ᠋</translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+    <message>
-+        <source>Biometric</source>
-+        <translation type="vanished">生物识别</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>QObject</name>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="vanished">指纹</translation>
-+    </message>
-+    <message>
-+        <source>FingerVein</source>
-+        <translation type="vanished">指静脉</translation>
-+    </message>
-+    <message>
-+        <source>Iris</source>
-+        <translation type="vanished">虹膜</translation>
-+    </message>
-+    <message>
-+        <source>Face</source>
-+        <translation type="vanished">人脸</translation>
-+    </message>
-+    <message>
-+        <source>VoicePrint</source>
-+        <translation type="vanished">声纹</translation>
-+    </message>
-+</context>
-+</TS>
-diff --git a/bioauth-bin/i18n_ts/ug.ts b/bioauth-bin/i18n_ts/ug.ts
-new file mode 100644
-index 0000000..99e8e3f
---- /dev/null
-+++ b/bioauth-bin/i18n_ts/ug.ts
-@@ -0,0 +1,184 @@
-+<?xml version="1.0" encoding="utf-8"?>
-+<!DOCTYPE TS>
-+<TS version="2.1" language="ug">
-+<context>
-+    <name>BioAuthWidget</name>
-+    <message>
-+        <location filename="../src/bioauthwidget.ui" line="14"/>
-+        <source>Form</source>
-+        <translation></translation>
-+    </message>
-+    <message>
-+        <source>More</source>
-+        <translation type="vanished">更多</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.ui" line="146"/>
-+        <location filename="../src/bioauthwidget.cpp" line="41"/>
-+        <source>Retry</source>
-+        <translation>قايتا سىناپ بىقىڭ</translation>
-+    </message>
-+    <message>
-+        <source>Too many unsuccessful attempts,please enter password.</source>
-+        <translation type="vanished">验证失败达最大次数,请使用密码解锁</translation>
-+    </message>
-+    <message>
-+        <source>Bioauth authentication failed, you still have %1 verification opportunities</source>
-+        <translation type="vanished">生物认证失败,您还有%1次尝试机会</translation>
-+    </message>
-+    <message>
-+        <source>Password</source>
-+        <translation>مەخپىي نومۇر</translation>
-+    </message>
-+    <message>
-+        <source>Current Device: </source>
-+        <translation type="vanished">当前设备:</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="96"/>
-+        <location filename="../src/bioauthwidget.cpp" line="212"/>
-+        <source>%1 too many unsuccessful attempts,please enter password.</source>
-+        <translation>1-نومۇر مەغلۇپ بولغان سىناق قېتىم سانى زىيادە كۆپ، مەخپىي نومۇرنى كىرگۈزۈڭ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="102"/>
-+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
-+        <translation>بىر كىملىك دەلىللەش مەغلۇپ بولدى، يەنىلا ٪2 ئېشىپ قالغان پۇرسەت بار</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="226"/>
-+        <source>Please use wechat to scan the code</source>
-+        <translation>ئۈندىداردا كود سۈپۈرۈڭ</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>BioDevices</name>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="78"/>
-+        <source>Unplugging of %1 device detected</source>
-+        <translation>تەكشۈرۈپ بايقىغان 1 ئۈسكۈنىنى تارتىپ چىقارماق</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="88"/>
-+        <source>%1 device insertion detected</source>
-+        <translation>٪1 ئۈسكۈنىنىڭ كىرگۈزۈلگەنلىكىنى تەكشۈرۈپ چىقماق</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="97"/>
-+        <source>ukui-biometric-manager</source>
-+        <translation>بىئولوگىيەلىك ئالاھىدىلىك باشقۇرۇش قورالى</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="100"/>
-+        <source>biometric</source>
-+        <translation>بىئولوگىيەلىك ئالاھىدىلىك</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="647"/>
-+        <source>FingerPrint</source>
-+        <translation>بارماق ئىزى</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="649"/>
-+        <source>FingerVein</source>
-+        <translation>ۋېنانى كۆرسىتىدۇ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="651"/>
-+        <source>Iris</source>
-+        <translation>رەڭدار پەردە</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="653"/>
-+        <source>Face</source>
-+        <translation>ئادەم يۈزىنى پەرقلەندۈرۈش</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="655"/>
-+        <source>VoicePrint</source>
-+        <translation>ئاۋاز سىزىقى</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="657"/>
-+        <source>ukey</source>
-+        <translation>بىخەتەر ئاچقۇچ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="659"/>
-+        <source>QRCode</source>
-+        <translation>ئىككى ئۆلچەملىك كود</translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>BioDevicesWidget</name>
-+    <message>
-+        <location filename="../src/biodeviceswidget.ui" line="14"/>
-+        <source>Form</source>
-+        <translation></translation>
-+    </message>
-+    <message>
-+        <source>Device types:</source>
-+        <translation type="vanished">设备类型:</translation>
-+    </message>
-+    <message>
-+        <source>Back</source>
-+        <translation type="vanished">返回</translation>
-+    </message>
-+    <message>
-+        <source>OK</source>
-+        <translation type="vanished">确定</translation>
-+    </message>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="vanished">指纹</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>LoginOptionsWidget</name>
-+    <message>
-+        <location filename="../src/loginoptionswidget.cpp" line="61"/>
-+        <source>Login Options</source>
-+        <translation>تاللاش تۈرىگە كىرمەك</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/loginoptionswidget.cpp" line="294"/>
-+        <source>Password</source>
-+        <translation>مەخپىي نومۇر</translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+    <message>
-+        <source>Biometric</source>
-+        <translation type="vanished">生物识别</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>QObject</name>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="vanished">指纹</translation>
-+    </message>
-+    <message>
-+        <source>FingerVein</source>
-+        <translation type="vanished">指静脉</translation>
-+    </message>
-+    <message>
-+        <source>Iris</source>
-+        <translation type="vanished">虹膜</translation>
-+    </message>
-+    <message>
-+        <source>Face</source>
-+        <translation type="vanished">人脸</translation>
-+    </message>
-+    <message>
-+        <source>VoicePrint</source>
-+        <translation type="vanished">声纹</translation>
-+    </message>
-+</context>
-+</TS>
-diff --git a/bioauth-bin/i18n_ts/zh_HK.ts b/bioauth-bin/i18n_ts/zh_HK.ts
-new file mode 100644
-index 0000000..d71eed9
---- /dev/null
-+++ b/bioauth-bin/i18n_ts/zh_HK.ts
-@@ -0,0 +1,184 @@
-+<?xml version="1.0" encoding="utf-8"?>
-+<!DOCTYPE TS>
-+<TS version="2.1" language="zh_Hant">
-+<context>
-+    <name>BioAuthWidget</name>
-+    <message>
-+        <location filename="../src/bioauthwidget.ui" line="14"/>
-+        <source>Form</source>
-+        <translation></translation>
-+    </message>
-+    <message>
-+        <source>More</source>
-+        <translation type="vanished">更多</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.ui" line="146"/>
-+        <location filename="../src/bioauthwidget.cpp" line="41"/>
-+        <source>Retry</source>
-+        <translation>重試</translation>
-+    </message>
-+    <message>
-+        <source>Too many unsuccessful attempts,please enter password.</source>
-+        <translation type="vanished">验证失败达最大次数,请使用密码解锁</translation>
-+    </message>
-+    <message>
-+        <source>Bioauth authentication failed, you still have %1 verification opportunities</source>
-+        <translation type="vanished">生物认证失败,您还有%1次尝试机会</translation>
-+    </message>
-+    <message>
-+        <source>Password</source>
-+        <translation>密碼</translation>
-+    </message>
-+    <message>
-+        <source>Current Device: </source>
-+        <translation type="vanished">当前设备:</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="96"/>
-+        <location filename="../src/bioauthwidget.cpp" line="212"/>
-+        <source>%1 too many unsuccessful attempts,please enter password.</source>
-+        <translation>%1失敗的嘗試次數太多,請輸入密碼</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="102"/>
-+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
-+        <translation>%1 身份驗證失敗,仍有 %2 個剩餘機會</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="226"/>
-+        <source>Please use wechat to scan the code</source>
-+        <translation>請使用微信掃碼</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>BioDevices</name>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="78"/>
-+        <source>Unplugging of %1 device detected</source>
-+        <translation>檢測到 %1 設備的拔出</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="88"/>
-+        <source>%1 device insertion detected</source>
-+        <translation>檢測到 %1 個設備插入</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="97"/>
-+        <source>ukui-biometric-manager</source>
-+        <translation>生物特徵管理工具</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="100"/>
-+        <source>biometric</source>
-+        <translation>生物特徵管理工具</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="647"/>
-+        <source>FingerPrint</source>
-+        <translation>指紋</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="649"/>
-+        <source>FingerVein</source>
-+        <translation>指靜脈</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="651"/>
-+        <source>Iris</source>
-+        <translation>虹膜</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="653"/>
-+        <source>Face</source>
-+        <translation>人臉</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="655"/>
-+        <source>VoicePrint</source>
-+        <translation>聲紋</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="657"/>
-+        <source>ukey</source>
-+        <translation>安全金鑰</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="659"/>
-+        <source>QRCode</source>
-+        <translation>微信掃碼</translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>BioDevicesWidget</name>
-+    <message>
-+        <location filename="../src/biodeviceswidget.ui" line="14"/>
-+        <source>Form</source>
-+        <translation></translation>
-+    </message>
-+    <message>
-+        <source>Device types:</source>
-+        <translation type="vanished">设备类型:</translation>
-+    </message>
-+    <message>
-+        <source>Back</source>
-+        <translation type="vanished">返回</translation>
-+    </message>
-+    <message>
-+        <source>OK</source>
-+        <translation type="vanished">确定</translation>
-+    </message>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="vanished">指纹</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>LoginOptionsWidget</name>
-+    <message>
-+        <location filename="../src/loginoptionswidget.cpp" line="61"/>
-+        <source>Login Options</source>
-+        <translation>登錄選項</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/loginoptionswidget.cpp" line="294"/>
-+        <source>Password</source>
-+        <translation>密碼</translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+    <message>
-+        <source>Biometric</source>
-+        <translation type="vanished">生物识别</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>QObject</name>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="vanished">指纹</translation>
-+    </message>
-+    <message>
-+        <source>FingerVein</source>
-+        <translation type="vanished">指静脉</translation>
-+    </message>
-+    <message>
-+        <source>Iris</source>
-+        <translation type="vanished">虹膜</translation>
-+    </message>
-+    <message>
-+        <source>Face</source>
-+        <translation type="vanished">人脸</translation>
-+    </message>
-+    <message>
-+        <source>VoicePrint</source>
-+        <translation type="vanished">声纹</translation>
-+    </message>
-+</context>
-+</TS>
-diff --git a/bioauth-bin/src/keywatcher.cpp b/bioauth-bin/src/keywatcher.cpp
-index 706f250..aaa4398 100644
---- a/bioauth-bin/src/keywatcher.cpp
-+++ b/bioauth-bin/src/keywatcher.cpp
-@@ -35,6 +35,7 @@ void KeyWatcher::run()
-     current.c_cc[VMIN] = 1;
-     current.c_cc[VTIME] = 0;
-     tcsetattr(0, TCSANOW, &current);
-+    bool isInputEnd = false;
- 
-     while(!isInterruptionRequested()){
- 
-@@ -52,11 +53,18 @@ void KeyWatcher::run()
-             break;
-         default:
-             // 'q' | 'Q' or Esc
--            if((ch = getchar()) == 'q' || ch == 'Q' || ch == 27){
-+            if((ch = getchar()) == 'q' || ch == 'Q' || ch == 27 || ch == EOF){
-                 tcsetattr(0, TCSANOW, &save);
-                 emit exit();
-+                if (ch == EOF) {
-+                    isInputEnd = true;
-+                    break;
-+                }
-             }
-         }
-+        if (isInputEnd) {
-+            break;
-+        }
-     }
- 
-     tcsetattr(0, TCSANOW, &save);   // 恢复原来的终端属性,以免干扰shall和之后的程序运行
-diff --git a/bioauth-bin/src/main.cpp b/bioauth-bin/src/main.cpp
-index ed29e03..ae13ec6 100644
---- a/bioauth-bin/src/main.cpp
-+++ b/bioauth-bin/src/main.cpp
-@@ -93,6 +93,22 @@ void showMessage(const QString &message, int type)
-     fprintf(stdout, RESET_COLOR);
- }
- 
-+static bool isQuickInput() {
-+    fd_set readfds;
-+    FD_ZERO(&readfds);
-+    FD_SET(0, &readfds);    // stdin
-+    struct timeval timeout = {0, 10*1000};
-+    switch (select(32, &readfds, NULL, NULL, &timeout)) {
-+    case 0: // time out
-+        break;
-+    case -1: // error
-+        break;
-+    default:
-+        return true;
-+    }
-+    return false;
-+}
-+
- QString inputPinCode()
- {
-     struct termios current;
-@@ -241,7 +257,7 @@ int main(int argc, char *argv[])
-     a.installTranslator(&translator_bin);
- 
-     QCommandLineParser parser;
--    QCommandLineOption serviceOption({"s", "service"}, QObject::tr("Sevice Name"));
-+    QCommandLineOption serviceOption({"s", "service"}, QObject::tr("Sevice Name"), "service", "");
-     QCommandLineOption displayOption({"x", "display"}, QObject::tr("DISPLAY env"), "display", ":0");
-     QCommandLineOption usernameOption({"u", "user"}, QObject::tr("User"), "user", "");
-     QCommandLineOption debugOption({"d", "debug"}, QObject::tr("Display debug information"));
-@@ -258,6 +274,11 @@ int main(int argc, char *argv[])
-     logPrefix = "[pam-diaglog]:";
-     qInstallMessageHandler(outputMessage);
- 
-+    QString serverName = parser.value(serviceOption);
-+    if (serverName == "sudo" && isQuickInput()) {
-+        exit(BIO_ERROR);
-+    }
-+
-     QString userName = parser.value(usernameOption);
-     if(userName.isEmpty())
-         exit(BIO_ERROR);
-@@ -298,12 +319,13 @@ int main(int argc, char *argv[])
-     });
-     QObject::connect(&bioAuth, &BioAuth::authComplete, &a, [&](uid_t uid_, int result, int retErrNo){
-         Q_UNUSED(retErrNo);
-+
-         watcher.stop();
-         bool isBioEnable = bioDevices.GetBioAuthEnable(uid_);
--	bool isUkeyDevice = false;
--	if(deviceInfo && deviceInfo->biotype == 6){
--	    isUkeyDevice = true;
--	}
-+        bool isUkeyDevice = false;
-+        if(deviceInfo && deviceInfo->biotype == 6){
-+            isUkeyDevice = true;
-+        }
-         if(!isBioEnable && !isUkeyDevice){
-             showMessage(QObject::tr("BIOMETRIC AUTHENTICATION IS CLOSED"), RESULT);
-             exit(BIO_IGNORE);
-@@ -328,11 +350,11 @@ int main(int argc, char *argv[])
-                 showMessage(QObject::tr("Unable to verify %1, please enter password.").arg(bioDevices.bioTypeToString_tr(curDeviceInfo->biotype)),RESULT);
-                 exit(BIO_IGNORE);
-             }
--            Option option = showOption(bioDevices.count() > 1);
-+            Option option = showOption(bioDevices.getAllDevices().count() > 1);
-             switch(option) {
-             case OPTION_TRY_AGAIN:
-                 
--		if(deviceInfo->biotype == 6){
-+                if(deviceInfo->biotype == 6){
-                     QString code = inputPinCode();
-                     bioAuth.SetExtraInfo("pincode",code);
-                 }
-@@ -346,7 +368,7 @@ int main(int argc, char *argv[])
-                 *deviceInfo = showDevices(bioDevices.getAllDevices());
-                 bioAuth.setDevice(deviceInfo);
- 
--		if(deviceInfo->biotype == 6){
-+                if(deviceInfo->biotype == 6){
-                     QString code = inputPinCode();
-                     bioAuth.SetExtraInfo("pincode",code);
-                 }
-@@ -360,12 +382,12 @@ int main(int argc, char *argv[])
-                 {
-                     exit(BIO_ERROR);
-                 }else{
--		    if(deviceInfo->biotype == 6){
--			showMessage(QObject::tr("AUTHENTICATION END"), START);
-+                    if(deviceInfo->biotype == 6){
-+                        showMessage(QObject::tr("AUTHENTICATION END"), START);
-                     }else{
--			showMessage(QObject::tr("BIOMETRIC AUTHENTICATION END"), START);
--		    }
--		    exit(BIO_IGNORE);
-+                        showMessage(QObject::tr("BIOMETRIC AUTHENTICATION END"), START);
-+                    }
-+                    exit(BIO_IGNORE);
-                     break;
-                 }
-             default:
-@@ -375,8 +397,8 @@ int main(int argc, char *argv[])
-     });
- 
-     if(deviceInfo->biotype == 6){
--	QString code = inputPinCode();
--	bioAuth.SetExtraInfo("pincode",code);
-+        QString code = inputPinCode();
-+        bioAuth.SetExtraInfo("pincode",code);
-     }
- 
-     bioAuth.startAuth();
-diff --git a/bioauth/i18n_ts/mn.ts b/bioauth/i18n_ts/mn.ts
-new file mode 100644
-index 0000000..b96b503
---- /dev/null
-+++ b/bioauth/i18n_ts/mn.ts
-@@ -0,0 +1,184 @@
-+<?xml version="1.0" encoding="utf-8"?>
-+<!DOCTYPE TS>
-+<TS version="2.1" language="mn">
-+<context>
-+    <name>BioAuthWidget</name>
-+    <message>
-+        <location filename="../src/bioauthwidget.ui" line="14"/>
-+        <source>Form</source>
-+        <translation></translation>
-+    </message>
-+    <message>
-+        <source>More</source>
-+        <translation type="vanished">更多</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.ui" line="146"/>
-+        <location filename="../src/bioauthwidget.cpp" line="41"/>
-+        <source>Retry</source>
-+        <translation>ᠳᠠᠬᠢᠨ ᠲᠤᠷᠰᠢᠬᠤ</translation>
-+    </message>
-+    <message>
-+        <source>Too many unsuccessful attempts,please enter password.</source>
-+        <translation type="vanished">验证失败达最大次数,请使用密码解锁</translation>
-+    </message>
-+    <message>
-+        <source>Bioauth authentication failed, you still have %1 verification opportunities</source>
-+        <translation type="vanished">生物认证失败,您还有%1次尝试机会</translation>
-+    </message>
-+    <message>
-+        <source>Password</source>
-+        <translation>ᠨᠢᠭᠤᠴᠠ ᠺᠣᠳ᠋</translation>
-+    </message>
-+    <message>
-+        <source>Current Device: </source>
-+        <translation type="vanished">当前设备:</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="96"/>
-+        <location filename="../src/bioauthwidget.cpp" line="212"/>
-+        <source>%1 too many unsuccessful attempts,please enter password.</source>
-+        <translation>%1 ᠢᠯᠠᠭᠳᠠᠭᠰᠠᠨ ᠲᠤᠷᠰᠢᠬᠤ ᠤᠳᠠᠭ᠎ᠠ ᠲᠣᠭ᠎ᠠ ᠬᠡᠳᠦ ᠣᠯᠠᠨ ᠂ ᠨᠢᠭᠤᠴᠠ ᠺᠣᠳ᠋ ᠣᠷᠣᠭᠤᠯᠤᠭᠠᠷᠠᠢ ᠃</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="102"/>
-+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
-+        <translation>%1 ᠪᠡᠶ᠎ᠡ᠎ᠶ᠋ᠢᠨ ᠬᠢᠷᠢ᠎ᠶ᠋ᠢᠨ ᠰᠢᠯᠭᠠᠨ ᠪᠠᠲᠤᠯᠠᠯᠲᠠ ᠢᠯᠠᠭᠳᠠᠪᠠ ᠂ ᠮᠥᠨ %2 ᠦᠯᠡᠳᠡᠬᠦ ᠲᠣᠬᠢᠶᠠᠯ ᠪᠣᠢ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="226"/>
-+        <source>Please use wechat to scan the code</source>
-+        <translation>ᠸᠢᠴᠠᠲ᠎ᠢ᠋ᠶ᠋ᠠᠷ ᠦᠰᠦᠭ ᠰᠢᠷᠪᠢᠬᠦ ᠪᠣᠯᠪᠠᠤ</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>BioDevices</name>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="78"/>
-+        <source>Unplugging of %1 device detected</source>
-+        <translation>%1 ᠲᠥᠬᠥᠭᠡᠷᠦᠮᠵᠢ᠎ᠶ᠋ᠢ ᠰᠤᠭᠤᠯᠵᠤ ᠭᠠᠷᠭᠠᠨ ᠠ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="88"/>
-+        <source>%1 device insertion detected</source>
-+        <translation>%1 ᠲᠥᠬᠥᠭᠡᠷᠦᠮᠵᠢ ᠬᠠᠪᠴᠢᠭᠤᠯᠤᠭᠰᠠᠨ᠎ᠢ᠋ ᠪᠠᠢᠴᠠᠭᠠᠨ ᠣᠯᠪᠠ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="97"/>
-+        <source>ukui-biometric-manager</source>
-+        <translation>ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ᠎ᠤ᠋ᠨ ᠣᠨᠴᠠᠯᠢᠭ ᠬᠠᠮᠢᠶᠠᠷᠤᠯᠲᠠ᠎ᠶ᠋ᠢᠨ ᠪᠠᠭᠠᠵᠢ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="100"/>
-+        <source>biometric</source>
-+        <translation>ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ᠎ᠤ᠋ᠨ ᠣᠨᠴᠠᠯᠢᠭ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="647"/>
-+        <source>FingerPrint</source>
-+        <translation>ᠬᠤᠷᠤᠭᠤᠨ ᠬᠡ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="649"/>
-+        <source>FingerVein</source>
-+        <translation>ᠬᠤᠷᠤᠭᠤᠨ ᠨᠠᠮᠵᠢᠭᠤᠨ ᠰᠤᠳᠠᠰᠤ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="651"/>
-+        <source>Iris</source>
-+        <translation>ᠰᠣᠯᠣᠩᠭ᠎ᠠ ᠪᠦᠷᠬᠦᠭᠦᠯ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="653"/>
-+        <source>Face</source>
-+        <translation>ᠬᠥᠮᠦᠨ᠎ᠦ᠌ ᠨᠢᠭᠤᠷ ᠲᠠᠨᠢᠬᠤ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="655"/>
-+        <source>VoicePrint</source>
-+        <translation>ᠳᠠᠭᠤᠨ ᠡᠷᠢᠶᠡᠨ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="657"/>
-+        <source>ukey</source>
-+        <translation>ᠠᠶᠤᠯᠭᠦᠢ ᠨᠢᠭᠤᠴᠠ ᠲᠦᠯᠬᠢᠭᠦᠷ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="659"/>
-+        <source>QRCode</source>
-+        <translation>ᠬᠣᠶᠠᠷ ᠬᠡᠮᠵᠢᠯᠲᠦ ᠺᠣᠳ᠋</translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>BioDevicesWidget</name>
-+    <message>
-+        <location filename="../src/biodeviceswidget.ui" line="14"/>
-+        <source>Form</source>
-+        <translation></translation>
-+    </message>
-+    <message>
-+        <source>Device types:</source>
-+        <translation type="vanished">设备类型:</translation>
-+    </message>
-+    <message>
-+        <source>Back</source>
-+        <translation type="vanished">返回</translation>
-+    </message>
-+    <message>
-+        <source>OK</source>
-+        <translation type="vanished">确定</translation>
-+    </message>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="vanished">指纹</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>LoginOptionsWidget</name>
-+    <message>
-+        <location filename="../src/loginoptionswidget.cpp" line="61"/>
-+        <source>Login Options</source>
-+        <translation>ᠲᠡᠮᠳᠡᠭᠯᠡᠬᠦ ᠰᠤᠩᠭᠤᠭᠳᠠᠬᠤᠨ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/loginoptionswidget.cpp" line="294"/>
-+        <source>Password</source>
-+        <translation>ᠨᠢᠭᠤᠴᠠ ᠺᠣᠳ᠋</translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+    <message>
-+        <source>Biometric</source>
-+        <translation type="vanished">生物识别</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>QObject</name>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="vanished">指纹</translation>
-+    </message>
-+    <message>
-+        <source>FingerVein</source>
-+        <translation type="vanished">指静脉</translation>
-+    </message>
-+    <message>
-+        <source>Iris</source>
-+        <translation type="vanished">虹膜</translation>
-+    </message>
-+    <message>
-+        <source>Face</source>
-+        <translation type="vanished">人脸</translation>
-+    </message>
-+    <message>
-+        <source>VoicePrint</source>
-+        <translation type="vanished">声纹</translation>
-+    </message>
-+</context>
-+</TS>
-diff --git a/bioauth/i18n_ts/zh_CN.ts b/bioauth/i18n_ts/zh_CN.ts
-index d009954..c2c6329 100644
---- a/bioauth/i18n_ts/zh_CN.ts
-+++ b/bioauth/i18n_ts/zh_CN.ts
-@@ -100,8 +100,8 @@
-     </message>
-     <message>
-         <location filename="../src/biodevices.cpp" line="657"/>
--        <source>ukey</source>
--        <translation type="unfinished"></translation>
-+        <source>Ukey</source>
-+        <translation>安全密钥</translation>
-     </message>
-     <message>
-         <location filename="../src/biodevices.cpp" line="659"/>
-diff --git a/bioauth/i18n_ts/zh_HK.ts b/bioauth/i18n_ts/zh_HK.ts
-new file mode 100644
-index 0000000..d71eed9
---- /dev/null
-+++ b/bioauth/i18n_ts/zh_HK.ts
-@@ -0,0 +1,184 @@
-+<?xml version="1.0" encoding="utf-8"?>
-+<!DOCTYPE TS>
-+<TS version="2.1" language="zh_Hant">
-+<context>
-+    <name>BioAuthWidget</name>
-+    <message>
-+        <location filename="../src/bioauthwidget.ui" line="14"/>
-+        <source>Form</source>
-+        <translation></translation>
-+    </message>
-+    <message>
-+        <source>More</source>
-+        <translation type="vanished">更多</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.ui" line="146"/>
-+        <location filename="../src/bioauthwidget.cpp" line="41"/>
-+        <source>Retry</source>
-+        <translation>重試</translation>
-+    </message>
-+    <message>
-+        <source>Too many unsuccessful attempts,please enter password.</source>
-+        <translation type="vanished">验证失败达最大次数,请使用密码解锁</translation>
-+    </message>
-+    <message>
-+        <source>Bioauth authentication failed, you still have %1 verification opportunities</source>
-+        <translation type="vanished">生物认证失败,您还有%1次尝试机会</translation>
-+    </message>
-+    <message>
-+        <source>Password</source>
-+        <translation>密碼</translation>
-+    </message>
-+    <message>
-+        <source>Current Device: </source>
-+        <translation type="vanished">当前设备:</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="96"/>
-+        <location filename="../src/bioauthwidget.cpp" line="212"/>
-+        <source>%1 too many unsuccessful attempts,please enter password.</source>
-+        <translation>%1失敗的嘗試次數太多,請輸入密碼</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="102"/>
-+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
-+        <translation>%1 身份驗證失敗,仍有 %2 個剩餘機會</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="226"/>
-+        <source>Please use wechat to scan the code</source>
-+        <translation>請使用微信掃碼</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>BioDevices</name>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="78"/>
-+        <source>Unplugging of %1 device detected</source>
-+        <translation>檢測到 %1 設備的拔出</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="88"/>
-+        <source>%1 device insertion detected</source>
-+        <translation>檢測到 %1 個設備插入</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="97"/>
-+        <source>ukui-biometric-manager</source>
-+        <translation>生物特徵管理工具</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="100"/>
-+        <source>biometric</source>
-+        <translation>生物特徵管理工具</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="647"/>
-+        <source>FingerPrint</source>
-+        <translation>指紋</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="649"/>
-+        <source>FingerVein</source>
-+        <translation>指靜脈</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="651"/>
-+        <source>Iris</source>
-+        <translation>虹膜</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="653"/>
-+        <source>Face</source>
-+        <translation>人臉</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="655"/>
-+        <source>VoicePrint</source>
-+        <translation>聲紋</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="657"/>
-+        <source>ukey</source>
-+        <translation>安全金鑰</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="659"/>
-+        <source>QRCode</source>
-+        <translation>微信掃碼</translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>BioDevicesWidget</name>
-+    <message>
-+        <location filename="../src/biodeviceswidget.ui" line="14"/>
-+        <source>Form</source>
-+        <translation></translation>
-+    </message>
-+    <message>
-+        <source>Device types:</source>
-+        <translation type="vanished">设备类型:</translation>
-+    </message>
-+    <message>
-+        <source>Back</source>
-+        <translation type="vanished">返回</translation>
-+    </message>
-+    <message>
-+        <source>OK</source>
-+        <translation type="vanished">确定</translation>
-+    </message>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="vanished">指纹</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>LoginOptionsWidget</name>
-+    <message>
-+        <location filename="../src/loginoptionswidget.cpp" line="61"/>
-+        <source>Login Options</source>
-+        <translation>登錄選項</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/loginoptionswidget.cpp" line="294"/>
-+        <source>Password</source>
-+        <translation>密碼</translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+    <message>
-+        <source>Biometric</source>
-+        <translation type="vanished">生物识别</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>QObject</name>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="vanished">指纹</translation>
-+    </message>
-+    <message>
-+        <source>FingerVein</source>
-+        <translation type="vanished">指静脉</translation>
-+    </message>
-+    <message>
-+        <source>Iris</source>
-+        <translation type="vanished">虹膜</translation>
-+    </message>
-+    <message>
-+        <source>Face</source>
-+        <translation type="vanished">人脸</translation>
-+    </message>
-+    <message>
-+        <source>VoicePrint</source>
-+        <translation type="vanished">声纹</translation>
-+    </message>
-+</context>
-+</TS>
-diff --git a/bioauth/include/bioauth.h b/bioauth/include/bioauth.h
-index ee9d55b..56588f7 100644
---- a/bioauth/include/bioauth.h
-+++ b/bioauth/include/bioauth.h
-@@ -62,6 +62,7 @@ public:
- 
- signals:
-     void authComplete(int uid, bool result, int retErrNo);
-+    void authFinished();
-     void notify(const QString &message);
-     void notifyDetail(int deviceId, const QString &message);
-     void frameWritten(int deviceId);
-diff --git a/bioauth/include/biodevices.h b/bioauth/include/biodevices.h
-index 2308138..630f25f 100644
---- a/bioauth/include/biodevices.h
-+++ b/bioauth/include/biodevices.h
-@@ -57,6 +57,7 @@ public:
-     void setIsShowHotPlug(bool isShow);
-     int GetUserDevFeatureCount(int uid,int drvid);
-     int GetUserDevCount(int uid);
-+    FeatureMap GetUserFeatures(int uid);
-     bool getUseFirstDevice();
-     int getFailedTimes();
-     bool GetHiddenSwitchButton();
-@@ -71,6 +72,8 @@ public:
-      */
-     StatusReslut UpdateStatus(int drvid);
-     bool GetBioAuthEnable(uid_t uid);
-+    bool GetDirveIsIdle(int drvid);
-+    void recordAuthDrive(QString appName,int drvid,bool insert);
- 
- private:
-     void connectToService();
-diff --git a/bioauth/include/biotypes.h b/bioauth/include/biotypes.h
-index 07a940f..b286edb 100644
---- a/bioauth/include/biotypes.h
-+++ b/bioauth/include/biotypes.h
-@@ -225,6 +225,9 @@ Q_DECLARE_METATYPE(DeviceInfo)
- typedef std::shared_ptr<DeviceInfo> DeviceInfoPtr;
- typedef QList<DeviceInfoPtr> DeviceList;
- typedef QMap<int, DeviceList> DeviceMap;
-+typedef std::shared_ptr<FeatureInfo> FeatureInfoPtr;
-+typedef QList<FeatureInfoPtr> FeatureList;
-+typedef QMap<QString, FeatureList> FeatureMap;
- 
- QDBusArgument &operator<<(QDBusArgument &argument, const DeviceInfo &deviceInfo);
- const QDBusArgument &operator>>(const QDBusArgument &argument, DeviceInfo &deviceInfo);
-diff --git a/bioauth/include/loginoptionswidget.h b/bioauth/include/loginoptionswidget.h
-index 31c69e2..7ef3db9 100644
---- a/bioauth/include/loginoptionswidget.h
-+++ b/bioauth/include/loginoptionswidget.h
-@@ -100,6 +100,7 @@ public:
- public slots:
-     void readDevicesInfo();
-     void onIdentifyComplete(int uid, bool ret, int retErrNo);
-+    void onAuthFinished();
-     void onStatusChanged(int drvid, const QString &message);
-     void onFrameWritten(int drvid);
-     void onUSBDeviceCountChange(int newNum);
-diff --git a/bioauth/include/uniauthservice.h b/bioauth/include/uniauthservice.h
-index 9bbe5b4..3ed8707 100644
---- a/bioauth/include/uniauthservice.h
-+++ b/bioauth/include/uniauthservice.h
-@@ -61,9 +61,13 @@ public Q_SLOTS:
-     bool getUseFirstDevice();
-     // 获取是否隐藏切换按钮
-     bool getHiddenSwitchButton();
--
-+    // 获取正在认证的应用
-+    QStringList getAuthingApp();
-+    // 获取应用认证的驱动
-+    int getAuthingAppDrivd(QString appName);
- public:
-     bool isActivatable();
-+    void recordAuthDrive(QString appName,int drvid,bool insert);
- 
- Q_SIGNALS:
-     //默认设备改变
-diff --git a/bioauth/src/bioauth.cpp b/bioauth/src/bioauth.cpp
-index df66f19..bf725dc 100644
---- a/bioauth/src/bioauth.cpp
-+++ b/bioauth/src/bioauth.cpp
-@@ -17,6 +17,7 @@
- **/
- #include "bioauth.h"
- #include <QList>
-+#include <unistd.h>
- 
- BioAuth::BioAuth(qint32 uid, const DeviceInfoPtr deviceInfo, QObject *parent)
-     : QObject(parent),
-@@ -110,6 +111,11 @@ void BioAuth::startAuth()
-         QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this);
-         connect(watcher, &QDBusPendingCallWatcher::finished, this, &BioAuth::onIdentityComplete);
-     }else{
-+        //使用sudo等命令时,不停止设备,当存在其他可认证设备时,使用其他可认证设备,否则使用密码
-+        if(qAppName() != "bioauth"){
-+            //stopops在identify之前使用时,不要调用getFeaturelist,否则会出现identify被停止的现象,应该时框架的bug。
-+            serviceInterface->call("StopOps", QVariant(deviceInfo->device_id), QVariant(3000));
-+        }
-         QDBusPendingCall call = serviceInterface->asyncCallWithArgumentList("Identify", args);
-         QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this);
-         connect(watcher, &QDBusPendingCallWatcher::finished, this, &BioAuth::onIdentityComplete);
-@@ -175,6 +181,7 @@ void BioAuth::stopAuth()
- 
-     QDBusReply<int> reply = serviceInterface->call("StopOps", QVariant(deviceInfo->device_id), QVariant(3000));
- 
-+    emit authFinished();
-     if(!reply.isValid())
-         qWarning() << "StopOps error: " << reply.error();
- 
-@@ -188,6 +195,7 @@ bool BioAuth::isAuthenticating()
- 
- void BioAuth::onIdentityComplete(QDBusPendingCallWatcher *watcher)
- {
-+    emit authFinished();
-     QDBusPendingReply<qint32, qint32> reply = *watcher;
-     if(reply.isError()){
-         isInAuthentication = false;
-@@ -227,6 +235,11 @@ void BioAuth::onStatusChanged(int deviceId, int statusType)
-         LOG() << msg.errorMessage();
-         return;
-     }
-+
-+    if(deviceInfo && deviceInfo->device_id != deviceId){
-+        return ;
-+    }
-+
-     QString message = msg.arguments().at(0).toString();
-     LOG() << message;
-     Q_EMIT notify(message);
-diff --git a/bioauth/src/biodevices.cpp b/bioauth/src/biodevices.cpp
-index 556ed1c..2f6a366 100644
---- a/bioauth/src/biodevices.cpp
-+++ b/bioauth/src/biodevices.cpp
-@@ -94,7 +94,7 @@ void BioDevices::onUSBDeviceHotPlug(int deviceId, int action, int devNumNow)
-                              "org.freedesktop.Notifications",
-                              QDBusConnection::sessionBus());
-         QList<QVariant> args;
--        args<<(tr("ukui-biometric-manager"))
-+        args<<(tr("Biometric Manager"))
-            <<((unsigned int) 0)
-           <<"biometric-manager"
-          <<tr("biometric")
-@@ -200,10 +200,32 @@ int BioDevices::GetUserDevCount(int uid)
- 
- }
- 
-+FeatureMap BioDevices::GetUserFeatures(int uid)
-+{
-+    FeatureMap featureMap;
-+    QList<QDBusVariant> qlist;
-+    int listsize;
-+    QDBusMessage result = serviceInterface->call(QStringLiteral("GetAllFeatureList"), uid, 0, -1);
-+    if(result.type() == QDBusMessage::ErrorMessage)
-+    {
-+        qWarning() << "GetDevList error:" << result.errorMessage();
-+        return featureMap;
-+    }
-+
-+    QList<QVariant> variantList = result.arguments();
-+    listsize = variantList[0].value<int>();
-+    variantList[1].value<QDBusArgument>() >> qlist;
-+    for (int i = 0; i < listsize; i++) {
-+        FeatureInfoPtr pFeatureInfo = std::make_shared<FeatureInfo>();
-+        qlist[i].variant().value<QDBusArgument>() >> *pFeatureInfo;
-+        featureMap[pFeatureInfo->device_shortname].append(pFeatureInfo);
-+    }
-+
-+    return featureMap;
-+}
-+
- int BioDevices::GetUserDevFeatureCount(int uid,int drvid)
- {
--    // stop last option
--    serviceInterface->call("StopOps", QVariant(drvid), QVariant(3000));
-     QDBusMessage FeatureResult = serviceInterface->call(QStringLiteral("GetFeatureList"),drvid,uid,0,-1);
-     if(FeatureResult.type() == QDBusMessage::ErrorMessage)
-     {
-@@ -218,7 +240,6 @@ int BioDevices::getFeatureCount(int uid, int indexStart, int indexEnd)
-     int res = 0;
-     for(int i = 0; i < deviceInfos.count(); i++) {
-         DeviceInfoPtr deviceInfo = deviceInfos.at(i);
--        QDBusReply<int> reply = serviceInterface->call("StopOps", QVariant(deviceInfo->device_id), QVariant(3000));
-         QDBusMessage featurecount = serviceInterface->call("GetFeatureList",deviceInfo->device_id,uid,indexStart,indexEnd);
-         if(featurecount.type() == QDBusMessage::ErrorMessage)
-         {
-@@ -237,6 +258,10 @@ QMap<int, QList<DeviceInfo>> BioDevices::getAllDevices()
-     for(auto deviceInfo : deviceInfos) {
-         if (deviceInfo->biotype == REMOTE_QRCODE_TYPE)  // 终端不使用扫码
-             continue;
-+
-+        if(!GetDirveIsIdle(deviceInfo->device_id))
-+            continue;
-+
-         devices[deviceInfo->biotype].push_back(*deviceInfo);
-     }
- 
-@@ -406,6 +431,7 @@ DeviceInfoPtr BioDevices::getDefaultDevice(uid_t uid,int bioType)
-     if(deviceInfos.size() <= 0)
-         return nullptr;
- 
-+    FeatureMap mapFeatures = GetUserFeatures(uid);
-     if (m_uniAuthService && m_uniAuthService->isActivatable()) {
-         QString defaultDeviceName = "";
-         struct passwd *pwdInfo = getpwuid(uid);
-@@ -416,7 +442,8 @@ DeviceInfoPtr BioDevices::getDefaultDevice(uid_t uid,int bioType)
-             if(!strDeviceName.isEmpty()) {
-                 ptrDevInfo = findDevice(strDeviceName);
-                 if (ptrDevInfo) {
--                    if (GetUserDevFeatureCount(uid,ptrDevInfo->device_id) > 0) {
-+                    int isIdle = GetDirveIsIdle(ptrDevInfo->device_id);
-+                    if(isIdle && mapFeatures.contains(ptrDevInfo->device_shortname)){
-                         defaultDeviceName = strDeviceName;
-                     }
-                 }
-@@ -454,9 +481,11 @@ DeviceInfoPtr BioDevices::getDefaultDevice(uid_t uid,int bioType)
-         bool defValid = false;
-         DeviceInfoPtr ptrDevInfo = findDevice(defaultDeviceName);
-         if (ptrDevInfo) {
--            if (GetUserDevFeatureCount(uid,ptrDevInfo->device_id) > 0) {
-+            int isIdle = GetDirveIsIdle(ptrDevInfo->device_id);
-+            if(isIdle && mapFeatures.contains(ptrDevInfo->device_shortname)){
-                 defValid = true;
-             }
-+
-         }
- 
-         if (!defValid) {
-@@ -467,11 +496,34 @@ DeviceInfoPtr BioDevices::getDefaultDevice(uid_t uid,int bioType)
-     }
- }
- 
-+void BioDevices::recordAuthDrive(QString appName, int drvid, bool insert)
-+{
-+    if(m_uniAuthService && m_uniAuthService->isActivatable()){
-+        m_uniAuthService->recordAuthDrive(appName,drvid,insert);
-+    }
-+}
-+
-+bool BioDevices::GetDirveIsIdle(int drvid)
-+{
-+    if(m_uniAuthService && m_uniAuthService->isActivatable()){
-+        QStringList appList = m_uniAuthService->getAuthingApp();
-+        for(QString appName : appList){
-+            int id = m_uniAuthService->getAuthingAppDrivd(appName);
-+            if(id == drvid){
-+                return false;
-+            }
-+        }
-+    }
-+
-+    return true;
-+}
-+
- DeviceInfoPtr BioDevices::getDefaultDevice(uid_t uid)
- {
-     if(deviceInfos.size() <= 0)
-         return nullptr;
- 
-+    FeatureMap mapFeatures = GetUserFeatures(uid);
-     if (m_uniAuthService && m_uniAuthService->isActivatable()) {
-         QString defaultDeviceName = "";
-         struct passwd *pwdInfo = getpwuid(uid);
-@@ -483,7 +535,8 @@ DeviceInfoPtr BioDevices::getDefaultDevice(uid_t uid)
-                 if(!strDeviceName.isEmpty()) {
-                     ptrDevInfo = findDevice(strDeviceName);
-                     if (ptrDevInfo) {
--                        if (GetUserDevFeatureCount(uid,ptrDevInfo->device_id) > 0) {
-+                        int isIdle = GetDirveIsIdle(ptrDevInfo->device_id);
-+                        if(isIdle && mapFeatures.contains(ptrDevInfo->device_shortname)){
-                             defaultDeviceName = strDeviceName;
-                             break;
-                         }
-@@ -525,7 +578,7 @@ DeviceInfoPtr BioDevices::getDefaultDevice(uid_t uid)
-         bool defValid = false;
-         DeviceInfoPtr ptrDevInfo = findDevice(defaultDeviceName);
-         if (ptrDevInfo) {
--            if (GetUserDevFeatureCount(uid,ptrDevInfo->device_id) > 0) {
-+            if (mapFeatures.contains(ptrDevInfo->device_shortname)) {
-                 defValid = true;
-             }
-         }
-@@ -654,7 +707,7 @@ QString BioDevices::bioTypeToString_tr(int type)
-     case BIOTYPE_VOICEPRINT:
-         return tr("VoicePrint");
-     case LOGINOPT_TYPE_GENERAL_UKEY:
--        return tr("ukey");
-+        return tr("Ukey");
-     case REMOTE_QRCODE_TYPE:
-         return tr("QRCode");
-     }
-diff --git a/bioauth/src/loginoptionswidget.cpp b/bioauth/src/loginoptionswidget.cpp
-index 955270c..b089b33 100644
---- a/bioauth/src/loginoptionswidget.cpp
-+++ b/bioauth/src/loginoptionswidget.cpp
-@@ -48,6 +48,7 @@ LoginOptionsWidget::LoginOptionsWidget(QWidget *parent)
-     , m_bioDevices(new BioDevices())
-     , w_timer(nullptr)
- {
-+    m_bioDevices->recordAuthDrive("polkit",0,false);
-     initUI();
-     initConnections();
-     m_mapDisableDev.clear();
-@@ -161,6 +162,9 @@ void LoginOptionsWidget::initConnections()
- 
-         connect(m_biomericProxy, &BioAuth::authComplete,
-                 this, &LoginOptionsWidget::onIdentifyComplete);
-+
-+        connect(m_biomericProxy, &BioAuth::authFinished,
-+                this, &LoginOptionsWidget::onAuthFinished);
-     }
-     if (m_bioDevices) {
-         connect(m_bioDevices, &BioDevices::deviceCountChanged,
-@@ -399,6 +403,9 @@ void LoginOptionsWidget::readDevicesInfo()
-     bool isQRCodeEnable = m_bioDevices->GetQRCodeEnable();
-     DeviceList deviceList = m_bioDevices->GetDevList();
-     QStringList listDefDevices = m_bioDevices->getAllDefDevices();
-+    FeatureMap mapFeatures = m_bioDevices->GetUserFeatures(m_uid);
-+        qDebug() << m_uid <<",count:"<<mapFeatures.size();
-+
-     for(auto pDeviceInfo : deviceList)
-     {
-         int nDevFeatureCount = 0;
-@@ -407,8 +414,8 @@ void LoginOptionsWidget::readDevicesInfo()
-         } else {
-             if (m_uid == -1) {
-                 nDevFeatureCount = 0;
--            } else {
--                nDevFeatureCount = m_bioDevices->GetUserDevFeatureCount(m_uid, pDeviceInfo->device_id);
-+            } else if(mapFeatures.contains(pDeviceInfo->device_shortname)){
-+                nDevFeatureCount = mapFeatures[pDeviceInfo->device_shortname].size();
-             }
-         }
-         qDebug() << *pDeviceInfo << ",FeatureCount:"<<nDevFeatureCount;
-@@ -496,6 +503,7 @@ void LoginOptionsWidget::startAuth_()
-         m_labelFaceLoad->show();
-     }
-     w_timer->start();
-+    m_bioDevices->recordAuthDrive("polkit",m_curDevInfo->device_id,true);
-     m_biomericProxy->startAuth(m_uid, m_curDevInfo);
- }
- 
-@@ -530,6 +538,13 @@ void LoginOptionsWidget::updatePixmap()
-     }
- }
- 
-+void LoginOptionsWidget::onAuthFinished()
-+{
-+    if(m_bioDevices){
-+        m_bioDevices->recordAuthDrive("polkit",0,false);
-+    }
-+}
-+
- void LoginOptionsWidget::onIdentifyComplete(int uid, bool ret, int retErrNo)
- {
-     if(m_isStopped == true)
-diff --git a/bioauth/src/uniauthservice.cpp b/bioauth/src/uniauthservice.cpp
-index 4f327af..8032cea 100644
---- a/bioauth/src/uniauthservice.cpp
-+++ b/bioauth/src/uniauthservice.cpp
-@@ -245,6 +245,45 @@ bool UniAuthService::getHiddenSwitchButton()
-     }
- }
- 
-+// 获取正在认证的应用
-+QStringList UniAuthService::getAuthingApp()
-+{
-+    QDBusMessage result = call(QStringLiteral("getAllAuthApp"));
-+    if(result.type() == QDBusMessage::ErrorMessage)
-+    {
-+        qWarning() << "getAuthingApp error:" << result.errorMessage();
-+        return QStringList();
-+    }
-+    QList<QVariant> varResult = result.arguments();
-+    if (varResult.size() > 0) {
-+        return varResult.takeFirst().toStringList();
-+    } else {
-+        return QStringList();
-+    }
-+}
-+
-+// 获取应用认证的驱动
-+int UniAuthService::getAuthingAppDrivd(QString appName)
-+{
-+    QDBusMessage result = call(QStringLiteral("getAppAuthDrive"),appName);
-+    if(result.type() == QDBusMessage::ErrorMessage)
-+    {
-+        qWarning() << "getAuthingAppDrivd error:" << result.errorMessage();
-+        return -1;
-+    }
-+    QList<QVariant> varResult = result.arguments();
-+    if (varResult.size() > 0) {
-+        return varResult.takeFirst().toInt();
-+    } else {
-+        return -1;
-+    }
-+}
-+
-+void UniAuthService::recordAuthDrive(QString appName,int drvid,bool insert)
-+{
-+    call(QStringLiteral("recordAuthDrive"),appName,drvid,insert);
-+}
-+
- bool UniAuthService::isActivatable()
- {
-     return m_isActivatable;
-diff --git a/images/ukui-loginopt-finger.svg b/images/ukui-loginopt-finger.svg
-index ed0d828..c3d3762 100644
---- a/images/ukui-loginopt-finger.svg
-+++ b/images/ukui-loginopt-finger.svg
-@@ -1 +1 @@
--<svg id="图层_1" data-name="图层 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 16 16"><defs><clipPath id="clip-path"><circle cx="8" cy="8" r="8" fill="none"/></clipPath></defs><g clip-path="url(#clip-path)"><path d="M8.2,4.33H8A2.3,2.3,0,0,0,5.73,5.91a3.59,3.59,0,0,0-.09,1.5,14.1,14.1,0,0,1-1.3,8.89.45.45,0,0,0,.18.61.54.54,0,0,0,.21.05.46.46,0,0,0,.4-.24,15,15,0,0,0,1.4-9.43,2.83,2.83,0,0,1,.06-1.11c.13-.4.41-.87,1.49-.95H8.2a1.26,1.26,0,0,1,1.24.85A11.83,11.83,0,0,1,10,8.35,8.18,8.18,0,0,1,10,9.58v.57a.85.85,0,0,1,0,.16.44.44,0,0,0,.38.5h.06a.45.45,0,0,0,.45-.39,1.51,1.51,0,0,0,0-.3V9.58a10.42,10.42,0,0,0-.07-1.36,13.39,13.39,0,0,0-.56-2.43A2.16,2.16,0,0,0,8.2,4.33Z" fill="#1a1a1a"/><path d="M8.05,1a6.57,6.57,0,0,0-1.23.12,5.81,5.81,0,0,0-4.6,6.76c.08.52.14,1,.21,1.57l.09.74a.44.44,0,0,0,.45.39H3a.44.44,0,0,0,.38-.5l-.09-.74c-.06-.53-.13-1.06-.21-1.6A4.91,4.91,0,0,1,7,2,5.33,5.33,0,0,1,8,1.9a5.33,5.33,0,0,1,3.8,1.69.43.43,0,0,0,.31.13.42.42,0,0,0,.32-.13.45.45,0,0,0,0-.64A6.15,6.15,0,0,0,8.05,1Z" fill="#1a1a1a"/><path d="M5.54,4.88h0M5.3,3.93a.49.49,0,0,0-.2,0,1.64,1.64,0,0,0-.58.56,4.38,4.38,0,0,0-.6,3.38,13.61,13.61,0,0,1-.11,5,9.55,9.55,0,0,1-1,2.68A.45.45,0,0,0,3,16.2a.42.42,0,0,0,.22.05A.45.45,0,0,0,3.64,16,10.4,10.4,0,0,0,4.69,13.1a14.69,14.69,0,0,0,.12-5.31,3.4,3.4,0,0,1,.44-2.72,1,1,0,0,1,.25-.28.46.46,0,0,0,.2-.61.45.45,0,0,0-.4-.25Z" fill="#1a1a1a"/><path d="M8.15,2.72a5.46,5.46,0,0,0-1.51.22.45.45,0,0,0-.31.56.43.43,0,0,0,.43.32h.12a4.42,4.42,0,0,1,1.25-.19,3.07,3.07,0,0,1,3,2.23,13.82,13.82,0,0,1,.57,4.41,19.75,19.75,0,0,1-.91,5.93,3.74,3.74,0,0,1-.18.48.44.44,0,0,0,.21.6.43.43,0,0,0,.19,0,.45.45,0,0,0,.41-.25c.09-.19.16-.39.23-.58a20.8,20.8,0,0,0,.95-6.22A14.66,14.66,0,0,0,12,5.56,3.93,3.93,0,0,0,8.15,2.72Z" fill="#1a1a1a"/><path d="M3,13.15H3m-.5-.69a.45.45,0,0,0-.4.25,2.37,2.37,0,0,0-.18.53,3,3,0,0,1-.1.32c-.07.16-.15.32-.23.49a6.25,6.25,0,0,0-.31.69.45.45,0,0,0,.26.58.44.44,0,0,0,.16,0,.45.45,0,0,0,.42-.29,4.57,4.57,0,0,1,.28-.6c.09-.18.18-.36.25-.54a2.44,2.44,0,0,0,.14-.44,1.89,1.89,0,0,1,.12-.36.46.46,0,0,0-.21-.61.45.45,0,0,0-.2,0Z" fill="#1a1a1a"/><path d="M13.25,4.89h-.1a.46.46,0,0,0-.34.54,22.64,22.64,0,0,1,.58,5.38,18,18,0,0,1-.66,4.74l0,.14v0a.45.45,0,0,0,.05.57.46.46,0,0,0,.33.13.47.47,0,0,0,.31-.12.81.81,0,0,0,.21-.46.15.15,0,0,1,0-.07,18.82,18.82,0,0,0,.69-5,23.9,23.9,0,0,0-.6-5.59.45.45,0,0,0-.44-.34Z" fill="#1a1a1a"/><path d="M10.35,11.43a.44.44,0,0,0-.45.39,17.13,17.13,0,0,1-1.28,5.06.45.45,0,0,0,.22.6.43.43,0,0,0,.19,0,.45.45,0,0,0,.41-.26,18.25,18.25,0,0,0,1.35-5.33.45.45,0,0,0-.39-.5Z" fill="#1a1a1a"/><path d="M8,15.61H8m-.49-.69a.46.46,0,0,0-.41.26l-.64,1.37a.45.45,0,0,0,.21.6.46.46,0,0,0,.19,0,.44.44,0,0,0,.41-.26l.64-1.37A.44.44,0,0,0,7.71,15a.49.49,0,0,0-.19-.05Z" fill="#1a1a1a"/><path d="M8.06,6.56H8a.46.46,0,0,0-.37.52,17.57,17.57,0,0,1-.07,6.52.45.45,0,0,0,.35.53H8a.44.44,0,0,0,.44-.35A18.12,18.12,0,0,0,8.5,6.93a.43.43,0,0,0-.44-.37Z" fill="#1a1a1a"/></g></svg>
-\ No newline at end of file
-+<svg id="图层_1" data-name="图层 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><defs><style>.cls-1{fill:#262626;}</style></defs><path class="cls-1" d="M2.79,13.45a2.53,2.53,0,0,1,.12-.36.46.46,0,0,0-.21-.61H2.5v0a.46.46,0,0,0-.4.25,2.19,2.19,0,0,0-.17.49,6.9,6.9,0,0,0,.71.72v0A2.25,2.25,0,0,0,2.79,13.45Z"/><path class="cls-1" d="M10.4,11.39l-.05,0a.44.44,0,0,0-.45.39A16.89,16.89,0,0,1,9,15.93a6.54,6.54,0,0,0,1-.19,18.07,18.07,0,0,0,.81-3.85A.44.44,0,0,0,10.4,11.39Z"/><path class="cls-1" d="M7.71,15A.41.41,0,0,0,7.52,15v0a.46.46,0,0,0-.41.26l-.33.72c.3,0,.61.07.92.08l.22-.46A.43.43,0,0,0,7.71,15Z"/><path class="cls-1" d="M6.53,7.29a3,3,0,0,1,.06-1.11c.13-.4.41-.87,1.49-.95H8.2a1.25,1.25,0,0,1,1.24.85A12,12,0,0,1,10,8.35a8.42,8.42,0,0,1,0,1.23v.57a.43.43,0,0,1,0,.16.44.44,0,0,0,.37.5h.07a.45.45,0,0,0,.45-.39,1.5,1.5,0,0,0,0-.3V9.58a10.33,10.33,0,0,0-.07-1.36,13.39,13.39,0,0,0-.56-2.43A2.15,2.15,0,0,0,8.2,4.33H8A2.31,2.31,0,0,0,5.73,5.91a3.46,3.46,0,0,0-.09,1.5,14.16,14.16,0,0,1-.85,7.91,8.36,8.36,0,0,0,.83.32A15,15,0,0,0,6.53,7.29Z"/><path class="cls-1" d="M12.43,3A6.14,6.14,0,0,0,8.05,1a6.41,6.41,0,0,0-1.23.12,5.81,5.81,0,0,0-4.6,6.76c.08.52.14,1,.21,1.57l.09.74a.44.44,0,0,0,.45.39H3a.44.44,0,0,0,.38-.49h0l-.09-.74c-.06-.53-.13-1.06-.21-1.6A4.92,4.92,0,0,1,7,2H7a5.56,5.56,0,0,1,1-.1,5.38,5.38,0,0,1,3.8,1.69.44.44,0,0,0,.31.13.42.42,0,0,0,.32-.13.45.45,0,0,0,0-.64Z"/><path class="cls-1" d="M4.81,7.79a3.43,3.43,0,0,1,.44-2.72,1,1,0,0,1,.25-.28.46.46,0,0,0,.2-.61.46.46,0,0,0-.4-.25.67.67,0,0,0-.2,0,1.64,1.64,0,0,0-.58.56,4.38,4.38,0,0,0-.6,3.38,13.56,13.56,0,0,1-.11,5,9.89,9.89,0,0,1-.5,1.6A7.11,7.11,0,0,0,4.1,15a10.26,10.26,0,0,0,.59-1.88A14.81,14.81,0,0,0,4.81,7.79Z"/><path class="cls-1" d="M12,5.56A3.93,3.93,0,0,0,8.15,2.72a5.51,5.51,0,0,0-1.51.22.45.45,0,0,0-.31.55h0a.43.43,0,0,0,.43.32h.12a4.46,4.46,0,0,1,1.25-.19,3.07,3.07,0,0,1,3,2.23,13.72,13.72,0,0,1,.57,4.41A19.83,19.83,0,0,1,11,15.41a8.06,8.06,0,0,0,1.06-.53,20.79,20.79,0,0,0,.53-4.65A14.73,14.73,0,0,0,12,5.56Z"/><path class="cls-1" d="M13.72,5.15a.45.45,0,0,0-.44-.34l0,.08h-.1a.46.46,0,0,0-.34.54,22.63,22.63,0,0,1,.58,5.38,18.5,18.5,0,0,1-.35,3.4,7.35,7.35,0,0,0,1.12-1.11,18.59,18.59,0,0,0,.16-2.36A23.88,23.88,0,0,0,13.72,5.15Z"/><path class="cls-1" d="M8.06,6.56H8a.46.46,0,0,0-.37.52,17.65,17.65,0,0,1-.07,6.52.45.45,0,0,0,.35.53H8a.44.44,0,0,0,.44-.35A17.94,17.94,0,0,0,8.5,6.93.43.43,0,0,0,8.06,6.56Z"/></svg>
-\ No newline at end of file
-diff --git a/pam-biometric/data/org.freedesktop.plicykit.pkexec.bioctl-helper.policy.in b/pam-biometric/data/org.freedesktop.plicykit.pkexec.bioctl-helper.policy.in
-index 62c21b6..917979d 100644
---- a/pam-biometric/data/org.freedesktop.plicykit.pkexec.bioctl-helper.policy.in
-+++ b/pam-biometric/data/org.freedesktop.plicykit.pkexec.bioctl-helper.policy.in
-@@ -8,9 +8,11 @@
- 		<description>Run the biometric authentication control tool</description>
- 		<description xml:lang="zh">运行生物识别认证控制工具</description>
- 		<description xml:lang="bo">འཁོར་སྐྱོད་སྐྱེ་དངོས་ཀྱི་ངོས་འཛིན་ཁས་ལེན་ཚོད་འཛིན་ཡོ་བྱད།།</description>
-+		<description xml:lang="mn">ᠠᠵᠢᠯᠯᠠᠭᠠᠨ ᠤ ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ ᠢ ᠢᠯᠭᠠᠨ ᠲᠠᠨᠢᠵᠤ ᠭᠡᠷᠡᠴᠢᠯᠡᠬᠦ ᠡᠵᠡᠮᠳᠡᠯ ᠦᠨ ᠪᠠᠭᠠᠵᠢ ᠶᠢ ᠢᠯᠭᠠᠨ ᠲᠠᠨᠢᠬᠤ ᠬᠡᠷᠡᠭᠲᠡᠶ ᠃</description>
- 		<message>Authentication is required to enable or disable biometric authentication</message>
- 		<message xml:lang="zh">开启或关闭生物识别认证需要进行身份验证</message>
- 		<message xml:lang="bo">སྒོ་རྒྱག་པའམ་ཡང་ན་སྒོ་རྒྱག་པའི་སྐྱེ་དངོས་ངོས་འཛིན་བདེན་དཔངར་སྤྲོད་བྱེད་པར་ཐོབ་ཐང་གི་ཚོད་ལྟསར་སྤྲོད་བྱ་དགོས།</message>
-+		<message xml:lang="mn">ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ ᠢ ᠢᠯᠭᠠᠨ ᠲᠠᠨᠢᠬᠤ ᠭᠡᠷᠡᠴᠢᠯᠡᠭᠡ ᠶᠢ ᠨᠡᠭᠡᠭᠡᠬᠦ ᠪᠤᠶᠤ ᠬᠠᠭᠠᠬᠤ ᠳᠤ ᠪᠡᠶ᠎ᠡ ᠶᠢᠨ ᠭᠠᠷᠤᠯ ᠤᠨ ᠭᠡᠷᠡᠴᠢᠯᠡᠯ ᠬᠢᠬᠦ ᠴᠢᠬᠤᠯᠠ ᠲᠠᠶ ᠪᠠᠶᠢᠨ᠎ᠠ᠃</message>
- 		<icon_name>stock_person</icon_name>
- 		<defaults>
- 			<allow_any>no</allow_any>
-diff --git a/pam-biometric/data/org.freedesktop.plicykit.pkexec.biodrvctl.policy.in b/pam-biometric/data/org.freedesktop.plicykit.pkexec.biodrvctl.policy.in
-index aed20c3..708011b 100644
---- a/pam-biometric/data/org.freedesktop.plicykit.pkexec.biodrvctl.policy.in
-+++ b/pam-biometric/data/org.freedesktop.plicykit.pkexec.biodrvctl.policy.in
-@@ -8,9 +8,11 @@
- 		<description>Run the biometric device driver control tool</description>
- 		<description xml:lang="zh">运行生物识别设备驱动控制工具</description>
- 		<description xml:lang="bo">སྐྱ་དངོས་དབྱེ་འབྱེད་སྒྲག་ཆས་ཀྱི་ཁ་ལོ་བའི་ཚོད་འཛིན་ཡོ་བྱད་</description>
-+		<description xml:lang="mn">ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ ᠢ ᠢᠯᠭᠠᠨ ᠲᠠᠨᠢᠬᠤ ᠲᠥᠬᠥᠭᠡᠷᠦᠮᠵᠢ ᠪᠡᠷ ᠬᠥᠳᠡᠯᠭᠡᠭᠦᠷ ᠪᠣᠯᠭᠠᠬᠤ ᠡᠵᠡᠮᠳᠡᠯ ᠦᠨ ᠪᠠᠭᠠᠵᠢ ᠶᠢ ᠠᠵᠢᠯᠯᠠᠭᠤᠯᠤᠨ᠎ᠠ ᠃</description>
-                 <message>Authentication is required to change the status of biometric device's driver</message>
-                 <message xml:lang="zh">改变生物识别设备驱动状态需要进行身份验证</message>
--                <message xml:lang="bo">སྐྱ་དངོས་དབྱེ་འབྱེད་སྒྲག་ཆས་ཀྱི་ཁ་ལོ་བའི་གནས་ཚུལ་ལ་འགྱུར་ལྡོག་གཏོང་བར་བདེན་དཔང་ར་སྤྲད་བྱ་དགོས།</message>
-+		<message xml:lang="bo">སྐྱ་དངོས་དབྱེ་འབྱེད་སྒྲག་ཆས་ཀྱི་ཁ་ལོ་བའི་གནས་ཚུལ་ལ་འགྱུར་ལྡོག་གཏོང་བར་བདེན་དཔང་ར་སྤྲད་བྱ་དགོས།</message>
-+		<message xml:lang="mn">ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ ᠢ ᠢᠯᠭᠠᠨ ᠲᠠᠨᠢᠬᠤ ᠲᠥᠬᠥᠭᠡᠷᠦᠮᠵᠢ ᠶᠢᠨ ᠬᠥᠳᠡᠯᠭᠡᠭᠦᠷ ᠪᠣᠯᠭᠠᠬᠤ ᠪᠠᠶᠢᠳᠠᠯ ᠢ ᠬᠤᠪᠢᠷᠠᠭᠤᠯᠬᠤ ᠳᠤ ᠪᠡᠶ᠎ᠡ ᠶᠢᠨ ᠭᠠᠷᠤᠯ ᠤᠨ ᠭᠡᠷᠡᠴᠢᠯᠡᠯ ᠬᠢᠬᠦ ᠴᠢᠬᠤᠯᠠ ᠲᠠᠶ ᠪᠠᠶᠢᠬᠤ ᠬᠡᠷᠡᠭᠲᠡᠶ᠃</message>
- 		<icon_name>stock_person</icon_name>
- 		<defaults>
- 			<allow_any>auth_admin</allow_any>
-diff --git a/pam-biometric/data/org.freedesktop.plicykit.pkexec.biorestart.policy.in b/pam-biometric/data/org.freedesktop.plicykit.pkexec.biorestart.policy.in
-index cbad164..0c5cf79 100644
---- a/pam-biometric/data/org.freedesktop.plicykit.pkexec.biorestart.policy.in
-+++ b/pam-biometric/data/org.freedesktop.plicykit.pkexec.biorestart.policy.in
-@@ -8,9 +8,11 @@
- 		<description>Restart Service</description>
- 		<description xml:lang="zh">重启生物特征服务</description>
- 		<description xml:lang="bo">བསྐྱར་དུ་ཞབས་འདེགས་ཞུ་བ</description>
-+		<description xml:lang="mn">ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ ᠤᠨ ᠣᠨᠴᠠᠯᠢᠭ ᠤᠨ ᠦᠢᠯᠡᠴᠢᠯᠡᠭᠡ ᠶᠢ ᠳᠠᠬᠢᠨ ᠡᠭᠢᠯᠡᠭᠦᠯᠪᠡ᠃</description>
-                 <message>Authentication is required to restart biometric service</message>
-                 <message xml:lang="zh">重启生物特征服务需要身份验证</message>
--                <message xml:lang="bo">སྐྱ་དངོས་དབྱེ་འབྱེད་ཞབས་ཞུ་སླར་གསོ་བྱེད་པར་བདེན་དཔང་ར་སྤྲད་བྱ་དགོས།</message>
-+		<message xml:lang="bo">སྐྱ་དངོས་དབྱེ་འབྱེད་ཞབས་ཞུ་སླར་གསོ་བྱེད་པར་བདེན་དཔང་ར་སྤྲད་བྱ་དགོས།</message>
-+		<message xml:lang="mn">ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ ᠤᠨ ᠣᠨᠴᠠᠯᠢᠭ ᠰᠢᠨᠵᠢ ᠲᠡᠮᠳᠡᠭ ᠦᠨ ᠦᠢᠯᠡᠴᠢᠯᠡᠭᠡ ᠶᠢ ᠳᠠᠬᠢᠨ ᠰᠡᠩᠬᠡᠷᠡᠭᠦᠯᠬᠦ ᠳᠦ ᠪᠡᠶ᠎ᠡ ᠶᠢᠨ ᠭᠠᠷᠤᠯ ᠢ ᠰᠢᠯᠭᠠᠨ ᠭᠡᠷᠡᠴᠢᠯᠡᠬᠦ ᠴᠢᠬᠤᠯᠠ ᠲᠠᠶ ᠪᠠᠶᠢᠨ᠎ᠠ ᠃</message>
- 		<icon_name>stock_person</icon_name>
- 		<defaults>
- 			<allow_any>auth_admin</allow_any>
-diff --git a/pam-biometric/data/ukui-biometric.conf b/pam-biometric/data/ukui-biometric.conf
-index e96090b..0d1c89c 100644
---- a/pam-biometric/data/ukui-biometric.conf
-+++ b/pam-biometric/data/ukui-biometric.conf
-@@ -8,6 +8,7 @@ isShownInControlCenter=false
- UseFirstDevice=true
- MaxFailedTimes=5
- HiddenSwitchButton=false
-+FaceTimeoutTimes=1
- 
- [Functions]
- EnableQRCode=true
-diff --git a/polkit-agent/CMakeLists.txt b/polkit-agent/CMakeLists.txt
-index fa7768e..c5065d1 100644
---- a/polkit-agent/CMakeLists.txt
-+++ b/polkit-agent/CMakeLists.txt
-@@ -6,6 +6,7 @@ pkg_check_modules(KDKINFO REQUIRED kysdk-sysinfo)
- 
- find_package(PolkitQt5-1 REQUIRED 0.103.0)
- find_package(Qt5 COMPONENTS Core Widgets DBus X11Extras Xml Network Svg)
-+find_package(KF5WindowSystem)
- set(CMAKE_AUTOMOC ON)
- set(CMAKE_AUTOUIC ON)
- set(CMAKE_AUTORCC ON)
-@@ -59,7 +60,7 @@ set(polkit_SRCS
- 
- add_executable(polkit-ukui-authentication-agent-1 ${polkit_SRCS})
- target_link_libraries(polkit-ukui-authentication-agent-1
--    Qt5::Core Qt5::Widgets Qt5::DBus ${EXTRA_LIBS}
-+    Qt5::Core Qt5::Widgets Qt5::DBus ${EXTRA_LIBS} KF5::WindowSystem
-     ${POLKITQT-1_LIBRARIES}
-     BioAuthWidgets
-     -lrt
-diff --git a/polkit-agent/i18n_ts/bo_CN.ts b/polkit-agent/i18n_ts/bo_CN.ts
-index 75bd971..2b67f3f 100644
---- a/polkit-agent/i18n_ts/bo_CN.ts
-+++ b/polkit-agent/i18n_ts/bo_CN.ts
-@@ -67,7 +67,7 @@
-     <message>
-         <location filename="../src/mainwindow.cpp" line="65"/>
-         <source>Authentication</source>
--        <translation>བདེན་དཔང་ར་སྤྲོད་</translation>
-+        <translation>དབང་བསྐུར།</translation>
-     </message>
-     <message>
-         <source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
-@@ -95,12 +95,12 @@
-         <location filename="../src/mainwindow.cpp" line="882"/>
-         <location filename="../src/mainwindow.cpp" line="948"/>
-         <source>Biometric</source>
--        <translation>སྐྱེ་དངོས་རིག་པ།</translation>
-+        <translation>སྐྱེ་དངོས་དབྱེ་འབྱེད་བཀོལ་བ།</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.ui" line="373"/>
-         <source>use password</source>
--        <translation>གསང་གྲངས་བེད་སྤྱོད་བྱ་དགོས</translation>
-+        <translation>གསང་གྲངས་བེད་སྤྱོད་བྱ་དགོས།</translation>
-     </message>
-     <message>
-         <source>DeviceType:</source>
-@@ -156,13 +156,13 @@
-         <location filename="../src/mainwindow.ui" line="353"/>
-         <location filename="../src/mainwindow.cpp" line="880"/>
-         <source>Authenticate</source>
--        <translation>བདེན་དཔང་ར་སྤྲོད་བྱ་དགོས</translation>
-+        <translation>དབང་བསྐུར་བ།</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="886"/>
-         <location filename="../src/mainwindow.cpp" line="991"/>
-         <source>Use password</source>
--        <translation>གསང་གྲངས་བེད་སྤྱོད་བྱ་དགོས</translation>
-+        <translation>གསང་གྲངས་བེད་སྤྱོད་བྱ་དགོས།</translation>
-     </message>
-     <message>
-         <source>Auth</source>
-@@ -189,7 +189,7 @@
-         <location filename="../src/mainwindow.cpp" line="1093"/>
-         <location filename="../src/mainwindow.cpp" line="1094"/>
-         <source>Please try again in %1 minutes.</source>
--        <translation>ཁྱོད་ཀྱིས་ཡང་བསྐྱར་ཐེངས་གཅིག་ལ་ཚོད་ལྟ་ཞིག་བྱེད་རོགས།</translation>
-+        <translation>%1ཡང་བསྐྱར་ཚོད་ལྟ་ཞིག་བྱེད་རོགས།</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="1036"/>
-@@ -237,37 +237,37 @@
-     <message>
-         <location filename="../src/mainwindow.cpp" line="261"/>
-         <source>Please enter your password or enroll your fingerprint </source>
--        <translation>ཁྱེད་ཀྱི་གསང་གྲངས་ནང་འཇུག་བྱེད་པའམ་ཡང་ན་ཁྱེད་ཀྱི་མཛུབ་རིས </translation>
-+        <translation>ཁྱེད་ཀྱི་གསང་གྲངས་ནང་འཇུག་བྱེད་པའམ་ཡང་ན་ཁྱེད་ཀྱི་མཛུབ་རིས་ནང་འཇུག་བྱེད་པ། </translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="187"/>
-         <source>Abnormal network</source>
--        <translation>རྒྱུན་ལྡན་མིན་པའི་དྲ་</translation>
-+        <translation>རྒྱུན་ལྡན་མིན་པའི་དྲ་བ།</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="511"/>
-         <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
--        <translation>བྱ་སྤྱོད་འདི་ལ་དོ་དམ་པས་དབང་ཆ་སྤྲོད་དགོས། ཁྱེད་ཀྱི་གསང་གྲངས་ནང་དུ་བཅུག་ནས་གཤག་བཅོས་འདི་བྱེད་དུ་འཇུག་རོགས།</translation>
-+        <translation>ཐེངས་འདིའི་བཀོལ་སྤྱོད་ལ་དོ་དམ་པའི་དབང་ཆ་ཐོབ་ན་ད་གཟོད་མུ་མཐུད་དུ་ལག་བསྟར་བྱེད་ཐུབ།གསང་གྲངས་ནང་འཇུག་བྱས་ནས་ཐེངས་འདིའི་བཀོལ་སྤྱོད་བྱེད་ཆོག</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="580"/>
-         <source>_Password: </source>
--        <translation>_Password་ནི། </translation>
-+        <translation>གསང་གྲངས། </translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="582"/>
-         <source>_Password:</source>
--        <translation>_Password་ནི།</translation>
-+        <translation>གསང་གྲངས།:</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="691"/>
-         <source>Authentication failed, please try again.</source>
--        <translation>བདེན་དཔང་ར་སྤྲོད་བྱེད་མ་ཐུབ་པས་ཁྱེད་ཀྱིས་ཡང་བསྐྱར་ཚོད་ལྟ་ཞིག་བྱེད་</translation>
-+        <translation>བདེན་དཔང་ར་སྤྲོད་ལ་ཕམ་ཁ་བྱུང་བས་ཡང་བསྐྱར་ཚོད་ལྟ་བྱོས།</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="623"/>
-         <source>days left</source>
--        <translation>ཉིན་ཁ་ཤས་ལས་ལྷག་མེད</translation>
-+        <translation>གནམ་རྒྱབ་ཟྭ་འབྱེད།</translation>
-     </message>
-     <message>
-         <source>Biometric/code scan authentication failed too many times, please enter the password.</source>
-@@ -296,7 +296,7 @@
-     <message>
-         <location filename="../src/mainwindow.cpp" line="517"/>
-         <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
--        <translation>གོ་རིམ་ཞིག་གིས་དམིགས་བསལ་དབང་ཆ་དགོས་པའི་བྱ་སྤྱོད་ཅིག་སྤེལ་རྩིས་བྱེད་བཞིན་ཡོད། དེས་བྱ་སྤྱོད་སྤེལ་བའི་དབང་ཆ་སྤྲོད་དགོས།</translation>
-+        <translation>གོ་རིམ་ཞིག་གིས་ཁྱད་དབང་དགོས་པའི་འགུལ་སྟངས་ཤིག་ལག་བསྟར་བྱེད་པར་ཚོད་ལྟ་བྱེད་བཞིན་ཡོད་པ་དང་།་འགུལ་སྟངས་འདི་ལག་བསྟར་བྱེད་པའི་དབང་ཆ་སྤྲོད་དགོས་པའི་རེ་བ་བཏོན།</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="576"/>
-@@ -304,59 +304,49 @@
-         <translation>ནང་འཇུག་གི་གསང་གྲངས།</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="104"/>
--        <source>Insert the ukey into the USB port</source>
--        <translation>བདེ་འཇགས་ཀྱི་གསང་བའི་ལྡེ་མིག་དེ་USBཡི་སྣེ་འདྲེན་དུ་འཇུག་རོགས།</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="106"/>
--        <source>Enter the ukey password</source>
--        <translation>གསང་བའི་ཨང་གྲངས་ནང་འཇུག་བྱེད་པ།</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="764"/>
-+        <location filename="../src/mainwindow.cpp" line="627"/>
-         <source>hours left</source>
-         <translation>དུས་ཚོད་འགའ་ལས་ལྷག་མེད</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="631"/>
-         <source>minutes left</source>
--        <translation>སྐར་མ་འགའ་ལས་ལྷག་མེད</translation>
-+        <translation>སྐར་མ་རྗེས་ནས་ཟྭ་ཕྱེ།</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="635"/>
-         <source>seconds left</source>
--        <translation>གཡོན་ཕྱོགས་ཀྱི་དུས་ཚོད་སྐར་ཆ</translation>
-+        <translation>སྐར་ཆའི་རྗེས་ནས་ཟྭ་ཕྱེ་བ།</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="1193"/>
-         <source>Verify face recognition or enter password to unlock</source>
--        <translation>ངོ་གདོང་ངོས་འཛིན་ལ་ཞིབ་བཤེར་བྱེད་པའམ་ཡང་ན་གསང་གྲངས་ནང་</translation>
-+        <translation>དཔང་མིའི་གདོང་ལ་ཞིབ་བཤེར་བྱེད་པའམ་ཡང་ན་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་པ།</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="1198"/>
-         <source>Press fingerprint or enter password to unlock</source>
--        <translation>མཛུབ་རིས་མནན་པའམ་ཡང་ན་གསང་གྲངས་ནང་འཇུག་བྱས་ནས་</translation>
-+        <translation>མཛུབ་རིས་མནན་པའམ་ཡང་ན་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་པ།</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="1203"/>
-         <source>Verify voiceprint or enter password to unlock</source>
--        <translation>སྒྲ་པར་ཞིབ་བཤེར་བྱེད་པའམ་ཡང་ན་གསང་གྲངས་ནང་འཇུག་བྱས་ནས་ཟྭ་རྒྱག</translation>
-+        <translation>སྒྲ་རིས་ར་སྤྲོད་བྱེད་པའམ་ཡང་ན་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་པ།</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="1208"/>
-         <source>Verify finger vein or enter password to unlock</source>
--        <translation>མཛུབ་མོའི་ནང་དུ་ཞིབ་བཤེར་བྱེད་པའམ་ཡང་ན་གསང་གྲངས་ནང་འཇུག་བྱས་</translation>
-+        <translation>ཚོད་ལྟས་ར་སྤྲོད་བྱེད་པ་ནི་སྡོད་རྩ་དང་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་པ་དེ་ཡིན།</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="1213"/>
-         <source>Verify iris or enter password to unlock</source>
--        <translation>iris ཞིབ་བཤེར་བྱེད་པའམ་ཡང་ན་གསང་གྲངས་ནང་འཇུག་བྱས་ནས་ཟྭ་</translation>
-+        <translation>འཇའ་སྐྱི་ར་སྤྲོད་བྱེད་པའམ་ཡང་ན་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་པ།</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="1218"/>
-         <source>Use the bound wechat scanning code or enter the password to unlock</source>
--        <translation>འབྲེལ་མཐུད་ཀྱི་འཕྲིན་ཕྲན་ཞིབ་བཤེར་ཨང་གྲངས་སམ་ཡང་ན་གསང་གྲངས་ནང་འཇུག་བྱས་ནས་ཟྭ་རྒྱག་པ།</translation>
-+        <translation>སྦྲེལ་ཡོད་པའི་སྐད་འཕྲིན་གྱི་ཨང་གྲངས་སམ་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་དགོས།</translation>
-     </message>
-     <message>
-         <source>Use the bound wechat scanning code or enter the password to log in</source>
-@@ -380,17 +370,17 @@
-     <message>
-         <location filename="../src/PolkitListener.cpp" line="88"/>
-         <source>Another client is already authenticating, please try again later.</source>
--        <translation>མངགས་བཅོལ་བྱེད་མཁན་གཞན་ཞིག་གིས་བདེན་དཔང་ར་སྤྲོད་བྱེད་བཞིན་ཡོད། ཅུང་ཙམ་འགོར་རྗེས་ཡང་བསྐྱར་ཚོད་ལྟ</translation>
-+        <translation>མཁོ་མཁན་གཞན་པ་ཞིག་གིས་བདེན་དཔང་ར་སྤྲོད་བྱེད་བཞིན་ཡོད།ཅུང་ཙམ་འགོར་རྗེས་ཡང་བསྐྱར་ཚོད་ལྟ་བྱོས།</translation>
-     </message>
-     <message>
-         <location filename="../src/PolkitListener.cpp" line="257"/>
-         <source>Authentication failure, please try again.</source>
--        <translation>བདེན་དཔང་ར་སྤྲོད་བྱེད་མ་ཐུབ་ན་ཁྱེད་ཀྱིས་ཡང་བསྐྱར་ཚོད་ལྟ་</translation>
-+        <translation>བདེན་དཔང་ར་སྤྲོད་བྱེད་མ་ཐུབ་ན་ཁྱེད་ཀྱིས་ཡང་བསྐྱར་ཚོད་ལྟ་བྱེད།</translation>
-     </message>
-     <message>
-         <location filename="../src/PolkitListener.cpp" line="264"/>
-         <source>Password input error!</source>
--        <translation>གསང་གྲངས་ནང་འཇུག་ནོར་འཁྲུལ་བྱུང་བ་རེད</translation>
-+        <translation>གསང་གྲངས་ནང་འཇུག་ནོར་འཁྲུལ་བྱུང་བ་རེད།</translation>
-     </message>
-     <message>
-         <source>Account locked %1 minutes due to %2 fail attempts</source>
-diff --git a/polkit-agent/i18n_ts/de.ts b/polkit-agent/i18n_ts/de.ts
-new file mode 100644
-index 0000000..8017b6c
---- /dev/null
-+++ b/polkit-agent/i18n_ts/de.ts
-@@ -0,0 +1,421 @@
-+<?xml version="1.0" encoding="utf-8"?>
-+<!DOCTYPE TS>
-+<TS version="2.1" language="de">
-+<context>
-+    <name>BioAuthWidget</name>
-+    <message>
-+        <source>Retry</source>
-+        <translation type="obsolete">重试</translation>
-+    </message>
-+    <message>
-+        <source>%1 too many unsuccessful attempts,please enter password.</source>
-+        <translation type="obsolete">%1验证失败达最大次数,请使用密码登录</translation>
-+    </message>
-+    <message>
-+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
-+        <translation type="obsolete">%1认证失败,还剩%2次尝试机会</translation>
-+    </message>
-+    <message>
-+        <source>Please use wechat to scan the code</source>
-+        <translation type="vanished">请使用微信扫码</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>BioDevices</name>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="obsolete">指纹</translation>
-+    </message>
-+    <message>
-+        <source>FingerVein</source>
-+        <translation type="obsolete">指静脉</translation>
-+    </message>
-+    <message>
-+        <source>Iris</source>
-+        <translation type="obsolete">虹膜</translation>
-+    </message>
-+    <message>
-+        <source>Face</source>
-+        <translation type="obsolete">人脸</translation>
-+    </message>
-+    <message>
-+        <source>VoicePrint</source>
-+        <translation type="obsolete">声纹</translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+    <message>
-+        <source>QRCode</source>
-+        <translation type="vanished">二维码</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>LoginOptionsWidget</name>
-+    <message>
-+        <source>Login Options</source>
-+        <translation type="vanished">登录选项</translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>MainWindow</name>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="65"/>
-+        <source>Authentication</source>
-+        <translation>Authentifizierung</translation>
-+    </message>
-+    <message>
-+        <source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
-+        <translation type="vanished">指纹验证失败,您还有%1次尝试机会</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="26"/>
-+        <source>Form</source>
-+        <translation></translation>
-+    </message>
-+    <message>
-+        <source>More</source>
-+        <translation type="obsolete">更多</translation>
-+    </message>
-+    <message>
-+        <source>Restart</source>
-+        <translation type="obsolete">重新开始</translation>
-+    </message>
-+    <message>
-+        <source>Password</source>
-+        <translation type="vanished">密码</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="302"/>
-+        <location filename="../src/mainwindow.cpp" line="882"/>
-+        <location filename="../src/mainwindow.cpp" line="948"/>
-+        <source>Biometric</source>
-+        <translation>Biometrisch</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="373"/>
-+        <source>use password</source>
-+        <translation>Passwort verwenden</translation>
-+    </message>
-+    <message>
-+        <source>DeviceType:</source>
-+        <translation type="obsolete">设备类型:</translation>
-+    </message>
-+    <message>
-+        <source>Back</source>
-+        <translation type="obsolete">返回</translation>
-+    </message>
-+    <message>
-+        <source>Details</source>
-+        <translation type="vanished">详细</translation>
-+    </message>
-+    <message>
-+        <source>Action Id:</source>
-+        <translation type="obsolete">动作:</translation>
-+    </message>
-+    <message>
-+        <source>Description:</source>
-+        <translation type="vanished">描述:</translation>
-+    </message>
-+    <message>
-+        <source>Polkit.subject-pid:</source>
-+        <translation type="vanished">Polkit.subject-pid:</translation>
-+    </message>
-+    <message>
-+        <source>Retry</source>
-+        <translation type="obsolete">重试</translation>
-+    </message>
-+    <message>
-+        <source>Device types:</source>
-+        <translation type="obsolete">设备类型:</translation>
-+    </message>
-+    <message>
-+        <source>Vendor:</source>
-+        <translation type="vanished">发行商:</translation>
-+    </message>
-+    <message>
-+        <source>Action:</source>
-+        <translation type="vanished">动作:</translation>
-+    </message>
-+    <message>
-+        <source>Polkit.caller-pid:</source>
-+        <translation type="vanished">Polkit.caller-pid:</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="334"/>
-+        <location filename="../src/mainwindow.cpp" line="884"/>
-+        <source>Cancel</source>
-+        <translation>Abbrechen</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="353"/>
-+        <location filename="../src/mainwindow.cpp" line="880"/>
-+        <source>Authenticate</source>
-+        <translation>Beglaubigen</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="886"/>
-+        <location filename="../src/mainwindow.cpp" line="991"/>
-+        <source>Use password</source>
-+        <translation>Passwort verwenden</translation>
-+    </message>
-+    <message>
-+        <source>Auth</source>
-+        <translation type="obsolete">授权</translation>
-+    </message>
-+    <message>
-+        <source>Too many unsuccessful attempts,please enter password.</source>
-+        <translation type="vanished">指纹验证失败达最大次数,请使用密码解锁</translation>
-+    </message>
-+    <message>
-+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
-+        <translation type="vanished">%1认证失败,还剩%2次尝试机会</translation>
-+    </message>
-+    <message>
-+        <source>%1 too many unsuccessful attempts,please enter password.</source>
-+        <translation type="vanished">%1验证失败达最大次数,请使用密码登录</translation>
-+    </message>
-+    <message>
-+        <source>in authentication, please wait...</source>
-+        <translation type="vanished">认证中,请稍等...</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1026"/>
-+        <location filename="../src/mainwindow.cpp" line="1093"/>
-+        <location filename="../src/mainwindow.cpp" line="1094"/>
-+        <source>Please try again in %1 minutes.</source>
-+        <translation>Versuchen Sie es in %1 Minuten erneut.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1036"/>
-+        <location filename="../src/mainwindow.cpp" line="1103"/>
-+        <location filename="../src/mainwindow.cpp" line="1104"/>
-+        <source>Please try again in %1 seconds.</source>
-+        <translation>Bitte versuchen Sie es in %1 Sekunden erneut.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1045"/>
-+        <location filename="../src/mainwindow.cpp" line="1046"/>
-+        <location filename="../src/mainwindow.cpp" line="1112"/>
-+        <location filename="../src/mainwindow.cpp" line="1113"/>
-+        <source>Account locked permanently.</source>
-+        <translation>Das Konto wurde dauerhaft gesperrt.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="675"/>
-+        <location filename="../src/mainwindow.cpp" line="676"/>
-+        <source>Password cannot be empty</source>
-+        <translation>Das Kennwort darf nicht leer sein.</translation>
-+    </message>
-+    <message>
-+        <source>Failed to verify %1, please enter password.</source>
-+        <translation type="vanished">验证%1失败,请输入密码.</translation>
-+    </message>
-+    <message>
-+        <source>Unable to verify %1, please enter password.</source>
-+        <translation type="vanished">无法验证%1,请输入密码.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="175"/>
-+        <source>Failed to verify %1, you still have %2 verification opportunities</source>
-+        <translation>%1 konnte nicht verifiziert werden, Sie haben immer noch %2 Überprüfungsmöglichkeiten</translation>
-+    </message>
-+    <message>
-+        <source>An application is attempting to perform an action that requires privileges. Authentication is required to perform this action.</source>
-+        <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="578"/>
-+        <source>Password: </source>
-+        <translation>Passwort: </translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="261"/>
-+        <source>Please enter your password or enroll your fingerprint </source>
-+        <translation>Bitte geben Sie Ihr Passwort ein oder registrieren Sie Ihren Fingerabdruck </translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="187"/>
-+        <source>Abnormal network</source>
-+        <translation>Ungewöhnliches Netzwerk</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="511"/>
-+        <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
-+        <translation>Für diesen Vorgang ist die Autorisierung des Administrators erforderlich. Bitte geben Sie Ihr Passwort ein, um diesen Vorgang zuzulassen.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="580"/>
-+        <source>_Password: </source>
-+        <translation>_Passwort: </translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="582"/>
-+        <source>_Password:</source>
-+        <translation>_Passwort:</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="691"/>
-+        <source>Authentication failed, please try again.</source>
-+        <translation>Authentifizierung fehlgeschlagen, bitte versuchen Sie es erneut.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="623"/>
-+        <source>days left</source>
-+        <translation>Verbleibende Tage</translation>
-+    </message>
-+    <message>
-+        <source>Biometric/code scan authentication failed too many times, please enter the password.</source>
-+        <translation type="vanished">生物/扫码验证失败达最大次数,请使用密码解锁.</translation>
-+    </message>
-+    <message>
-+        <source>Bioauth/code scan authentication failed, you still have %1 verification opportunities</source>
-+        <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="164"/>
-+        <location filename="../src/mainwindow.cpp" line="1176"/>
-+        <source>Failed to verify %1, please enter password to unlock</source>
-+        <translation>%1 konnte nicht verifiziert werden, bitte geben Sie das Kennwort zum Entsperren ein</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="168"/>
-+        <location filename="../src/mainwindow.cpp" line="1178"/>
-+        <source>Unable to verify %1, please enter password to unlock</source>
-+        <translation>%1 kann nicht verifiziert werden, bitte geben Sie das Kennwort zum Entsperren ein</translation>
-+    </message>
-+    <message>
-+        <source>NET Exception</source>
-+        <translation type="vanished">网络异常</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="517"/>
-+        <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
-+        <translation>Ein Programm versucht, eine Aktion auszuführen, für die Berechtigungen erforderlich sind. Zum Ausführen der Aktion ist eine Autorisierung erforderlich.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="576"/>
-+        <source>Input Password</source>
-+        <translation>Passwort eingeben</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="627"/>
-+        <source>hours left</source>
-+        <translation>Verbleibende Stunden</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="631"/>
-+        <source>minutes left</source>
-+        <translation>Noch Minuten</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="635"/>
-+        <source>seconds left</source>
-+        <translation>Verbleibende Sekunden</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1193"/>
-+        <source>Verify face recognition or enter password to unlock</source>
-+        <translation>Überprüfen Sie die Gesichtserkennung oder geben Sie das Passwort ein, um zu entsperren</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1198"/>
-+        <source>Press fingerprint or enter password to unlock</source>
-+        <translation>Drücken Sie den Fingerabdruck oder geben Sie das Passwort ein, um zu entsperren</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1203"/>
-+        <source>Verify voiceprint or enter password to unlock</source>
-+        <translation>Überprüfen Sie den Stimmabdruck oder geben Sie das Passwort ein, um zu entsperren</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1208"/>
-+        <source>Verify finger vein or enter password to unlock</source>
-+        <translation>Überprüfen Sie die Fingervene oder geben Sie das Passwort ein, um zu entsperren</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1213"/>
-+        <source>Verify iris or enter password to unlock</source>
-+        <translation>Überprüfen Sie die Iris oder geben Sie das Passwort ein, um zu entsperren</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1218"/>
-+        <source>Use the bound wechat scanning code or enter the password to unlock</source>
-+        <translation>Verwenden Sie den gebundenen Wechat-Scan-Code oder geben Sie das Passwort zum Entsperren ein</translation>
-+    </message>
-+    <message>
-+        <source>Use the bound wechat scanning code or enter the password to log in</source>
-+        <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="623"/>
-+        <location filename="../src/mainwindow.cpp" line="627"/>
-+        <location filename="../src/mainwindow.cpp" line="631"/>
-+        <location filename="../src/mainwindow.cpp" line="635"/>
-+        <source>Account locked,</source>
-+        <translation>Konto gesperrt,</translation>
-+    </message>
-+    <message>
-+        <source>Authentication failed, please try again</source>
-+        <translation type="obsolete">认证失败,请重试</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>PolkitListener</name>
-+    <message>
-+        <location filename="../src/PolkitListener.cpp" line="88"/>
-+        <source>Another client is already authenticating, please try again later.</source>
-+        <translation>Ein anderer Client authentifiziert sich bereits, bitte versuchen Sie es später noch einmal.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/PolkitListener.cpp" line="257"/>
-+        <source>Authentication failure, please try again.</source>
-+        <translation>Authentifizierungsfehler, bitte versuchen Sie es erneut.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/PolkitListener.cpp" line="264"/>
-+        <source>Password input error!</source>
-+        <translation>Fehler bei der Passworteingabe!</translation>
-+    </message>
-+    <message>
-+        <source>Account locked %1 minutes due to %2 fail attempts</source>
-+        <translation type="vanished">账户锁定%1分钟由于%2次错误尝试</translation>
-+    </message>
-+    <message>
-+        <source>Authentication failure,there are still %1 remaining opportunities</source>
-+        <translation type="vanished">认证失败,还剩余%1次尝试机会</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>QObject</name>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="obsolete">指纹</translation>
-+    </message>
-+    <message>
-+        <source>FingerVein</source>
-+        <translation type="obsolete">指静脉</translation>
-+    </message>
-+    <message>
-+        <source>Iris</source>
-+        <translation type="obsolete">虹膜</translation>
-+    </message>
-+    <message>
-+        <source>Face</source>
-+        <translation type="obsolete">人脸</translation>
-+    </message>
-+    <message>
-+        <source>VoicePrint</source>
-+        <translation type="obsolete">声纹</translation>
-+    </message>
-+    <message>
-+        <source>Cancel</source>
-+        <translation type="obsolete">取消</translation>
-+    </message>
-+</context>
-+</TS>
-diff --git a/polkit-agent/i18n_ts/es.ts b/polkit-agent/i18n_ts/es.ts
-index ac1ddd7..a395a53 100644
---- a/polkit-agent/i18n_ts/es.ts
-+++ b/polkit-agent/i18n_ts/es.ts
-@@ -4,208 +4,418 @@
- <context>
-     <name>BioAuthWidget</name>
-     <message>
--        <source>Form</source>
--        <translation type="obsolete">Formar</translation>
-+        <source>Retry</source>
-+        <translation type="obsolete">重试</translation>
-+    </message>
-+    <message>
-+        <source>%1 too many unsuccessful attempts,please enter password.</source>
-+        <translation type="obsolete">%1验证失败达最大次数,请使用密码登录</translation>
-+    </message>
-+    <message>
-+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
-+        <translation type="obsolete">%1认证失败,还剩%2次尝试机会</translation>
-+    </message>
-+    <message>
-+        <source>Please use wechat to scan the code</source>
-+        <translation type="vanished">请使用微信扫码</translation>
-     </message>
- </context>
- <context>
--    <name>BioDevicesWidget</name>
-+    <name>BioDevices</name>
-     <message>
--        <source>Form</source>
--        <translation type="obsolete">Formar</translation>
-+        <source>FingerPrint</source>
-+        <translation type="obsolete">指纹</translation>
-+    </message>
-+    <message>
-+        <source>FingerVein</source>
-+        <translation type="obsolete">指静脉</translation>
-+    </message>
-+    <message>
-+        <source>Iris</source>
-+        <translation type="obsolete">虹膜</translation>
-+    </message>
-+    <message>
-+        <source>Face</source>
-+        <translation type="obsolete">人脸</translation>
-+    </message>
-+    <message>
-+        <source>VoicePrint</source>
-+        <translation type="obsolete">声纹</translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+    <message>
-+        <source>QRCode</source>
-+        <translation type="vanished">二维码</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>LoginOptionsWidget</name>
-+    <message>
-+        <source>Login Options</source>
-+        <translation type="vanished">登录选项</translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-     </message>
- </context>
- <context>
-     <name>MainWindow</name>
-     <message>
-+        <location filename="../src/mainwindow.cpp" line="65"/>
-+        <source>Authentication</source>
-+        <translation>Autenticación</translation>
-+    </message>
-+    <message>
-+        <source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
-+        <translation type="vanished">指纹验证失败,您还有%1次尝试机会</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="26"/>
-         <source>Form</source>
--        <translation>Formar</translation>
-+        <translation>Forma</translation>
-+    </message>
-+    <message>
-+        <source>More</source>
-+        <translation type="obsolete">更多</translation>
-+    </message>
-+    <message>
-+        <source>Restart</source>
-+        <translation type="obsolete">重新开始</translation>
-+    </message>
-+    <message>
-+        <source>Password</source>
-+        <translation type="vanished">密码</translation>
-     </message>
-     <message>
-+        <location filename="../src/mainwindow.ui" line="302"/>
-+        <location filename="../src/mainwindow.cpp" line="882"/>
-+        <location filename="../src/mainwindow.cpp" line="948"/>
-         <source>Biometric</source>
--        <translation>Biometrico</translation>
-+        <translation>Biométrico</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="373"/>
-+        <source>use password</source>
-+        <translation>Usar contraseña</translation>
-+    </message>
-+    <message>
-+        <source>DeviceType:</source>
-+        <translation type="obsolete">设备类型:</translation>
-+    </message>
-+    <message>
-+        <source>Back</source>
-+        <translation type="obsolete">返回</translation>
-     </message>
-     <message>
-         <source>Details</source>
--        <translation type="vanished">Detalles</translation>
-+        <translation type="vanished">详细</translation>
-+    </message>
-+    <message>
-+        <source>Action Id:</source>
-+        <translation type="obsolete">动作:</translation>
-+    </message>
-+    <message>
-+        <source>Description:</source>
-+        <translation type="vanished">描述:</translation>
-     </message>
-     <message>
-         <source>Polkit.subject-pid:</source>
--        <translation type="vanished">Polkit.subject-pid:</translation>
-+        <translation type="vanished">Polkit.subject-pid:</translation>
-     </message>
-     <message>
--        <source>Vendor:</source>
--        <translation type="vanished">Vendedor:</translation>
-+        <source>Retry</source>
-+        <translation type="obsolete">重试</translation>
-     </message>
-     <message>
--        <source>Description:</source>
--        <translation type="vanished">Descripción:</translation>
-+        <source>Device types:</source>
-+        <translation type="obsolete">设备类型:</translation>
-     </message>
-     <message>
--        <source>Polkit.caller-pid:</source>
--        <translation type="vanished">Polkit.caller-pid:</translation>
-+        <source>Vendor:</source>
-+        <translation type="vanished">发行商:</translation>
-     </message>
-     <message>
-         <source>Action:</source>
--        <translation type="vanished">Acción:</translation>
-+        <translation type="vanished">动作:</translation>
-+    </message>
-+    <message>
-+        <source>Polkit.caller-pid:</source>
-+        <translation type="vanished">Polkit.caller-pid:</translation>
-     </message>
-     <message>
-+        <location filename="../src/mainwindow.ui" line="334"/>
-+        <location filename="../src/mainwindow.cpp" line="884"/>
-         <source>Cancel</source>
-         <translation>Cancelar</translation>
-     </message>
-     <message>
-+        <location filename="../src/mainwindow.ui" line="353"/>
-+        <location filename="../src/mainwindow.cpp" line="880"/>
-         <source>Authenticate</source>
--        <translation>Autenticar</translation>
-+        <translation>Autentificar</translation>
-     </message>
-     <message>
--        <source>Authentication</source>
--        <translation>Autenticación</translation>
-+        <location filename="../src/mainwindow.cpp" line="886"/>
-+        <location filename="../src/mainwindow.cpp" line="991"/>
-+        <source>Use password</source>
-+        <translation>Usar contraseña</translation>
-+    </message>
-+    <message>
-+        <source>Auth</source>
-+        <translation type="obsolete">授权</translation>
-+    </message>
-+    <message>
-+        <source>Too many unsuccessful attempts,please enter password.</source>
-+        <translation type="vanished">指纹验证失败达最大次数,请使用密码解锁</translation>
-+    </message>
-+    <message>
-+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
-+        <translation type="vanished">%1认证失败,还剩%2次尝试机会</translation>
-+    </message>
-+    <message>
-+        <source>%1 too many unsuccessful attempts,please enter password.</source>
-+        <translation type="vanished">%1验证失败达最大次数,请使用密码登录</translation>
-     </message>
-     <message>
-         <source>in authentication, please wait...</source>
--        <translation type="vanished">En autenticación, por favor espere ...</translation>
-+        <translation type="vanished">认证中,请稍等...</translation>
-     </message>
-     <message>
--        <source>An application is attempting to perform an action that requires privileges. Authentication is required to perform this action.</source>
--        <translation type="vanished">Una aplicación está intentando realizar una acción que requiere privilegios. Se requiere autenticación para realizar esta acción.</translation>
-+        <location filename="../src/mainwindow.cpp" line="1026"/>
-+        <location filename="../src/mainwindow.cpp" line="1093"/>
-+        <location filename="../src/mainwindow.cpp" line="1094"/>
-+        <source>Please try again in %1 minutes.</source>
-+        <translation>Inténtelo de nuevo en %1 minutos.</translation>
-     </message>
-     <message>
--        <source>Password: </source>
--        <translation>Contraseña: </translation>
-+        <location filename="../src/mainwindow.cpp" line="1036"/>
-+        <location filename="../src/mainwindow.cpp" line="1103"/>
-+        <location filename="../src/mainwindow.cpp" line="1104"/>
-+        <source>Please try again in %1 seconds.</source>
-+        <translation>Inténtelo de nuevo en %1 segundos.</translation>
-     </message>
-     <message>
--        <source>Authentication failed, please try again.</source>
--        <translation>Autenticación fallida. Por favor intente de nuevo.</translation>
-+        <location filename="../src/mainwindow.cpp" line="1045"/>
-+        <location filename="../src/mainwindow.cpp" line="1046"/>
-+        <location filename="../src/mainwindow.cpp" line="1112"/>
-+        <location filename="../src/mainwindow.cpp" line="1113"/>
-+        <source>Account locked permanently.</source>
-+        <translation>Cuenta bloqueada permanentemente.</translation>
-     </message>
-     <message>
--        <source>Please enter your password or enroll your fingerprint </source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="675"/>
-+        <location filename="../src/mainwindow.cpp" line="676"/>
-+        <source>Password cannot be empty</source>
-+        <translation>La contraseña no puede estar vacía</translation>
-     </message>
-     <message>
--        <source>use password</source>
--        <translation type="unfinished"></translation>
-+        <source>Failed to verify %1, please enter password.</source>
-+        <translation type="vanished">验证%1失败,请输入密码.</translation>
-     </message>
-     <message>
--        <source>Account locked,</source>
--        <translation type="unfinished"></translation>
-+        <source>Unable to verify %1, please enter password.</source>
-+        <translation type="vanished">无法验证%1,请输入密码.</translation>
-     </message>
-     <message>
--        <source>days left</source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="175"/>
-+        <source>Failed to verify %1, you still have %2 verification opportunities</source>
-+        <translation>No se pudo verificar %1, todavía tiene %2 oportunidades de verificación</translation>
-     </message>
-     <message>
--        <source>hours left</source>
--        <translation type="unfinished"></translation>
-+        <source>An application is attempting to perform an action that requires privileges. Authentication is required to perform this action.</source>
-+        <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
-     </message>
-     <message>
--        <source>minutes left</source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="578"/>
-+        <source>Password: </source>
-+        <translation>Contraseña: </translation>
-     </message>
-     <message>
--        <source>seconds left</source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="261"/>
-+        <source>Please enter your password or enroll your fingerprint </source>
-+        <translation>Ingrese su contraseña o registre su huella dactilar </translation>
-     </message>
-     <message>
--        <source>Password cannot be empty</source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="187"/>
-+        <source>Abnormal network</source>
-+        <translation>Red anormal</translation>
-     </message>
-     <message>
--        <source>Use password</source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="511"/>
-+        <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
-+        <translation>Esta operación requiere la autorización del administrador. Introduzca su contraseña para permitir esta operación.</translation>
-     </message>
-     <message>
--        <source>Please try again in %1 minutes.</source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="580"/>
-+        <source>_Password: </source>
-+        <translation>_Contraseña: </translation>
-     </message>
-     <message>
--        <source>Please try again in %1 seconds.</source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="582"/>
-+        <source>_Password:</source>
-+        <translation>_Contraseña:</translation>
-     </message>
-     <message>
--        <source>Account locked permanently.</source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="691"/>
-+        <source>Authentication failed, please try again.</source>
-+        <translation>Error de autenticación, inténtelo de nuevo.</translation>
-     </message>
-     <message>
--        <source>Verify face recognition or enter password to unlock</source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="623"/>
-+        <source>days left</source>
-+        <translation>Días restantes</translation>
-     </message>
-     <message>
--        <source>Press fingerprint or enter password to unlock</source>
--        <translation type="unfinished"></translation>
-+        <source>Biometric/code scan authentication failed too many times, please enter the password.</source>
-+        <translation type="vanished">生物/扫码验证失败达最大次数,请使用密码解锁.</translation>
-     </message>
-     <message>
--        <source>Verify voiceprint or enter password to unlock</source>
--        <translation type="unfinished"></translation>
-+        <source>Bioauth/code scan authentication failed, you still have %1 verification opportunities</source>
-+        <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
-     </message>
-     <message>
--        <source>Verify finger vein or enter password to unlock</source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="164"/>
-+        <location filename="../src/mainwindow.cpp" line="1176"/>
-+        <source>Failed to verify %1, please enter password to unlock</source>
-+        <translation>No se pudo verificar %1, ingrese la contraseña para desbloquear</translation>
-     </message>
-     <message>
--        <source>Verify iris or enter password to unlock</source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="168"/>
-+        <location filename="../src/mainwindow.cpp" line="1178"/>
-+        <source>Unable to verify %1, please enter password to unlock</source>
-+        <translation>No se puede verificar %1, ingrese la contraseña para desbloquear</translation>
-     </message>
-     <message>
--        <source>Failed to verify %1, you still have %2 verification opportunities</source>
--        <translation type="unfinished"></translation>
-+        <source>NET Exception</source>
-+        <translation type="vanished">网络异常</translation>
-     </message>
-     <message>
-+        <location filename="../src/mainwindow.cpp" line="517"/>
-+        <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
-+        <translation>Un programa está intentando realizar una acción que requiere privilegios. Requiere autorización para realizar la acción.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="576"/>
-         <source>Input Password</source>
--        <translation type="unfinished"></translation>
-+        <translation>Contraseña de entrada</translation>
-     </message>
-     <message>
--        <source>Use the bound wechat scanning code or enter the password to unlock</source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="627"/>
-+        <source>hours left</source>
-+        <translation>horas restantes</translation>
-     </message>
-     <message>
--        <source>Failed to verify %1, please enter password to unlock</source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="631"/>
-+        <source>minutes left</source>
-+        <translation>Quedan minutos</translation>
-     </message>
-     <message>
--        <source>Unable to verify %1, please enter password to unlock</source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="635"/>
-+        <source>seconds left</source>
-+        <translation>segundos restantes</translation>
-     </message>
-     <message>
--        <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="1193"/>
-+        <source>Verify face recognition or enter password to unlock</source>
-+        <translation>Verifique el reconocimiento facial o ingrese la contraseña para desbloquear</translation>
-     </message>
-     <message>
--        <source>_Password:</source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="1198"/>
-+        <source>Press fingerprint or enter password to unlock</source>
-+        <translation>Presione la huella dactilar o ingrese la contraseña para desbloquear</translation>
-     </message>
-     <message>
--        <source>_Password: </source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="1203"/>
-+        <source>Verify voiceprint or enter password to unlock</source>
-+        <translation>Verifica la huella de voz o ingresa la contraseña para desbloquear</translation>
-     </message>
-     <message>
--        <source>Abnormal network</source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="1208"/>
-+        <source>Verify finger vein or enter password to unlock</source>
-+        <translation>Verifique la vena del dedo o ingrese la contraseña para desbloquear</translation>
-     </message>
-     <message>
--        <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="1213"/>
-+        <source>Verify iris or enter password to unlock</source>
-+        <translation>Verifique el iris o ingrese la contraseña para desbloquear</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1218"/>
-+        <source>Use the bound wechat scanning code or enter the password to unlock</source>
-+        <translation>Use el código de escaneo de wechat vinculado o ingrese la contraseña para desbloquear</translation>
-+    </message>
-+    <message>
-+        <source>Use the bound wechat scanning code or enter the password to log in</source>
-+        <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="623"/>
-+        <location filename="../src/mainwindow.cpp" line="627"/>
-+        <location filename="../src/mainwindow.cpp" line="631"/>
-+        <location filename="../src/mainwindow.cpp" line="635"/>
-+        <source>Account locked,</source>
-+        <translation>Cuenta bloqueada,</translation>
-+    </message>
-+    <message>
-+        <source>Authentication failed, please try again</source>
-+        <translation type="obsolete">认证失败,请重试</translation>
-     </message>
- </context>
- <context>
-     <name>PolkitListener</name>
-     <message>
-+        <location filename="../src/PolkitListener.cpp" line="88"/>
-         <source>Another client is already authenticating, please try again later.</source>
--        <translation>Otro cliente ya se está autenticando, inténtalo de nuevo más tarde.</translation>
-+        <translation>Otro cliente ya se está autenticando, inténtelo de nuevo más tarde.</translation>
-     </message>
-     <message>
-+        <location filename="../src/PolkitListener.cpp" line="257"/>
-         <source>Authentication failure, please try again.</source>
--        <translation>Fallo de autenticación, por favor intente de nuevo.</translation>
-+        <translation>Error de autenticación, inténtelo de nuevo.</translation>
-     </message>
-     <message>
-+        <location filename="../src/PolkitListener.cpp" line="264"/>
-         <source>Password input error!</source>
--        <translation type="unfinished"></translation>
-+        <translation>¡Error de entrada de contraseña!</translation>
-+    </message>
-+    <message>
-+        <source>Account locked %1 minutes due to %2 fail attempts</source>
-+        <translation type="vanished">账户锁定%1分钟由于%2次错误尝试</translation>
-+    </message>
-+    <message>
-+        <source>Authentication failure,there are still %1 remaining opportunities</source>
-+        <translation type="vanished">认证失败,还剩余%1次尝试机会</translation>
-     </message>
- </context>
- <context>
-     <name>QObject</name>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="obsolete">指纹</translation>
-+    </message>
-+    <message>
-+        <source>FingerVein</source>
-+        <translation type="obsolete">指静脉</translation>
-+    </message>
-+    <message>
-+        <source>Iris</source>
-+        <translation type="obsolete">虹膜</translation>
-+    </message>
-+    <message>
-+        <source>Face</source>
-+        <translation type="obsolete">人脸</translation>
-+    </message>
-+    <message>
-+        <source>VoicePrint</source>
-+        <translation type="obsolete">声纹</translation>
-+    </message>
-     <message>
-         <source>Cancel</source>
--        <translation type="obsolete">Cancelar</translation>
-+        <translation type="obsolete">取消</translation>
-     </message>
- </context>
- </TS>
-diff --git a/polkit-agent/i18n_ts/fr.ts b/polkit-agent/i18n_ts/fr.ts
-index 87ca0d5..6ac2c2b 100644
---- a/polkit-agent/i18n_ts/fr.ts
-+++ b/polkit-agent/i18n_ts/fr.ts
-@@ -4,208 +4,418 @@
- <context>
-     <name>BioAuthWidget</name>
-     <message>
--        <source>Form</source>
--        <translation type="obsolete">Forme</translation>
-+        <source>Retry</source>
-+        <translation type="obsolete">重试</translation>
-+    </message>
-+    <message>
-+        <source>%1 too many unsuccessful attempts,please enter password.</source>
-+        <translation type="obsolete">%1验证失败达最大次数,请使用密码登录</translation>
-+    </message>
-+    <message>
-+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
-+        <translation type="obsolete">%1认证失败,还剩%2次尝试机会</translation>
-+    </message>
-+    <message>
-+        <source>Please use wechat to scan the code</source>
-+        <translation type="vanished">请使用微信扫码</translation>
-     </message>
- </context>
- <context>
--    <name>BioDevicesWidget</name>
-+    <name>BioDevices</name>
-     <message>
--        <source>Form</source>
--        <translation type="obsolete">Forme</translation>
-+        <source>FingerPrint</source>
-+        <translation type="obsolete">指纹</translation>
-+    </message>
-+    <message>
-+        <source>FingerVein</source>
-+        <translation type="obsolete">指静脉</translation>
-+    </message>
-+    <message>
-+        <source>Iris</source>
-+        <translation type="obsolete">虹膜</translation>
-+    </message>
-+    <message>
-+        <source>Face</source>
-+        <translation type="obsolete">人脸</translation>
-+    </message>
-+    <message>
-+        <source>VoicePrint</source>
-+        <translation type="obsolete">声纹</translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+    <message>
-+        <source>QRCode</source>
-+        <translation type="vanished">二维码</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>LoginOptionsWidget</name>
-+    <message>
-+        <source>Login Options</source>
-+        <translation type="vanished">登录选项</translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-     </message>
- </context>
- <context>
-     <name>MainWindow</name>
-     <message>
-+        <location filename="../src/mainwindow.cpp" line="65"/>
-+        <source>Authentication</source>
-+        <translation>Authentification</translation>
-+    </message>
-+    <message>
-+        <source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
-+        <translation type="vanished">指纹验证失败,您还有%1次尝试机会</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="26"/>
-         <source>Form</source>
--        <translation>Forme</translation>
-+        <translation></translation>
-+    </message>
-+    <message>
-+        <source>More</source>
-+        <translation type="obsolete">更多</translation>
-+    </message>
-+    <message>
-+        <source>Restart</source>
-+        <translation type="obsolete">重新开始</translation>
-+    </message>
-+    <message>
-+        <source>Password</source>
-+        <translation type="vanished">密码</translation>
-     </message>
-     <message>
-+        <location filename="../src/mainwindow.ui" line="302"/>
-+        <location filename="../src/mainwindow.cpp" line="882"/>
-+        <location filename="../src/mainwindow.cpp" line="948"/>
-         <source>Biometric</source>
-         <translation>Biométrique</translation>
-     </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="373"/>
-+        <source>use password</source>
-+        <translation>Utiliser le mot de passe</translation>
-+    </message>
-+    <message>
-+        <source>DeviceType:</source>
-+        <translation type="obsolete">设备类型:</translation>
-+    </message>
-+    <message>
-+        <source>Back</source>
-+        <translation type="obsolete">返回</translation>
-+    </message>
-     <message>
-         <source>Details</source>
--        <translation type="vanished">Détails</translation>
-+        <translation type="vanished">详细</translation>
-+    </message>
-+    <message>
-+        <source>Action Id:</source>
-+        <translation type="obsolete">动作:</translation>
-+    </message>
-+    <message>
-+        <source>Description:</source>
-+        <translation type="vanished">描述:</translation>
-     </message>
-     <message>
-         <source>Polkit.subject-pid:</source>
--        <translation type="vanished">Polkit.subject-pid:</translation>
-+        <translation type="vanished">Polkit.subject-pid:</translation>
-     </message>
-     <message>
--        <source>Vendor:</source>
--        <translation type="vanished">Vendeur:</translation>
-+        <source>Retry</source>
-+        <translation type="obsolete">重试</translation>
-     </message>
-     <message>
--        <source>Description:</source>
--        <translation type="vanished">La description:</translation>
-+        <source>Device types:</source>
-+        <translation type="obsolete">设备类型:</translation>
-     </message>
-     <message>
--        <source>Polkit.caller-pid:</source>
--        <translation type="vanished">Polkit.caller-pid:</translation>
-+        <source>Vendor:</source>
-+        <translation type="vanished">发行商:</translation>
-     </message>
-     <message>
-         <source>Action:</source>
--        <translation type="vanished">Action:</translation>
-+        <translation type="vanished">动作:</translation>
-+    </message>
-+    <message>
-+        <source>Polkit.caller-pid:</source>
-+        <translation type="vanished">Polkit.caller-pid:</translation>
-     </message>
-     <message>
-+        <location filename="../src/mainwindow.ui" line="334"/>
-+        <location filename="../src/mainwindow.cpp" line="884"/>
-         <source>Cancel</source>
-         <translation>Annuler</translation>
-     </message>
-     <message>
-+        <location filename="../src/mainwindow.ui" line="353"/>
-+        <location filename="../src/mainwindow.cpp" line="880"/>
-         <source>Authenticate</source>
-         <translation>Authentifier</translation>
-     </message>
-     <message>
--        <source>Authentication</source>
--        <translation>Authentification</translation>
-+        <location filename="../src/mainwindow.cpp" line="886"/>
-+        <location filename="../src/mainwindow.cpp" line="991"/>
-+        <source>Use password</source>
-+        <translation>Utiliser le mot de passe</translation>
-+    </message>
-+    <message>
-+        <source>Auth</source>
-+        <translation type="obsolete">授权</translation>
-+    </message>
-+    <message>
-+        <source>Too many unsuccessful attempts,please enter password.</source>
-+        <translation type="vanished">指纹验证失败达最大次数,请使用密码解锁</translation>
-+    </message>
-+    <message>
-+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
-+        <translation type="vanished">%1认证失败,还剩%2次尝试机会</translation>
-+    </message>
-+    <message>
-+        <source>%1 too many unsuccessful attempts,please enter password.</source>
-+        <translation type="vanished">%1验证失败达最大次数,请使用密码登录</translation>
-     </message>
-     <message>
-         <source>in authentication, please wait...</source>
--        <translation type="vanished">en cours d&apos;authentification, veuillez patienter ...</translation>
-+        <translation type="vanished">认证中,请稍等...</translation>
-     </message>
-     <message>
--        <source>An application is attempting to perform an action that requires privileges. Authentication is required to perform this action.</source>
--        <translation type="vanished">Une application tente d&apos;exécuter une action nécessitant des privilèges. Une authentification est requise pour effectuer cette action.</translation>
-+        <location filename="../src/mainwindow.cpp" line="1026"/>
-+        <location filename="../src/mainwindow.cpp" line="1093"/>
-+        <location filename="../src/mainwindow.cpp" line="1094"/>
-+        <source>Please try again in %1 minutes.</source>
-+        <translation>Veuillez réessayer dans %1 minutes.</translation>
-     </message>
-     <message>
--        <source>Password: </source>
--        <translation>Mot de passe: </translation>
-+        <location filename="../src/mainwindow.cpp" line="1036"/>
-+        <location filename="../src/mainwindow.cpp" line="1103"/>
-+        <location filename="../src/mainwindow.cpp" line="1104"/>
-+        <source>Please try again in %1 seconds.</source>
-+        <translation>Veuillez réessayer dans %1 secondes.</translation>
-     </message>
-     <message>
--        <source>Authentication failed, please try again.</source>
--        <translation>Authentification échouée. Veuillez réessayer.</translation>
-+        <location filename="../src/mainwindow.cpp" line="1045"/>
-+        <location filename="../src/mainwindow.cpp" line="1046"/>
-+        <location filename="../src/mainwindow.cpp" line="1112"/>
-+        <location filename="../src/mainwindow.cpp" line="1113"/>
-+        <source>Account locked permanently.</source>
-+        <translation>Compte verrouillé définitivement.</translation>
-     </message>
-     <message>
--        <source>Please enter your password or enroll your fingerprint </source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="675"/>
-+        <location filename="../src/mainwindow.cpp" line="676"/>
-+        <source>Password cannot be empty</source>
-+        <translation>Le mot de passe ne peut pas être vide</translation>
-     </message>
-     <message>
--        <source>use password</source>
--        <translation type="unfinished"></translation>
-+        <source>Failed to verify %1, please enter password.</source>
-+        <translation type="vanished">验证%1失败,请输入密码.</translation>
-     </message>
-     <message>
--        <source>Account locked,</source>
--        <translation type="unfinished"></translation>
-+        <source>Unable to verify %1, please enter password.</source>
-+        <translation type="vanished">无法验证%1,请输入密码.</translation>
-     </message>
-     <message>
--        <source>days left</source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="175"/>
-+        <source>Failed to verify %1, you still have %2 verification opportunities</source>
-+        <translation>Échec de la vérification %1, vous avez encore %2 possibilités de vérification</translation>
-     </message>
-     <message>
--        <source>hours left</source>
--        <translation type="unfinished"></translation>
-+        <source>An application is attempting to perform an action that requires privileges. Authentication is required to perform this action.</source>
-+        <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
-     </message>
-     <message>
--        <source>minutes left</source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="578"/>
-+        <source>Password: </source>
-+        <translation>Mot de passe: </translation>
-     </message>
-     <message>
--        <source>seconds left</source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="261"/>
-+        <source>Please enter your password or enroll your fingerprint </source>
-+        <translation>Veuillez saisir votre mot de passe ou enregistrer votre empreinte digitale </translation>
-     </message>
-     <message>
--        <source>Password cannot be empty</source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="187"/>
-+        <source>Abnormal network</source>
-+        <translation>Réseau anormal</translation>
-     </message>
-     <message>
--        <source>Use password</source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="511"/>
-+        <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
-+        <translation>Cette opération nécessite l’autorisation de l’administrateur. Veuillez saisir votre mot de passe pour autoriser cette opération.</translation>
-     </message>
-     <message>
--        <source>Please try again in %1 minutes.</source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="580"/>
-+        <source>_Password: </source>
-+        <translation>_Mot de passe: </translation>
-     </message>
-     <message>
--        <source>Please try again in %1 seconds.</source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="582"/>
-+        <source>_Password:</source>
-+        <translation>_Mot de passe:</translation>
-     </message>
-     <message>
--        <source>Account locked permanently.</source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="691"/>
-+        <source>Authentication failed, please try again.</source>
-+        <translation>L’authentification a échoué, veuillez réessayer.</translation>
-     </message>
-     <message>
--        <source>Verify face recognition or enter password to unlock</source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="623"/>
-+        <source>days left</source>
-+        <translation>jours restants</translation>
-     </message>
-     <message>
--        <source>Press fingerprint or enter password to unlock</source>
--        <translation type="unfinished"></translation>
-+        <source>Biometric/code scan authentication failed too many times, please enter the password.</source>
-+        <translation type="vanished">生物/扫码验证失败达最大次数,请使用密码解锁.</translation>
-     </message>
-     <message>
--        <source>Verify voiceprint or enter password to unlock</source>
--        <translation type="unfinished"></translation>
-+        <source>Bioauth/code scan authentication failed, you still have %1 verification opportunities</source>
-+        <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
-     </message>
-     <message>
--        <source>Verify finger vein or enter password to unlock</source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="164"/>
-+        <location filename="../src/mainwindow.cpp" line="1176"/>
-+        <source>Failed to verify %1, please enter password to unlock</source>
-+        <translation>Impossible de vérifier %1, veuillez entrer le mot de passe pour déverrouiller</translation>
-     </message>
-     <message>
--        <source>Verify iris or enter password to unlock</source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="168"/>
-+        <location filename="../src/mainwindow.cpp" line="1178"/>
-+        <source>Unable to verify %1, please enter password to unlock</source>
-+        <translation>Impossible de vérifier %1, veuillez entrer le mot de passe pour déverrouiller</translation>
-     </message>
-     <message>
--        <source>Failed to verify %1, you still have %2 verification opportunities</source>
--        <translation type="unfinished"></translation>
-+        <source>NET Exception</source>
-+        <translation type="vanished">网络异常</translation>
-     </message>
-     <message>
-+        <location filename="../src/mainwindow.cpp" line="517"/>
-+        <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
-+        <translation>Un programme tente d’effectuer une action qui nécessite des privilèges. Il nécessite une autorisation pour effectuer l’action.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="576"/>
-         <source>Input Password</source>
--        <translation type="unfinished"></translation>
-+        <translation>Mot de passe d’entrée</translation>
-     </message>
-     <message>
--        <source>Use the bound wechat scanning code or enter the password to unlock</source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="627"/>
-+        <source>hours left</source>
-+        <translation>Heures restantes</translation>
-     </message>
-     <message>
--        <source>Failed to verify %1, please enter password to unlock</source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="631"/>
-+        <source>minutes left</source>
-+        <translation>minutes restantes</translation>
-     </message>
-     <message>
--        <source>Unable to verify %1, please enter password to unlock</source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="635"/>
-+        <source>seconds left</source>
-+        <translation>secondes restantes</translation>
-     </message>
-     <message>
--        <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="1193"/>
-+        <source>Verify face recognition or enter password to unlock</source>
-+        <translation>Vérifier la reconnaissance faciale ou saisir le mot de passe pour déverrouiller</translation>
-     </message>
-     <message>
--        <source>_Password:</source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="1198"/>
-+        <source>Press fingerprint or enter password to unlock</source>
-+        <translation>Appuyez sur l’empreinte digitale ou entrez le mot de passe pour déverrouiller</translation>
-     </message>
-     <message>
--        <source>_Password: </source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="1203"/>
-+        <source>Verify voiceprint or enter password to unlock</source>
-+        <translation>Vérifier l’empreinte vocale ou saisir le mot de passe pour déverrouiller</translation>
-     </message>
-     <message>
--        <source>Abnormal network</source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="1208"/>
-+        <source>Verify finger vein or enter password to unlock</source>
-+        <translation>Vérifiez la veine du doigt ou entrez le mot de passe pour déverrouiller</translation>
-     </message>
-     <message>
--        <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
--        <translation type="unfinished"></translation>
-+        <location filename="../src/mainwindow.cpp" line="1213"/>
-+        <source>Verify iris or enter password to unlock</source>
-+        <translation>Vérifiez l’iris ou entrez le mot de passe pour déverrouiller</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1218"/>
-+        <source>Use the bound wechat scanning code or enter the password to unlock</source>
-+        <translation>Utilisez le code d’analyse wechat lié ou entrez le mot de passe pour déverrouiller</translation>
-+    </message>
-+    <message>
-+        <source>Use the bound wechat scanning code or enter the password to log in</source>
-+        <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="623"/>
-+        <location filename="../src/mainwindow.cpp" line="627"/>
-+        <location filename="../src/mainwindow.cpp" line="631"/>
-+        <location filename="../src/mainwindow.cpp" line="635"/>
-+        <source>Account locked,</source>
-+        <translation>Compte verrouillé,</translation>
-+    </message>
-+    <message>
-+        <source>Authentication failed, please try again</source>
-+        <translation type="obsolete">认证失败,请重试</translation>
-     </message>
- </context>
- <context>
-     <name>PolkitListener</name>
-     <message>
-+        <location filename="../src/PolkitListener.cpp" line="88"/>
-         <source>Another client is already authenticating, please try again later.</source>
--        <translation>Un autre client s&apos;authentifie déjà. Veuillez réessayer ultérieurement.</translation>
-+        <translation>Un autre client est déjà en train de s’authentifier, veuillez réessayer plus tard.</translation>
-     </message>
-     <message>
-+        <location filename="../src/PolkitListener.cpp" line="257"/>
-         <source>Authentication failure, please try again.</source>
--        <translation>Échec de l&apos;authentification, veuillez réessayer.</translation>
-+        <translation>Échec de l’authentification, veuillez réessayer.</translation>
-     </message>
-     <message>
-+        <location filename="../src/PolkitListener.cpp" line="264"/>
-         <source>Password input error!</source>
--        <translation type="unfinished"></translation>
-+        <translation>Erreur de saisie du mot de passe !</translation>
-+    </message>
-+    <message>
-+        <source>Account locked %1 minutes due to %2 fail attempts</source>
-+        <translation type="vanished">账户锁定%1分钟由于%2次错误尝试</translation>
-+    </message>
-+    <message>
-+        <source>Authentication failure,there are still %1 remaining opportunities</source>
-+        <translation type="vanished">认证失败,还剩余%1次尝试机会</translation>
-     </message>
- </context>
- <context>
-     <name>QObject</name>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="obsolete">指纹</translation>
-+    </message>
-+    <message>
-+        <source>FingerVein</source>
-+        <translation type="obsolete">指静脉</translation>
-+    </message>
-+    <message>
-+        <source>Iris</source>
-+        <translation type="obsolete">虹膜</translation>
-+    </message>
-+    <message>
-+        <source>Face</source>
-+        <translation type="obsolete">人脸</translation>
-+    </message>
-+    <message>
-+        <source>VoicePrint</source>
-+        <translation type="obsolete">声纹</translation>
-+    </message>
-     <message>
-         <source>Cancel</source>
--        <translation type="obsolete">Annuler</translation>
-+        <translation type="obsolete">取消</translation>
-     </message>
- </context>
- </TS>
-diff --git a/polkit-agent/i18n_ts/kk.ts b/polkit-agent/i18n_ts/kk.ts
-new file mode 100644
-index 0000000..f2eb55e
---- /dev/null
-+++ b/polkit-agent/i18n_ts/kk.ts
-@@ -0,0 +1,421 @@
-+<?xml version="1.0" encoding="utf-8"?>
-+<!DOCTYPE TS>
-+<TS version="2.1" language="kk">
-+<context>
-+    <name>BioAuthWidget</name>
-+    <message>
-+        <source>Retry</source>
-+        <translation type="obsolete">重试</translation>
-+    </message>
-+    <message>
-+        <source>%1 too many unsuccessful attempts,please enter password.</source>
-+        <translation type="obsolete">%1验证失败达最大次数,请使用密码登录</translation>
-+    </message>
-+    <message>
-+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
-+        <translation type="obsolete">%1认证失败,还剩%2次尝试机会</translation>
-+    </message>
-+    <message>
-+        <source>Please use wechat to scan the code</source>
-+        <translation type="vanished">请使用微信扫码</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>BioDevices</name>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="obsolete">指纹</translation>
-+    </message>
-+    <message>
-+        <source>FingerVein</source>
-+        <translation type="obsolete">指静脉</translation>
-+    </message>
-+    <message>
-+        <source>Iris</source>
-+        <translation type="obsolete">虹膜</translation>
-+    </message>
-+    <message>
-+        <source>Face</source>
-+        <translation type="obsolete">人脸</translation>
-+    </message>
-+    <message>
-+        <source>VoicePrint</source>
-+        <translation type="obsolete">声纹</translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+    <message>
-+        <source>QRCode</source>
-+        <translation type="vanished">二维码</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>LoginOptionsWidget</name>
-+    <message>
-+        <source>Login Options</source>
-+        <translation type="vanished">登录选项</translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>MainWindow</name>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="65"/>
-+        <source>Authentication</source>
-+        <translation>Аутентификация</translation>
-+    </message>
-+    <message>
-+        <source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
-+        <translation type="vanished">指纹验证失败,您还有%1次尝试机会</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="26"/>
-+        <source>Form</source>
-+        <translation></translation>
-+    </message>
-+    <message>
-+        <source>More</source>
-+        <translation type="obsolete">更多</translation>
-+    </message>
-+    <message>
-+        <source>Restart</source>
-+        <translation type="obsolete">重新开始</translation>
-+    </message>
-+    <message>
-+        <source>Password</source>
-+        <translation type="vanished">密码</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="302"/>
-+        <location filename="../src/mainwindow.cpp" line="882"/>
-+        <location filename="../src/mainwindow.cpp" line="948"/>
-+        <source>Biometric</source>
-+        <translation>Биометриялық</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="373"/>
-+        <source>use password</source>
-+        <translation>құпия сөзді пайдалану</translation>
-+    </message>
-+    <message>
-+        <source>DeviceType:</source>
-+        <translation type="obsolete">设备类型:</translation>
-+    </message>
-+    <message>
-+        <source>Back</source>
-+        <translation type="obsolete">返回</translation>
-+    </message>
-+    <message>
-+        <source>Details</source>
-+        <translation type="vanished">详细</translation>
-+    </message>
-+    <message>
-+        <source>Action Id:</source>
-+        <translation type="obsolete">动作:</translation>
-+    </message>
-+    <message>
-+        <source>Description:</source>
-+        <translation type="vanished">描述:</translation>
-+    </message>
-+    <message>
-+        <source>Polkit.subject-pid:</source>
-+        <translation type="vanished">Polkit.subject-pid:</translation>
-+    </message>
-+    <message>
-+        <source>Retry</source>
-+        <translation type="obsolete">重试</translation>
-+    </message>
-+    <message>
-+        <source>Device types:</source>
-+        <translation type="obsolete">设备类型:</translation>
-+    </message>
-+    <message>
-+        <source>Vendor:</source>
-+        <translation type="vanished">发行商:</translation>
-+    </message>
-+    <message>
-+        <source>Action:</source>
-+        <translation type="vanished">动作:</translation>
-+    </message>
-+    <message>
-+        <source>Polkit.caller-pid:</source>
-+        <translation type="vanished">Polkit.caller-pid:</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="334"/>
-+        <location filename="../src/mainwindow.cpp" line="884"/>
-+        <source>Cancel</source>
-+        <translation>Болдырмау</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="353"/>
-+        <location filename="../src/mainwindow.cpp" line="880"/>
-+        <source>Authenticate</source>
-+        <translation>Аутентификация</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="886"/>
-+        <location filename="../src/mainwindow.cpp" line="991"/>
-+        <source>Use password</source>
-+        <translation>Құпиясөзді пайдалану</translation>
-+    </message>
-+    <message>
-+        <source>Auth</source>
-+        <translation type="obsolete">授权</translation>
-+    </message>
-+    <message>
-+        <source>Too many unsuccessful attempts,please enter password.</source>
-+        <translation type="vanished">指纹验证失败达最大次数,请使用密码解锁</translation>
-+    </message>
-+    <message>
-+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
-+        <translation type="vanished">%1认证失败,还剩%2次尝试机会</translation>
-+    </message>
-+    <message>
-+        <source>%1 too many unsuccessful attempts,please enter password.</source>
-+        <translation type="vanished">%1验证失败达最大次数,请使用密码登录</translation>
-+    </message>
-+    <message>
-+        <source>in authentication, please wait...</source>
-+        <translation type="vanished">认证中,请稍等...</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1026"/>
-+        <location filename="../src/mainwindow.cpp" line="1093"/>
-+        <location filename="../src/mainwindow.cpp" line="1094"/>
-+        <source>Please try again in %1 minutes.</source>
-+        <translation>% 1 минутта қайталап көріңіз.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1036"/>
-+        <location filename="../src/mainwindow.cpp" line="1103"/>
-+        <location filename="../src/mainwindow.cpp" line="1104"/>
-+        <source>Please try again in %1 seconds.</source>
-+        <translation>% 1 секундта қайталап көріңіз.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1045"/>
-+        <location filename="../src/mainwindow.cpp" line="1046"/>
-+        <location filename="../src/mainwindow.cpp" line="1112"/>
-+        <location filename="../src/mainwindow.cpp" line="1113"/>
-+        <source>Account locked permanently.</source>
-+        <translation>Тіркелгі біржолата құлыпталады.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="675"/>
-+        <location filename="../src/mainwindow.cpp" line="676"/>
-+        <source>Password cannot be empty</source>
-+        <translation>Құпия сөз бос болмады</translation>
-+    </message>
-+    <message>
-+        <source>Failed to verify %1, please enter password.</source>
-+        <translation type="vanished">验证%1失败,请输入密码.</translation>
-+    </message>
-+    <message>
-+        <source>Unable to verify %1, please enter password.</source>
-+        <translation type="vanished">无法验证%1,请输入密码.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="175"/>
-+        <source>Failed to verify %1, you still have %2 verification opportunities</source>
-+        <translation>% 1 дегенді тексеру мүмкін болмады, сізде әлі де% 2 тексеру мүмкіндіктері бар</translation>
-+    </message>
-+    <message>
-+        <source>An application is attempting to perform an action that requires privileges. Authentication is required to perform this action.</source>
-+        <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="578"/>
-+        <source>Password: </source>
-+        <translation>Құпия сөз: </translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="261"/>
-+        <source>Please enter your password or enroll your fingerprint </source>
-+        <translation>Құпия сөзді енгізіңіз немесе саусақ ізін жазыңыз </translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="187"/>
-+        <source>Abnormal network</source>
-+        <translation>Аномальды желі</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="511"/>
-+        <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
-+        <translation>Бұл операция әкімшінің рұқсатын талап етеді. Осы операцияға рұқсат ету үшін құпия сөзіңізді енгізіңіз.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="580"/>
-+        <source>_Password: </source>
-+        <translation>_Password: </translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="582"/>
-+        <source>_Password:</source>
-+        <translation>_Password:</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="691"/>
-+        <source>Authentication failed, please try again.</source>
-+        <translation>Аутентификация сәтсіз аяқталды, қайталап көріңіз.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="623"/>
-+        <source>days left</source>
-+        <translation>қалған күндер</translation>
-+    </message>
-+    <message>
-+        <source>Biometric/code scan authentication failed too many times, please enter the password.</source>
-+        <translation type="vanished">生物/扫码验证失败达最大次数,请使用密码解锁.</translation>
-+    </message>
-+    <message>
-+        <source>Bioauth/code scan authentication failed, you still have %1 verification opportunities</source>
-+        <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="164"/>
-+        <location filename="../src/mainwindow.cpp" line="1176"/>
-+        <source>Failed to verify %1, please enter password to unlock</source>
-+        <translation>% 1 дегенді тексеру мүмкін болмады, құлыптан босату үшін құпия сөзді енгізіңіз</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="168"/>
-+        <location filename="../src/mainwindow.cpp" line="1178"/>
-+        <source>Unable to verify %1, please enter password to unlock</source>
-+        <translation>% 1 дегенді тексеру мүмкін болмады, құлыптан босату үшін құпия сөзді енгізіңіз</translation>
-+    </message>
-+    <message>
-+        <source>NET Exception</source>
-+        <translation type="vanished">网络异常</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="517"/>
-+        <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
-+        <translation>Бағдарлама артықшылықтарды талап ететін әрекетті орындауға талпыныс жасайды. Іс-әрекетті орындау үшін рұқсат талап етуге болады.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="576"/>
-+        <source>Input Password</source>
-+        <translation>Құпиясөзді енгізу</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="627"/>
-+        <source>hours left</source>
-+        <translation>сағаттар қалды</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="631"/>
-+        <source>minutes left</source>
-+        <translation>минуттар қалды</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="635"/>
-+        <source>seconds left</source>
-+        <translation>секундтар қалды</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1193"/>
-+        <source>Verify face recognition or enter password to unlock</source>
-+        <translation>Бет тануды тексеру немесе құлыптан босату үшін құпия сөзді енгізу</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1198"/>
-+        <source>Press fingerprint or enter password to unlock</source>
-+        <translation>Құлыптан босату үшін дактилоскопияны басу немесе құпия сөзді енгізу</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1203"/>
-+        <source>Verify voiceprint or enter password to unlock</source>
-+        <translation>Құлыптан босату үшін дауыстық ізді тексеру немесе құпия сөзді енгізу</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1208"/>
-+        <source>Verify finger vein or enter password to unlock</source>
-+        <translation>Құлыптан босату үшін саусақ көктамырын тексеру немесе құпия сөзді енгізу</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1213"/>
-+        <source>Verify iris or enter password to unlock</source>
-+        <translation>Құлыптан босату үшін IRIS тексеру немесе құпиясөзді енгізу</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1218"/>
-+        <source>Use the bound wechat scanning code or enter the password to unlock</source>
-+        <translation>Байланыстыратын wechat сканерлеу кодын пайдаланыңыз немесе құлыптан босату үшін құпия сөзді енгізіңіз</translation>
-+    </message>
-+    <message>
-+        <source>Use the bound wechat scanning code or enter the password to log in</source>
-+        <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="623"/>
-+        <location filename="../src/mainwindow.cpp" line="627"/>
-+        <location filename="../src/mainwindow.cpp" line="631"/>
-+        <location filename="../src/mainwindow.cpp" line="635"/>
-+        <source>Account locked,</source>
-+        <translation>Тіркелгі құлыпталған,</translation>
-+    </message>
-+    <message>
-+        <source>Authentication failed, please try again</source>
-+        <translation type="obsolete">认证失败,请重试</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>PolkitListener</name>
-+    <message>
-+        <location filename="../src/PolkitListener.cpp" line="88"/>
-+        <source>Another client is already authenticating, please try again later.</source>
-+        <translation>Басқа клиент қазірдің өзінде аутентификацияда, кейінірек қайталап көріңіз.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/PolkitListener.cpp" line="257"/>
-+        <source>Authentication failure, please try again.</source>
-+        <translation>Аутентификация сәтсіздігі, қайталап көріңіз.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/PolkitListener.cpp" line="264"/>
-+        <source>Password input error!</source>
-+        <translation>Құпия сөзді енгізу қатесі!</translation>
-+    </message>
-+    <message>
-+        <source>Account locked %1 minutes due to %2 fail attempts</source>
-+        <translation type="vanished">账户锁定%1分钟由于%2次错误尝试</translation>
-+    </message>
-+    <message>
-+        <source>Authentication failure,there are still %1 remaining opportunities</source>
-+        <translation type="vanished">认证失败,还剩余%1次尝试机会</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>QObject</name>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="obsolete">指纹</translation>
-+    </message>
-+    <message>
-+        <source>FingerVein</source>
-+        <translation type="obsolete">指静脉</translation>
-+    </message>
-+    <message>
-+        <source>Iris</source>
-+        <translation type="obsolete">虹膜</translation>
-+    </message>
-+    <message>
-+        <source>Face</source>
-+        <translation type="obsolete">人脸</translation>
-+    </message>
-+    <message>
-+        <source>VoicePrint</source>
-+        <translation type="obsolete">声纹</translation>
-+    </message>
-+    <message>
-+        <source>Cancel</source>
-+        <translation type="obsolete">取消</translation>
-+    </message>
-+</context>
-+</TS>
-diff --git a/polkit-agent/i18n_ts/ky.ts b/polkit-agent/i18n_ts/ky.ts
-new file mode 100644
-index 0000000..a761425
---- /dev/null
-+++ b/polkit-agent/i18n_ts/ky.ts
-@@ -0,0 +1,421 @@
-+<?xml version="1.0" encoding="utf-8"?>
-+<!DOCTYPE TS>
-+<TS version="2.1" language="ky">
-+<context>
-+    <name>BioAuthWidget</name>
-+    <message>
-+        <source>Retry</source>
-+        <translation type="obsolete">重试</translation>
-+    </message>
-+    <message>
-+        <source>%1 too many unsuccessful attempts,please enter password.</source>
-+        <translation type="obsolete">%1验证失败达最大次数,请使用密码登录</translation>
-+    </message>
-+    <message>
-+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
-+        <translation type="obsolete">%1认证失败,还剩%2次尝试机会</translation>
-+    </message>
-+    <message>
-+        <source>Please use wechat to scan the code</source>
-+        <translation type="vanished">请使用微信扫码</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>BioDevices</name>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="obsolete">指纹</translation>
-+    </message>
-+    <message>
-+        <source>FingerVein</source>
-+        <translation type="obsolete">指静脉</translation>
-+    </message>
-+    <message>
-+        <source>Iris</source>
-+        <translation type="obsolete">虹膜</translation>
-+    </message>
-+    <message>
-+        <source>Face</source>
-+        <translation type="obsolete">人脸</translation>
-+    </message>
-+    <message>
-+        <source>VoicePrint</source>
-+        <translation type="obsolete">声纹</translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+    <message>
-+        <source>QRCode</source>
-+        <translation type="vanished">二维码</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>LoginOptionsWidget</name>
-+    <message>
-+        <source>Login Options</source>
-+        <translation type="vanished">登录选项</translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>MainWindow</name>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="65"/>
-+        <source>Authentication</source>
-+        <translation>Аутентификация</translation>
-+    </message>
-+    <message>
-+        <source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
-+        <translation type="vanished">指纹验证失败,您还有%1次尝试机会</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="26"/>
-+        <source>Form</source>
-+        <translation></translation>
-+    </message>
-+    <message>
-+        <source>More</source>
-+        <translation type="obsolete">更多</translation>
-+    </message>
-+    <message>
-+        <source>Restart</source>
-+        <translation type="obsolete">重新开始</translation>
-+    </message>
-+    <message>
-+        <source>Password</source>
-+        <translation type="vanished">密码</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="302"/>
-+        <location filename="../src/mainwindow.cpp" line="882"/>
-+        <location filename="../src/mainwindow.cpp" line="948"/>
-+        <source>Biometric</source>
-+        <translation>Биометрия</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="373"/>
-+        <source>use password</source>
-+        <translation>сырсөз колдонуу</translation>
-+    </message>
-+    <message>
-+        <source>DeviceType:</source>
-+        <translation type="obsolete">设备类型:</translation>
-+    </message>
-+    <message>
-+        <source>Back</source>
-+        <translation type="obsolete">返回</translation>
-+    </message>
-+    <message>
-+        <source>Details</source>
-+        <translation type="vanished">详细</translation>
-+    </message>
-+    <message>
-+        <source>Action Id:</source>
-+        <translation type="obsolete">动作:</translation>
-+    </message>
-+    <message>
-+        <source>Description:</source>
-+        <translation type="vanished">描述:</translation>
-+    </message>
-+    <message>
-+        <source>Polkit.subject-pid:</source>
-+        <translation type="vanished">Polkit.subject-pid:</translation>
-+    </message>
-+    <message>
-+        <source>Retry</source>
-+        <translation type="obsolete">重试</translation>
-+    </message>
-+    <message>
-+        <source>Device types:</source>
-+        <translation type="obsolete">设备类型:</translation>
-+    </message>
-+    <message>
-+        <source>Vendor:</source>
-+        <translation type="vanished">发行商:</translation>
-+    </message>
-+    <message>
-+        <source>Action:</source>
-+        <translation type="vanished">动作:</translation>
-+    </message>
-+    <message>
-+        <source>Polkit.caller-pid:</source>
-+        <translation type="vanished">Polkit.caller-pid:</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="334"/>
-+        <location filename="../src/mainwindow.cpp" line="884"/>
-+        <source>Cancel</source>
-+        <translation>Жокко чыгаруу</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="353"/>
-+        <location filename="../src/mainwindow.cpp" line="880"/>
-+        <source>Authenticate</source>
-+        <translation>Аутентификация</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="886"/>
-+        <location filename="../src/mainwindow.cpp" line="991"/>
-+        <source>Use password</source>
-+        <translation>Сырсөз колдонуу</translation>
-+    </message>
-+    <message>
-+        <source>Auth</source>
-+        <translation type="obsolete">授权</translation>
-+    </message>
-+    <message>
-+        <source>Too many unsuccessful attempts,please enter password.</source>
-+        <translation type="vanished">指纹验证失败达最大次数,请使用密码解锁</translation>
-+    </message>
-+    <message>
-+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
-+        <translation type="vanished">%1认证失败,还剩%2次尝试机会</translation>
-+    </message>
-+    <message>
-+        <source>%1 too many unsuccessful attempts,please enter password.</source>
-+        <translation type="vanished">%1验证失败达最大次数,请使用密码登录</translation>
-+    </message>
-+    <message>
-+        <source>in authentication, please wait...</source>
-+        <translation type="vanished">认证中,请稍等...</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1026"/>
-+        <location filename="../src/mainwindow.cpp" line="1093"/>
-+        <location filename="../src/mainwindow.cpp" line="1094"/>
-+        <source>Please try again in %1 minutes.</source>
-+        <translation>%1 мүнөттө кайра аракет кылыңыз.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1036"/>
-+        <location filename="../src/mainwindow.cpp" line="1103"/>
-+        <location filename="../src/mainwindow.cpp" line="1104"/>
-+        <source>Please try again in %1 seconds.</source>
-+        <translation>%1 секунданын ичинде кайра аракет кылыңыз.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1045"/>
-+        <location filename="../src/mainwindow.cpp" line="1046"/>
-+        <location filename="../src/mainwindow.cpp" line="1112"/>
-+        <location filename="../src/mainwindow.cpp" line="1113"/>
-+        <source>Account locked permanently.</source>
-+        <translation>Эсеп биротоло кулпуланган.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="675"/>
-+        <location filename="../src/mainwindow.cpp" line="676"/>
-+        <source>Password cannot be empty</source>
-+        <translation>Сырсөз бош болушу мүмкүн эмес</translation>
-+    </message>
-+    <message>
-+        <source>Failed to verify %1, please enter password.</source>
-+        <translation type="vanished">验证%1失败,请输入密码.</translation>
-+    </message>
-+    <message>
-+        <source>Unable to verify %1, please enter password.</source>
-+        <translation type="vanished">无法验证%1,请输入密码.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="175"/>
-+        <source>Failed to verify %1, you still have %2 verification opportunities</source>
-+        <translation>%1 текшерүүгө болбоду, сизде дагы эле %2 текшерүү мүмкүнчүлүктөрү бар</translation>
-+    </message>
-+    <message>
-+        <source>An application is attempting to perform an action that requires privileges. Authentication is required to perform this action.</source>
-+        <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="578"/>
-+        <source>Password: </source>
-+        <translation>Сырсөз: </translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="261"/>
-+        <source>Please enter your password or enroll your fingerprint </source>
-+        <translation>Сырсөзүңөрдү киргизиңиз же манжа изин жазыңыз </translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="187"/>
-+        <source>Abnormal network</source>
-+        <translation>Аномалдуу тармак</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="511"/>
-+        <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
-+        <translation>Бул операция администратордун уруксатын талап кылат. Бул операцияга уруксат берүү үчүн сырсөздү киргизиңиз.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="580"/>
-+        <source>_Password: </source>
-+        <translation>_Password: </translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="582"/>
-+        <source>_Password:</source>
-+        <translation>_Password:</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="691"/>
-+        <source>Authentication failed, please try again.</source>
-+        <translation>Аутентификация ишке ашпады, кайра аракет кылыңыз.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="623"/>
-+        <source>days left</source>
-+        <translation>калган күндөр</translation>
-+    </message>
-+    <message>
-+        <source>Biometric/code scan authentication failed too many times, please enter the password.</source>
-+        <translation type="vanished">生物/扫码验证失败达最大次数,请使用密码解锁.</translation>
-+    </message>
-+    <message>
-+        <source>Bioauth/code scan authentication failed, you still have %1 verification opportunities</source>
-+        <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="164"/>
-+        <location filename="../src/mainwindow.cpp" line="1176"/>
-+        <source>Failed to verify %1, please enter password to unlock</source>
-+        <translation>%1 текшерүүгө болбоду, кулпусун ачуу үчүн сырсөздү киргизиңиз</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="168"/>
-+        <location filename="../src/mainwindow.cpp" line="1178"/>
-+        <source>Unable to verify %1, please enter password to unlock</source>
-+        <translation>%1 текшерүүгө болбоду, кулпусун ачуу үчүн сырсөздү киргизиңиз</translation>
-+    </message>
-+    <message>
-+        <source>NET Exception</source>
-+        <translation type="vanished">网络异常</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="517"/>
-+        <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
-+        <translation>Программа артыкчылыктарды талап кылган акцияны аткарууга аракет кылат. Акцияны аткарууга уруксат талап кылынат.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="576"/>
-+        <source>Input Password</source>
-+        <translation>Сырсөз киргизүү</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="627"/>
-+        <source>hours left</source>
-+        <translation>саат калды</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="631"/>
-+        <source>minutes left</source>
-+        <translation>мүнөт калды</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="635"/>
-+        <source>seconds left</source>
-+        <translation>секуд калды</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1193"/>
-+        <source>Verify face recognition or enter password to unlock</source>
-+        <translation>Беттин таанылышын текшерүү же кулпуну ачуу үчүн сырсөз киргизүү</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1198"/>
-+        <source>Press fingerprint or enter password to unlock</source>
-+        <translation>Манжа изин басуу же кулпуну ачуу үчүн сырсөз киргизүү</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1203"/>
-+        <source>Verify voiceprint or enter password to unlock</source>
-+        <translation>Үн изин текшерүү же сырсөз киргизүү</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1208"/>
-+        <source>Verify finger vein or enter password to unlock</source>
-+        <translation>Манжа тамырын текшерүү же кулпуну ачуу үчүн сырсөз киргизүү</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1213"/>
-+        <source>Verify iris or enter password to unlock</source>
-+        <translation>Ирис текшерүү же кулпусун ачуу үчүн сырсөз киргизүү</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1218"/>
-+        <source>Use the bound wechat scanning code or enter the password to unlock</source>
-+        <translation>Чектелген вечат сканерлеу кодын колдонуңуз же сырсөздү ачуу үчүн киргизиңиз</translation>
-+    </message>
-+    <message>
-+        <source>Use the bound wechat scanning code or enter the password to log in</source>
-+        <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="623"/>
-+        <location filename="../src/mainwindow.cpp" line="627"/>
-+        <location filename="../src/mainwindow.cpp" line="631"/>
-+        <location filename="../src/mainwindow.cpp" line="635"/>
-+        <source>Account locked,</source>
-+        <translation>Эсеп кулпуланган,</translation>
-+    </message>
-+    <message>
-+        <source>Authentication failed, please try again</source>
-+        <translation type="obsolete">认证失败,请重试</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>PolkitListener</name>
-+    <message>
-+        <location filename="../src/PolkitListener.cpp" line="88"/>
-+        <source>Another client is already authenticating, please try again later.</source>
-+        <translation>Дагы бир кардар буга чейин аутентификацияланган, кийин кайра аракет кылыңыз.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/PolkitListener.cpp" line="257"/>
-+        <source>Authentication failure, please try again.</source>
-+        <translation>Аутентификациянын жетишсиздиги, сураныч, кайрадан аракет кылыңыз.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/PolkitListener.cpp" line="264"/>
-+        <source>Password input error!</source>
-+        <translation>Сырсөз киргизүү катасы!</translation>
-+    </message>
-+    <message>
-+        <source>Account locked %1 minutes due to %2 fail attempts</source>
-+        <translation type="vanished">账户锁定%1分钟由于%2次错误尝试</translation>
-+    </message>
-+    <message>
-+        <source>Authentication failure,there are still %1 remaining opportunities</source>
-+        <translation type="vanished">认证失败,还剩余%1次尝试机会</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>QObject</name>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="obsolete">指纹</translation>
-+    </message>
-+    <message>
-+        <source>FingerVein</source>
-+        <translation type="obsolete">指静脉</translation>
-+    </message>
-+    <message>
-+        <source>Iris</source>
-+        <translation type="obsolete">虹膜</translation>
-+    </message>
-+    <message>
-+        <source>Face</source>
-+        <translation type="obsolete">人脸</translation>
-+    </message>
-+    <message>
-+        <source>VoicePrint</source>
-+        <translation type="obsolete">声纹</translation>
-+    </message>
-+    <message>
-+        <source>Cancel</source>
-+        <translation type="obsolete">取消</translation>
-+    </message>
-+</context>
-+</TS>
-diff --git a/polkit-agent/i18n_ts/mn.ts b/polkit-agent/i18n_ts/mn.ts
-new file mode 100644
-index 0000000..ddf8371
---- /dev/null
-+++ b/polkit-agent/i18n_ts/mn.ts
-@@ -0,0 +1,441 @@
-+<?xml version="1.0" encoding="utf-8"?>
-+<!DOCTYPE TS>
-+<TS version="2.1" language="mn">
-+<context>
-+    <name>BioAuthWidget</name>
-+    <message>
-+        <source>Retry</source>
-+        <translation type="obsolete">重试</translation>
-+    </message>
-+    <message>
-+        <source>%1 too many unsuccessful attempts,please enter password.</source>
-+        <translation type="obsolete">%1验证失败达最大次数,请使用密码登录</translation>
-+    </message>
-+    <message>
-+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
-+        <translation type="obsolete">%1认证失败,还剩%2次尝试机会</translation>
-+    </message>
-+    <message>
-+        <source>Please use wechat to scan the code</source>
-+        <translation type="vanished">请使用微信扫码</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>BioDevices</name>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="obsolete">指纹</translation>
-+    </message>
-+    <message>
-+        <source>FingerVein</source>
-+        <translation type="obsolete">指静脉</translation>
-+    </message>
-+    <message>
-+        <source>Iris</source>
-+        <translation type="obsolete">虹膜</translation>
-+    </message>
-+    <message>
-+        <source>Face</source>
-+        <translation type="obsolete">人脸</translation>
-+    </message>
-+    <message>
-+        <source>VoicePrint</source>
-+        <translation type="obsolete">声纹</translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+    <message>
-+        <source>QRCode</source>
-+        <translation type="vanished">二维码</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>LoginOptionsWidget</name>
-+    <message>
-+        <source>Login Options</source>
-+        <translation type="vanished">登录选项</translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>MainWindow</name>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="65"/>
-+        <source>Authentication</source>
-+        <translation>ᠡᠷᠬᠡ ᠤᠯᠭᠤᠬᠤ</translation>
-+    </message>
-+    <message>
-+        <source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
-+        <translation type="vanished">指纹验证失败,您还有%1次尝试机会</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="26"/>
-+        <source>Form</source>
-+        <translation></translation>
-+    </message>
-+    <message>
-+        <source>More</source>
-+        <translation type="obsolete">更多</translation>
-+    </message>
-+    <message>
-+        <source>Restart</source>
-+        <translation type="obsolete">重新开始</translation>
-+    </message>
-+    <message>
-+        <source>Password</source>
-+        <translation type="vanished">密码</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="409"/>
-+        <location filename="../src/mainwindow.cpp" line="1075"/>
-+        <location filename="../src/mainwindow.cpp" line="1146"/>
-+        <source>Biometric</source>
-+        <translation>ᠠᠮᠢᠳᠤ ᠪᠤᠳᠠᠰ ᠢ᠋ ᠬᠡᠷᠡᠭᠯᠡᠵᠤ ᠢᠯᠭᠠᠨ ᠳᠠᠨᠢᠬᠤ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="480"/>
-+        <source>use password</source>
-+        <translation>ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠭᠰᠠᠨ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠢ᠋ ᠬᠡᠷᠡᠭᠯᠡᠬᠦ</translation>
-+    </message>
-+    <message>
-+        <source>DeviceType:</source>
-+        <translation type="obsolete">设备类型:</translation>
-+    </message>
-+    <message>
-+        <source>Back</source>
-+        <translation type="obsolete">返回</translation>
-+    </message>
-+    <message>
-+        <source>Details</source>
-+        <translation type="vanished">详细</translation>
-+    </message>
-+    <message>
-+        <source>Action Id:</source>
-+        <translation type="obsolete">动作:</translation>
-+    </message>
-+    <message>
-+        <source>Description:</source>
-+        <translation type="vanished">描述:</translation>
-+    </message>
-+    <message>
-+        <source>Polkit.subject-pid:</source>
-+        <translation type="vanished">Polkit.subject-pid:</translation>
-+    </message>
-+    <message>
-+        <source>Retry</source>
-+        <translation type="obsolete">重试</translation>
-+    </message>
-+    <message>
-+        <source>Device types:</source>
-+        <translation type="obsolete">设备类型:</translation>
-+    </message>
-+    <message>
-+        <source>Vendor:</source>
-+        <translation type="vanished">发行商:</translation>
-+    </message>
-+    <message>
-+        <source>Action:</source>
-+        <translation type="vanished">动作:</translation>
-+    </message>
-+    <message>
-+        <source>Polkit.caller-pid:</source>
-+        <translation type="vanished">Polkit.caller-pid:</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="441"/>
-+        <location filename="../src/mainwindow.cpp" line="1077"/>
-+        <source>Cancel</source>
-+        <translation>ᠦᠬᠡᠢᠰᠭᠡᠬᠦ᠌</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="460"/>
-+        <location filename="../src/mainwindow.cpp" line="1073"/>
-+        <source>Authenticate</source>
-+        <translation>ᠡᠷᠬᠡ ᠤᠯᠭᠤᠬᠤ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1079"/>
-+        <location filename="../src/mainwindow.cpp" line="1189"/>
-+        <source>Use password</source>
-+        <translation>ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠭᠰᠠᠨ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠢ᠋ ᠬᠡᠷᠡᠭᠯᠡᠬᠦ</translation>
-+    </message>
-+    <message>
-+        <source>Auth</source>
-+        <translation type="obsolete">授权</translation>
-+    </message>
-+    <message>
-+        <source>Too many unsuccessful attempts,please enter password.</source>
-+        <translation type="vanished">指纹验证失败达最大次数,请使用密码解锁</translation>
-+    </message>
-+    <message>
-+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
-+        <translation type="vanished">%1认证失败,还剩%2次尝试机会</translation>
-+    </message>
-+    <message>
-+        <source>%1 too many unsuccessful attempts,please enter password.</source>
-+        <translation type="vanished">%1验证失败达最大次数,请使用密码登录</translation>
-+    </message>
-+    <message>
-+        <source>in authentication, please wait...</source>
-+        <translation type="vanished">认证中,请稍等...</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1225"/>
-+        <location filename="../src/mainwindow.cpp" line="1298"/>
-+        <location filename="../src/mainwindow.cpp" line="1299"/>
-+        <source>Please try again in %1 minutes.</source>
-+        <translation>%1 ᠮᠢᠨᠦ᠋ᠲ᠎ᠦᠨ ᠳᠠᠷᠠᠭ᠎ᠠ ᠳᠠᠬᠢᠵᠤ ᠳᠤᠷᠱᠢᠭᠠᠷᠠᠢ.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1236"/>
-+        <location filename="../src/mainwindow.cpp" line="1308"/>
-+        <location filename="../src/mainwindow.cpp" line="1309"/>
-+        <source>Please try again in %1 seconds.</source>
-+        <translation>%1 ᠮᠢᠨᠦ᠋ᠲ᠎ᠦᠨ ᠳᠠᠷᠠᠭ᠎ᠠ ᠳᠠᠬᠢᠵᠤ ᠳᠤᠷᠱᠢᠭᠠᠷᠠᠢ.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1246"/>
-+        <location filename="../src/mainwindow.cpp" line="1247"/>
-+        <location filename="../src/mainwindow.cpp" line="1317"/>
-+        <location filename="../src/mainwindow.cpp" line="1318"/>
-+        <source>Account locked permanently.</source>
-+        <translation>ᠳᠠᠩᠰᠠ ᠨᠢᠭᠡᠨᠳᠡ ᠦᠨᠢᠳᠡ ᠤᠨᠢᠰᠤᠯᠠᠭᠳᠠᠪᠠ.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="834"/>
-+        <location filename="../src/mainwindow.cpp" line="835"/>
-+        <source>Password cannot be empty</source>
-+        <translation>ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠬᠤᠭᠤᠰᠤᠨ ᠪᠠᠢᠵᠤ ᠪᠤᠯᠬᠤ ᠦᠬᠡᠢ</translation>
-+    </message>
-+    <message>
-+        <source>Failed to verify %1, please enter password.</source>
-+        <translation type="vanished">验证%1失败,请输入密码.</translation>
-+    </message>
-+    <message>
-+        <source>Unable to verify %1, please enter password.</source>
-+        <translation type="vanished">无法验证%1,请输入密码.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="242"/>
-+        <location filename="../src/mainwindow.cpp" line="246"/>
-+        <source>Failed to verify %1, you still have %2 verification opportunities</source>
-+        <translation>%1᠎ᠶᠢᠨ/᠎ᠦᠨ ᠰᠢᠯᠭᠠᠨ ᠪᠠᠢᠴᠠᠭᠠᠯᠳᠠ ᠢᠯᠠᠭᠳᠠᠪᠠ ᠂ ᠲᠠ ᠪᠠᠰᠠ%2 ᠤᠳᠠᠭᠠᠨ᠎ᠤ ᠳᠤᠷᠱᠢᠬᠤ ᠵᠠᠪᠱᠢᠶᠠᠨ ᠲᠠᠢ</translation>
-+    </message>
-+    <message>
-+        <source>An application is attempting to perform an action that requires privileges. Authentication is required to perform this action.</source>
-+        <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="731"/>
-+        <source>Password: </source>
-+        <translation>ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋᠄ </translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="335"/>
-+        <source>Please enter your password or enroll your fingerprint </source>
-+        <translation>ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠪᠤᠶᠤ ᠬᠤᠷᠤᠭᠤᠨ ᠤ᠋ ᠤᠷᠤᠮ ᠵᠢᠨᠨ ᠤᠷᠤᠭᠤᠯᠤᠭᠠᠷᠠᠢ </translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="259"/>
-+        <source>Abnormal network</source>
-+        <translation>ᠲᠤᠷ ᠰᠦᠯᠵᠢᠶ᠎ᠡ ᠬᠡᠪ ᠤ᠋ᠨ ᠪᠤᠰᠤ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="665"/>
-+        <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
-+        <translation>ᠳᠤᠰ ᠤᠳᠠᠭᠠᠨ ᠤ᠋ ᠠᠵᠢᠯᠯᠠᠬᠤᠢ ᠵᠢᠨ ᠬᠠᠮᠢᠶᠠᠷᠤᠭᠴᠢ ᠵᠢᠨ ᠡᠷᠬᠡ ᠤᠯᠭᠤᠯᠳᠠ ᠪᠡᠷ ᠰᠠᠶᠢ ᠦᠷᠬᠦᠯᠵᠢᠯᠡᠨ ᠬᠡᠷᠡᠭᠵᠢᠬᠦᠯᠦᠨ᠎ᠡ᠂ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠵᠢᠨᠨ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠳᠤᠰ ᠠᠵᠢᠯᠯᠠᠬᠤᠢ ᠵᠢ ᠵᠦᠪᠰᠢᠶᠡᠷᠡᠭᠡᠷᠡᠢ.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="733"/>
-+        <source>_Password: </source>
-+        <translation>ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋: </translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="735"/>
-+        <source>_Password:</source>
-+        <translation>ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋:</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="850"/>
-+        <source>Authentication failed, please try again.</source>
-+        <translation>ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠵᠤ ᠴᠢᠳᠠᠭᠰᠠᠨ ᠦᠬᠡᠢ᠂ ᠳᠠᠬᠢᠵᠤ ᠳᠤᠷᠰᠢᠭᠠᠷᠠᠢ.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="779"/>
-+        <source>days left</source>
-+        <translation>ᠡᠳᠦᠷ ᠤ᠋ᠨ ᠳᠠᠷᠠᠭ᠎ᠠ ᠤᠨᠢᠰᠤ ᠳᠠᠢᠯᠤᠨ᠎ᠠ</translation>
-+    </message>
-+    <message>
-+        <source>Biometric/code scan authentication failed too many times, please enter the password.</source>
-+        <translation type="vanished">生物/扫码验证失败达最大次数,请使用密码解锁.</translation>
-+    </message>
-+    <message>
-+        <source>Bioauth/code scan authentication failed, you still have %1 verification opportunities</source>
-+        <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="226"/>
-+        <location filename="../src/mainwindow.cpp" line="1421"/>
-+        <location filename="../src/mainwindow.cpp" line="1423"/>
-+        <source>Failed to verify %1, please enter password to unlock</source>
-+        <translation>%1᠎ᠶᠢ/᠎ᠢ ᠪᠠᠳᠤᠯᠭᠠᠵᠢᠭᠤᠯᠬᠤ ᠠᠷᠭ᠎ᠠ ᠦᠬᠡᠢ ᠂ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="231"/>
-+        <location filename="../src/mainwindow.cpp" line="233"/>
-+        <location filename="../src/mainwindow.cpp" line="1425"/>
-+        <source>Unable to verify %1, please enter password to unlock</source>
-+        <translation>%1᠎ᠶᠢ/᠎ᠢ ᠪᠠᠳᠤᠯᠭᠠᠵᠢᠭᠤᠯᠬᠤ ᠠᠷᠭ᠎ᠠ ᠦᠬᠡᠢ ᠂ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
-+    </message>
-+    <message>
-+        <source>NET Exception</source>
-+        <translation type="vanished">网络异常</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="671"/>
-+        <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
-+        <translation>ᠨᠢᠭᠡ ᠫᠡᠷᠦᠭᠷᠡᠮ ᠶᠠᠭ ᠨᠢᠭᠡ ᠤᠨᠠᠴᠠ ᠡᠷᠬᠡ ᠬᠡᠷᠡᠭᠰᠡᠬᠦ ᠬᠦᠳᠡᠯᠬᠡᠬᠡᠨ ᠢ᠋ ᠬᠡᠷᠡᠭᠵᠢᠬᠦᠯᠬᠦ ᠪᠡᠷ ᠳᠤᠷᠰᠢᠵᠤ ᠪᠠᠢᠨ᠎ᠠ᠂ ᠳᠤᠰ ᠬᠦᠳᠡᠯᠬᠡᠬᠡᠨ ᠢ᠋ ᠬᠦᠢᠴᠡᠳᠬᠡᠬᠦ ᠡᠷᠬᠡ ᠤᠯᠭᠤᠬᠤ ᠵᠢ ᠱᠠᠭᠠᠷᠳᠠᠵᠤ ᠪᠠᠢᠨ᠎ᠠ.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="108"/>
-+        <location filename="../src/mainwindow.cpp" line="729"/>
-+        <source>Input Password</source>
-+        <translation>ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠬᠤ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="105"/>
-+        <source>Insert the ukey into the USB port</source>
-+        <translation>ᠠᠮᠤᠷ ᠲᠦᠪᠰᠢᠨ ᠦ ᠨᠢᠭᠤᠴᠠ ᠶᠢ USB ᠦᠵᠦᠭᠦᠷ ᠲᠦ ᠬᠠᠳᠬᠤᠵᠤ ᠣᠷᠣᠭᠠᠷᠠᠢ ᠃</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="107"/>
-+        <source>Enter the ukey password</source>
-+        <translation>ᠠᠮᠤᠷ ᠲᠦᠪᠰᠢᠨ ᠨᠢᠭᠤᠴᠠ ᠨᠣᠮᠧᠷ ᠢ ᠣᠷᠣᠭᠤᠯᠤᠨ᠎ᠠ ᠃</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="783"/>
-+        <source>hours left</source>
-+        <translation>ᠨᠢᠭᠡ ᠴᠠᠭ ᠤ᠋ᠨ ᠳᠠᠷᠠᠭ᠎ᠠ ᠤᠨᠢᠰᠤ ᠳᠠᠢᠯᠤᠨ᠎ᠠ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="787"/>
-+        <source>minutes left</source>
-+        <translation>ᠮᠢᠨᠦ᠋ᠲ ᠤ᠋ᠨ ᠳᠠᠷᠠᠭ᠎ᠠ ᠤᠨᠢᠰᠤ ᠳᠠᠢᠯᠤᠨ᠎ᠠ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="791"/>
-+        <source>seconds left</source>
-+        <translation>ᠰᠸᠺᠦᠨ᠋ᠲ ᠤ᠋ᠨ ᠳᠠᠷᠠᠭ᠎ᠠ ᠤᠨᠢᠰᠤ ᠳᠠᠢᠯᠤᠨ᠎ᠠ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="880"/>
-+        <location filename="../src/mainwindow.cpp" line="888"/>
-+        <source>Input your password to authentication</source>
-+        <translation>ᠨᠢᠭᠤᠴᠠ ᠨᠣᠮᠧᠷ ᠣᠷᠣᠭᠤᠯᠬᠤ ᠳᠤ ᠡᠷᠬᠡ ᠣᠯᠭᠣᠨ᠎ᠠ ᠃</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1440"/>
-+        <source>Verify face recognition or enter password to unlock</source>
-+        <translation>ᠨᠢᠭᠤᠷ ᠱᠢᠷᠪᠢᠵᠤ ᠪᠠᠳᠤᠯᠭᠠᠵᠢᠭᠤᠯᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1445"/>
-+        <source>Press fingerprint or enter password to unlock</source>
-+        <translation>ᠬᠤᠷᠤᠭᠤᠨ᠎ᠤ ᠤᠷᠤᠮ ᠳᠠᠷᠤᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1450"/>
-+        <source>Verify voiceprint or enter password to unlock</source>
-+        <translation>ᠳᠠᠭᠤ᠎ᠪᠠᠷ ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1455"/>
-+        <source>Verify finger vein or enter password to unlock</source>
-+        <translation>ᠬᠤᠷᠤᠭᠤᠨ᠎ᠤ ᠨᠠᠮᠵᠢᠭᠤᠨ ᠰᠤᠳᠠᠯ᠎ᠢᠶᠠᠷ ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1460"/>
-+        <source>Verify iris or enter password to unlock</source>
-+        <translation>ᠰᠤᠯᠤᠩᠭ᠎ᠠ ᠪᠦᠷᠬᠦᠪᠴᠢ᠎ᠶᠢ ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1465"/>
-+        <source>Use the bound wechat scanning code or enter the password to unlock</source>
-+        <translation>ᠤᠶᠠᠭᠰᠠᠨ ᠸᠢᠴᠠᠲ᠎ᠢᠶᠠᠷ ᠺᠤᠳ᠋ ᠱᠢᠷᠪᠢᠬᠦ᠌ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
-+    </message>
-+    <message>
-+        <source>Use the bound wechat scanning code or enter the password to log in</source>
-+        <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="779"/>
-+        <location filename="../src/mainwindow.cpp" line="783"/>
-+        <location filename="../src/mainwindow.cpp" line="787"/>
-+        <location filename="../src/mainwindow.cpp" line="791"/>
-+        <source>Account locked,</source>
-+        <translation>ᠳᠠᠨᠭᠰᠠ ᠵᠢ ᠨᠢᠬᠡᠨᠳᠡ ᠤᠨᠢᠰᠤᠯᠠᠪᠠ</translation>
-+    </message>
-+    <message>
-+        <source>Authentication failed, please try again</source>
-+        <translation type="obsolete">认证失败,请重试</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>PolkitListener</name>
-+    <message>
-+        <location filename="../src/PolkitListener.cpp" line="88"/>
-+        <source>Another client is already authenticating, please try again later.</source>
-+        <translation>ᠦᠬᠡᠷ᠎ᠡ ᠨᠢᠭᠡ ᠬᠡᠷᠡᠭᠯᠡᠭᠴᠢ ᠵᠢᠨ ᠦᠵᠦᠬᠦᠷᠯᠢᠭ ᠢ᠋ ᠶᠠᠭ ᠨᠤᠳᠠᠯᠠᠵᠤ ᠪᠠᠢᠨ᠎ᠠ᠂ ᠤᠳᠠᠰᠬᠢᠭᠠᠳ ᠳᠠᠬᠢᠨ ᠳᠤᠷᠰᠢᠭᠠᠷᠠᠢ.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/PolkitListener.cpp" line="261"/>
-+        <source>Authentication failure, please try again.</source>
-+        <translation>ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠵᠤ ᠴᠢᠳᠠᠭᠰᠠᠨ ᠦᠬᠡᠢ᠂ ᠳᠠᠬᠢᠵᠤ ᠳᠤᠷᠰᠢᠭᠠᠷᠠᠢ.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/PolkitListener.cpp" line="268"/>
-+        <source>Password input error!</source>
-+        <translation>ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠢ᠋ ᠪᠤᠷᠤᠭᠤ ᠤᠷᠤᠭᠤᠯᠪᠠ!</translation>
-+    </message>
-+    <message>
-+        <source>Account locked %1 minutes due to %2 fail attempts</source>
-+        <translation type="vanished">账户锁定%1分钟由于%2次错误尝试</translation>
-+    </message>
-+    <message>
-+        <source>Authentication failure,there are still %1 remaining opportunities</source>
-+        <translation type="vanished">认证失败,还剩余%1次尝试机会</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>QObject</name>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="obsolete">指纹</translation>
-+    </message>
-+    <message>
-+        <source>FingerVein</source>
-+        <translation type="obsolete">指静脉</translation>
-+    </message>
-+    <message>
-+        <source>Iris</source>
-+        <translation type="obsolete">虹膜</translation>
-+    </message>
-+    <message>
-+        <source>Face</source>
-+        <translation type="obsolete">人脸</translation>
-+    </message>
-+    <message>
-+        <source>VoicePrint</source>
-+        <translation type="obsolete">声纹</translation>
-+    </message>
-+    <message>
-+        <source>Cancel</source>
-+        <translation type="obsolete">取消</translation>
-+    </message>
-+</context>
-+</TS>
-diff --git a/polkit-agent/i18n_ts/ug.ts b/polkit-agent/i18n_ts/ug.ts
-new file mode 100644
-index 0000000..628eadd
---- /dev/null
-+++ b/polkit-agent/i18n_ts/ug.ts
-@@ -0,0 +1,421 @@
-+<?xml version="1.0" encoding="utf-8"?>
-+<!DOCTYPE TS>
-+<TS version="2.1" language="ug">
-+<context>
-+    <name>BioAuthWidget</name>
-+    <message>
-+        <source>Retry</source>
-+        <translation type="obsolete">重试</translation>
-+    </message>
-+    <message>
-+        <source>%1 too many unsuccessful attempts,please enter password.</source>
-+        <translation type="obsolete">%1验证失败达最大次数,请使用密码登录</translation>
-+    </message>
-+    <message>
-+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
-+        <translation type="obsolete">%1认证失败,还剩%2次尝试机会</translation>
-+    </message>
-+    <message>
-+        <source>Please use wechat to scan the code</source>
-+        <translation type="vanished">请使用微信扫码</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>BioDevices</name>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="obsolete">指纹</translation>
-+    </message>
-+    <message>
-+        <source>FingerVein</source>
-+        <translation type="obsolete">指静脉</translation>
-+    </message>
-+    <message>
-+        <source>Iris</source>
-+        <translation type="obsolete">虹膜</translation>
-+    </message>
-+    <message>
-+        <source>Face</source>
-+        <translation type="obsolete">人脸</translation>
-+    </message>
-+    <message>
-+        <source>VoicePrint</source>
-+        <translation type="obsolete">声纹</translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+    <message>
-+        <source>QRCode</source>
-+        <translation type="vanished">二维码</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>LoginOptionsWidget</name>
-+    <message>
-+        <source>Login Options</source>
-+        <translation type="vanished">登录选项</translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>MainWindow</name>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="65"/>
-+        <source>Authentication</source>
-+        <translation>راستىنى دەلىللەش</translation>
-+    </message>
-+    <message>
-+        <source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
-+        <translation type="vanished">指纹验证失败,您还有%1次尝试机会</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="26"/>
-+        <source>Form</source>
-+        <translation></translation>
-+    </message>
-+    <message>
-+        <source>More</source>
-+        <translation type="obsolete">更多</translation>
-+    </message>
-+    <message>
-+        <source>Restart</source>
-+        <translation type="obsolete">重新开始</translation>
-+    </message>
-+    <message>
-+        <source>Password</source>
-+        <translation type="vanished">密码</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="302"/>
-+        <location filename="../src/mainwindow.cpp" line="882"/>
-+        <location filename="../src/mainwindow.cpp" line="948"/>
-+        <source>Biometric</source>
-+        <translation>بىئومېتىرىيە</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="373"/>
-+        <source>use password</source>
-+        <translation>مەخپىي نومۇر ئىشلىتىش</translation>
-+    </message>
-+    <message>
-+        <source>DeviceType:</source>
-+        <translation type="obsolete">设备类型:</translation>
-+    </message>
-+    <message>
-+        <source>Back</source>
-+        <translation type="obsolete">返回</translation>
-+    </message>
-+    <message>
-+        <source>Details</source>
-+        <translation type="vanished">详细</translation>
-+    </message>
-+    <message>
-+        <source>Action Id:</source>
-+        <translation type="obsolete">动作:</translation>
-+    </message>
-+    <message>
-+        <source>Description:</source>
-+        <translation type="vanished">描述:</translation>
-+    </message>
-+    <message>
-+        <source>Polkit.subject-pid:</source>
-+        <translation type="vanished">Polkit.subject-pid:</translation>
-+    </message>
-+    <message>
-+        <source>Retry</source>
-+        <translation type="obsolete">重试</translation>
-+    </message>
-+    <message>
-+        <source>Device types:</source>
-+        <translation type="obsolete">设备类型:</translation>
-+    </message>
-+    <message>
-+        <source>Vendor:</source>
-+        <translation type="vanished">发行商:</translation>
-+    </message>
-+    <message>
-+        <source>Action:</source>
-+        <translation type="vanished">动作:</translation>
-+    </message>
-+    <message>
-+        <source>Polkit.caller-pid:</source>
-+        <translation type="vanished">Polkit.caller-pid:</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="334"/>
-+        <location filename="../src/mainwindow.cpp" line="884"/>
-+        <source>Cancel</source>
-+        <translation>ئەمەلدىن قالدۇرۇش</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="353"/>
-+        <location filename="../src/mainwindow.cpp" line="880"/>
-+        <source>Authenticate</source>
-+        <translation>چىنلىق دەلىللەش</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="886"/>
-+        <location filename="../src/mainwindow.cpp" line="991"/>
-+        <source>Use password</source>
-+        <translation>پارول ئىشلىتىش</translation>
-+    </message>
-+    <message>
-+        <source>Auth</source>
-+        <translation type="obsolete">授权</translation>
-+    </message>
-+    <message>
-+        <source>Too many unsuccessful attempts,please enter password.</source>
-+        <translation type="vanished">指纹验证失败达最大次数,请使用密码解锁</translation>
-+    </message>
-+    <message>
-+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
-+        <translation type="vanished">%1认证失败,还剩%2次尝试机会</translation>
-+    </message>
-+    <message>
-+        <source>%1 too many unsuccessful attempts,please enter password.</source>
-+        <translation type="vanished">%1验证失败达最大次数,请使用密码登录</translation>
-+    </message>
-+    <message>
-+        <source>in authentication, please wait...</source>
-+        <translation type="vanished">认证中,请稍等...</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1026"/>
-+        <location filename="../src/mainwindow.cpp" line="1093"/>
-+        <location filename="../src/mainwindow.cpp" line="1094"/>
-+        <source>Please try again in %1 minutes.</source>
-+        <translation>٪1 مىنۇت ئىچىدە قايتا سىناپ بېقىڭ.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1036"/>
-+        <location filename="../src/mainwindow.cpp" line="1103"/>
-+        <location filename="../src/mainwindow.cpp" line="1104"/>
-+        <source>Please try again in %1 seconds.</source>
-+        <translation>٪1 سېكۇنت ئىچىدە قايتا سىناپ بېقىڭ.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1045"/>
-+        <location filename="../src/mainwindow.cpp" line="1046"/>
-+        <location filename="../src/mainwindow.cpp" line="1112"/>
-+        <location filename="../src/mainwindow.cpp" line="1113"/>
-+        <source>Account locked permanently.</source>
-+        <translation>ھېسابات مەڭگۈلۈك قۇلۇپلىنىدۇ.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="675"/>
-+        <location filename="../src/mainwindow.cpp" line="676"/>
-+        <source>Password cannot be empty</source>
-+        <translation>مەخپىي نومۇرنى بوش قويۇشقا بولمايدۇ</translation>
-+    </message>
-+    <message>
-+        <source>Failed to verify %1, please enter password.</source>
-+        <translation type="vanished">验证%1失败,请输入密码.</translation>
-+    </message>
-+    <message>
-+        <source>Unable to verify %1, please enter password.</source>
-+        <translation type="vanished">无法验证%1,请输入密码.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="175"/>
-+        <source>Failed to verify %1, you still have %2 verification opportunities</source>
-+        <translation>٪1 نى دەلىللەش مەغلۇپ بولدى، سىزدە يەنىلا ٪2 دەلىللەش پۇرسىتى بار</translation>
-+    </message>
-+    <message>
-+        <source>An application is attempting to perform an action that requires privileges. Authentication is required to perform this action.</source>
-+        <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="578"/>
-+        <source>Password: </source>
-+        <translation>مەخپىي نومۇرى: </translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="261"/>
-+        <source>Please enter your password or enroll your fingerprint </source>
-+        <translation>مەخپىي نومۇرىڭىزنى كىرگۈزۈڭ ياكى بارماق ئىزىڭىزنى تىزىملىتىڭ </translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="187"/>
-+        <source>Abnormal network</source>
-+        <translation>بىنورمال تور</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="511"/>
-+        <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
-+        <translation>بۇ مەشغۇلات باشقۇرغۇچىنىڭ ھوقۇق بېرىشىنى تەلەپ قىلىدۇ. بۇ مەشغۇلاتقا رۇخسەت قىلىش ئۈچۈن پارولىڭىزنى كىرگۈزۈڭ.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="580"/>
-+        <source>_Password: </source>
-+        <translation>_Password: </translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="582"/>
-+        <source>_Password:</source>
-+        <translation>_Password:</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="691"/>
-+        <source>Authentication failed, please try again.</source>
-+        <translation>دەلىللەش مەغلۇپ بولدى، قايتا سىناپ بېقىڭ.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="623"/>
-+        <source>days left</source>
-+        <translation>قالغان كۈنلەر</translation>
-+    </message>
-+    <message>
-+        <source>Biometric/code scan authentication failed too many times, please enter the password.</source>
-+        <translation type="vanished">生物/扫码验证失败达最大次数,请使用密码解锁.</translation>
-+    </message>
-+    <message>
-+        <source>Bioauth/code scan authentication failed, you still have %1 verification opportunities</source>
-+        <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="164"/>
-+        <location filename="../src/mainwindow.cpp" line="1176"/>
-+        <source>Failed to verify %1, please enter password to unlock</source>
-+        <translation>٪1 نى دەلىللەش مەغلۇپ بولدى، مەخپى نۇمۇر كىرگۈزۈڭ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="168"/>
-+        <location filename="../src/mainwindow.cpp" line="1178"/>
-+        <source>Unable to verify %1, please enter password to unlock</source>
-+        <translation>٪1 نى دەلىللەشكە ئامالسىز، مەخپىي نومۇرنى كىرگۈزۈپ قۇلۇپنى ئاچ</translation>
-+    </message>
-+    <message>
-+        <source>NET Exception</source>
-+        <translation type="vanished">网络异常</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="517"/>
-+        <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
-+        <translation>بىر پروگرامما ئىمتىياز تەلەپ قىلىدىغان ھەرىكەتنى قىلىشقا ئۇرۇنماقتا. بۇ ھەرىكەتنى ئىجرا قىلىش ئۈچۈن ھوقۇق تەلەپ قىلىدۇ.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="576"/>
-+        <source>Input Password</source>
-+        <translation>ئىم كىرگۈزۈش</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="627"/>
-+        <source>hours left</source>
-+        <translation>قالغان سائەتلەر</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="631"/>
-+        <source>minutes left</source>
-+        <translation>مىنۇت قالدى</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="635"/>
-+        <source>seconds left</source>
-+        <translation>سېكۇنت قالدى</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1193"/>
-+        <source>Verify face recognition or enter password to unlock</source>
-+        <translation>چىراي تونۇشنى دەلىللەش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1198"/>
-+        <source>Press fingerprint or enter password to unlock</source>
-+        <translation>بارماق ئىزىنى بېسىش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1203"/>
-+        <source>Verify voiceprint or enter password to unlock</source>
-+        <translation>ئاۋاز ئىزىنى دەلىللەش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1208"/>
-+        <source>Verify finger vein or enter password to unlock</source>
-+        <translation>بارماق تومۇرىنى ئېنىقلاش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1213"/>
-+        <source>Verify iris or enter password to unlock</source>
-+        <translation>Iris نى ئېنىقلاش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1218"/>
-+        <source>Use the bound wechat scanning code or enter the password to unlock</source>
-+        <translation>باغلانغان ئۈندىدارنى سىكاننېرلاش كودى ياكى مەخپىي نومۇرىنى كىرگۈزۈپ قۇلۇپ ئېچىش</translation>
-+    </message>
-+    <message>
-+        <source>Use the bound wechat scanning code or enter the password to log in</source>
-+        <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="623"/>
-+        <location filename="../src/mainwindow.cpp" line="627"/>
-+        <location filename="../src/mainwindow.cpp" line="631"/>
-+        <location filename="../src/mainwindow.cpp" line="635"/>
-+        <source>Account locked,</source>
-+        <translation>ھېسابات قۇلۇپلانغان ،</translation>
-+    </message>
-+    <message>
-+        <source>Authentication failed, please try again</source>
-+        <translation type="obsolete">认证失败,请重试</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>PolkitListener</name>
-+    <message>
-+        <location filename="../src/PolkitListener.cpp" line="88"/>
-+        <source>Another client is already authenticating, please try again later.</source>
-+        <translation>يەنە بىر خېرىدار ئاللىقاچان دەلىللەشكە باشلىدى، سەل تۇرۇپ قايتا سىناپ بېقىڭ.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/PolkitListener.cpp" line="257"/>
-+        <source>Authentication failure, please try again.</source>
-+        <translation>دەلىللەش مەغلۇپ بولدى، قايتا سىناپ بېقىڭ.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/PolkitListener.cpp" line="264"/>
-+        <source>Password input error!</source>
-+        <translation>پارول كىرگۈزۈش خاتالىقى!</translation>
-+    </message>
-+    <message>
-+        <source>Account locked %1 minutes due to %2 fail attempts</source>
-+        <translation type="vanished">账户锁定%1分钟由于%2次错误尝试</translation>
-+    </message>
-+    <message>
-+        <source>Authentication failure,there are still %1 remaining opportunities</source>
-+        <translation type="vanished">认证失败,还剩余%1次尝试机会</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>QObject</name>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="obsolete">指纹</translation>
-+    </message>
-+    <message>
-+        <source>FingerVein</source>
-+        <translation type="obsolete">指静脉</translation>
-+    </message>
-+    <message>
-+        <source>Iris</source>
-+        <translation type="obsolete">虹膜</translation>
-+    </message>
-+    <message>
-+        <source>Face</source>
-+        <translation type="obsolete">人脸</translation>
-+    </message>
-+    <message>
-+        <source>VoicePrint</source>
-+        <translation type="obsolete">声纹</translation>
-+    </message>
-+    <message>
-+        <source>Cancel</source>
-+        <translation type="obsolete">取消</translation>
-+    </message>
-+</context>
-+</TS>
-diff --git a/polkit-agent/i18n_ts/zh_HK.ts b/polkit-agent/i18n_ts/zh_HK.ts
-new file mode 100644
-index 0000000..aea8f94
---- /dev/null
-+++ b/polkit-agent/i18n_ts/zh_HK.ts
-@@ -0,0 +1,441 @@
-+<?xml version="1.0" encoding="utf-8"?>
-+<!DOCTYPE TS>
-+<TS version="2.1" language="zh_Hant">
-+<context>
-+    <name>BioAuthWidget</name>
-+    <message>
-+        <source>Retry</source>
-+        <translation type="obsolete">重试</translation>
-+    </message>
-+    <message>
-+        <source>%1 too many unsuccessful attempts,please enter password.</source>
-+        <translation type="obsolete">%1验证失败达最大次数,请使用密码登录</translation>
-+    </message>
-+    <message>
-+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
-+        <translation type="obsolete">%1认证失败,还剩%2次尝试机会</translation>
-+    </message>
-+    <message>
-+        <source>Please use wechat to scan the code</source>
-+        <translation type="vanished">请使用微信扫码</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>BioDevices</name>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="obsolete">指纹</translation>
-+    </message>
-+    <message>
-+        <source>FingerVein</source>
-+        <translation type="obsolete">指静脉</translation>
-+    </message>
-+    <message>
-+        <source>Iris</source>
-+        <translation type="obsolete">虹膜</translation>
-+    </message>
-+    <message>
-+        <source>Face</source>
-+        <translation type="obsolete">人脸</translation>
-+    </message>
-+    <message>
-+        <source>VoicePrint</source>
-+        <translation type="obsolete">声纹</translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+    <message>
-+        <source>QRCode</source>
-+        <translation type="vanished">二维码</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>LoginOptionsWidget</name>
-+    <message>
-+        <source>Login Options</source>
-+        <translation type="vanished">登录选项</translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>MainWindow</name>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="67"/>
-+        <source>Authentication</source>
-+        <translation>授權</translation>
-+    </message>
-+    <message>
-+        <source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
-+        <translation type="vanished">指纹验证失败,您还有%1次尝试机会</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="26"/>
-+        <source>Form</source>
-+        <translation></translation>
-+    </message>
-+    <message>
-+        <source>More</source>
-+        <translation type="obsolete">更多</translation>
-+    </message>
-+    <message>
-+        <source>Restart</source>
-+        <translation type="obsolete">重新开始</translation>
-+    </message>
-+    <message>
-+        <source>Password</source>
-+        <translation type="vanished">密码</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="409"/>
-+        <location filename="../src/mainwindow.cpp" line="1077"/>
-+        <location filename="../src/mainwindow.cpp" line="1145"/>
-+        <source>Biometric</source>
-+        <translation>使用生物識別</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="480"/>
-+        <source>use password</source>
-+        <translation>使用密碼驗證</translation>
-+    </message>
-+    <message>
-+        <source>DeviceType:</source>
-+        <translation type="obsolete">设备类型:</translation>
-+    </message>
-+    <message>
-+        <source>Back</source>
-+        <translation type="obsolete">返回</translation>
-+    </message>
-+    <message>
-+        <source>Details</source>
-+        <translation type="vanished">详细</translation>
-+    </message>
-+    <message>
-+        <source>Action Id:</source>
-+        <translation type="obsolete">动作:</translation>
-+    </message>
-+    <message>
-+        <source>Description:</source>
-+        <translation type="vanished">描述:</translation>
-+    </message>
-+    <message>
-+        <source>Polkit.subject-pid:</source>
-+        <translation type="vanished">Polkit.subject-pid:</translation>
-+    </message>
-+    <message>
-+        <source>Retry</source>
-+        <translation type="obsolete">重试</translation>
-+    </message>
-+    <message>
-+        <source>Device types:</source>
-+        <translation type="obsolete">设备类型:</translation>
-+    </message>
-+    <message>
-+        <source>Vendor:</source>
-+        <translation type="vanished">发行商:</translation>
-+    </message>
-+    <message>
-+        <source>Action:</source>
-+        <translation type="vanished">动作:</translation>
-+    </message>
-+    <message>
-+        <source>Polkit.caller-pid:</source>
-+        <translation type="vanished">Polkit.caller-pid:</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="441"/>
-+        <location filename="../src/mainwindow.cpp" line="1079"/>
-+        <source>Cancel</source>
-+        <translation>取消</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="460"/>
-+        <location filename="../src/mainwindow.cpp" line="1075"/>
-+        <source>Authenticate</source>
-+        <translation>授權</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1081"/>
-+        <location filename="../src/mainwindow.cpp" line="1185"/>
-+        <source>Use password</source>
-+        <translation>使用密碼驗證</translation>
-+    </message>
-+    <message>
-+        <source>Auth</source>
-+        <translation type="obsolete">授权</translation>
-+    </message>
-+    <message>
-+        <source>Too many unsuccessful attempts,please enter password.</source>
-+        <translation type="vanished">指纹验证失败达最大次数,请使用密码解锁</translation>
-+    </message>
-+    <message>
-+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
-+        <translation type="vanished">%1认证失败,还剩%2次尝试机会</translation>
-+    </message>
-+    <message>
-+        <source>%1 too many unsuccessful attempts,please enter password.</source>
-+        <translation type="vanished">%1验证失败达最大次数,请使用密码登录</translation>
-+    </message>
-+    <message>
-+        <source>in authentication, please wait...</source>
-+        <translation type="vanished">认证中,请稍等...</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1221"/>
-+        <location filename="../src/mainwindow.cpp" line="1294"/>
-+        <location filename="../src/mainwindow.cpp" line="1295"/>
-+        <source>Please try again in %1 minutes.</source>
-+        <translation>請%1分鐘后再試</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1232"/>
-+        <location filename="../src/mainwindow.cpp" line="1304"/>
-+        <location filename="../src/mainwindow.cpp" line="1305"/>
-+        <source>Please try again in %1 seconds.</source>
-+        <translation>請%1秒後再試</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1242"/>
-+        <location filename="../src/mainwindow.cpp" line="1243"/>
-+        <location filename="../src/mainwindow.cpp" line="1313"/>
-+        <location filename="../src/mainwindow.cpp" line="1314"/>
-+        <source>Account locked permanently.</source>
-+        <translation>帳號已被永久鎖定</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="836"/>
-+        <location filename="../src/mainwindow.cpp" line="837"/>
-+        <source>Password cannot be empty</source>
-+        <translation>密碼不能為空</translation>
-+    </message>
-+    <message>
-+        <source>Failed to verify %1, please enter password.</source>
-+        <translation type="vanished">验证%1失败,请输入密码.</translation>
-+    </message>
-+    <message>
-+        <source>Unable to verify %1, please enter password.</source>
-+        <translation type="vanished">无法验证%1,请输入密码.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="244"/>
-+        <location filename="../src/mainwindow.cpp" line="248"/>
-+        <source>Failed to verify %1, you still have %2 verification opportunities</source>
-+        <translation>驗證%1失敗,您還有%2次嘗試機會</translation>
-+    </message>
-+    <message>
-+        <source>An application is attempting to perform an action that requires privileges. Authentication is required to perform this action.</source>
-+        <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="733"/>
-+        <source>Password: </source>
-+        <translation>密碼: </translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="337"/>
-+        <source>Please enter your password or enroll your fingerprint </source>
-+        <translation>請輸入密碼或者錄入指紋 </translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="261"/>
-+        <source>Abnormal network</source>
-+        <translation>網路異常</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="511"/>
-+        <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
-+        <translation>本次操作需要通過管理員的授權才能繼續執行,請輸入密碼以允許本次操作。</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="735"/>
-+        <source>_Password: </source>
-+        <translation>密碼: </translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="737"/>
-+        <source>_Password:</source>
-+        <translation>密碼:</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="852"/>
-+        <source>Authentication failed, please try again.</source>
-+        <translation>認證失敗,請重試。</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="781"/>
-+        <source>days left</source>
-+        <translation>天后解鎖</translation>
-+    </message>
-+    <message>
-+        <source>Biometric/code scan authentication failed too many times, please enter the password.</source>
-+        <translation type="vanished">生物/扫码验证失败达最大次数,请使用密码解锁.</translation>
-+    </message>
-+    <message>
-+        <source>Bioauth/code scan authentication failed, you still have %1 verification opportunities</source>
-+        <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="228"/>
-+        <location filename="../src/mainwindow.cpp" line="1417"/>
-+        <location filename="../src/mainwindow.cpp" line="1419"/>
-+        <source>Failed to verify %1, please enter password to unlock</source>
-+        <translation>驗證%1失敗,請輸入密碼解鎖</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="233"/>
-+        <location filename="../src/mainwindow.cpp" line="235"/>
-+        <location filename="../src/mainwindow.cpp" line="1421"/>
-+        <source>Unable to verify %1, please enter password to unlock</source>
-+        <translation>無法驗證%1,請輸入密碼解鎖</translation>
-+    </message>
-+    <message>
-+        <source>NET Exception</source>
-+        <translation type="vanished">网络异常</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="673"/>
-+        <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
-+        <translation>一個程式正試圖執行一個需要特權的動作,要求授權以執行該動作。</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="110"/>
-+        <location filename="../src/mainwindow.cpp" line="731"/>
-+        <source>Input Password</source>
-+        <translation>輸入密碼</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="107"/>
-+        <source>Insert the ukey into the USB port</source>
-+        <translation>請將安全金鑰插入USB埠</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="109"/>
-+        <source>Enter the ukey password</source>
-+        <translation>輸入安全金鑰密碼</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="785"/>
-+        <source>hours left</source>
-+        <translation>小時後解鎖</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="789"/>
-+        <source>minutes left</source>
-+        <translation>分鐘後解鎖</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="793"/>
-+        <source>seconds left</source>
-+        <translation>秒後解鎖</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="882"/>
-+        <location filename="../src/mainwindow.cpp" line="890"/>
-+        <source>Input your password to authentication</source>
-+        <translation>輸入密碼以認證</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1436"/>
-+        <source>Verify face recognition or enter password to unlock</source>
-+        <translation>驗證人臉識別或輸入密碼解鎖</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1441"/>
-+        <source>Press fingerprint or enter password to unlock</source>
-+        <translation>按壓指紋或輸入密碼解鎖</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1446"/>
-+        <source>Verify voiceprint or enter password to unlock</source>
-+        <translation>驗證聲紋或輸入密碼解鎖</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1451"/>
-+        <source>Verify finger vein or enter password to unlock</source>
-+        <translation>驗證指靜脈或輸入密碼解鎖</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1456"/>
-+        <source>Verify iris or enter password to unlock</source>
-+        <translation>驗證虹膜或輸入密碼解鎖</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1461"/>
-+        <source>Use the bound wechat scanning code or enter the password to unlock</source>
-+        <translation>使用綁定的微信掃碼或輸入密碼解鎖</translation>
-+    </message>
-+    <message>
-+        <source>Use the bound wechat scanning code or enter the password to log in</source>
-+        <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="781"/>
-+        <location filename="../src/mainwindow.cpp" line="785"/>
-+        <location filename="../src/mainwindow.cpp" line="789"/>
-+        <location filename="../src/mainwindow.cpp" line="793"/>
-+        <source>Account locked,</source>
-+        <translation>帳戶已鎖定,</translation>
-+    </message>
-+    <message>
-+        <source>Authentication failed, please try again</source>
-+        <translation type="obsolete">认证失败,请重试</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>PolkitListener</name>
-+    <message>
-+        <location filename="../src/PolkitListener.cpp" line="90"/>
-+        <source>Another client is already authenticating, please try again later.</source>
-+        <translation>有另外一個用戶端正在認證,請稍後重試。</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/PolkitListener.cpp" line="265"/>
-+        <source>Authentication failure, please try again.</source>
-+        <translation>認證失敗,請重試。</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/PolkitListener.cpp" line="272"/>
-+        <source>Password input error!</source>
-+        <translation>密碼輸入錯誤!</translation>
-+    </message>
-+    <message>
-+        <source>Account locked %1 minutes due to %2 fail attempts</source>
-+        <translation type="vanished">账户锁定%1分钟由于%2次错误尝试</translation>
-+    </message>
-+    <message>
-+        <source>Authentication failure,there are still %1 remaining opportunities</source>
-+        <translation type="vanished">认证失败,还剩余%1次尝试机会</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>QObject</name>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="obsolete">指纹</translation>
-+    </message>
-+    <message>
-+        <source>FingerVein</source>
-+        <translation type="obsolete">指静脉</translation>
-+    </message>
-+    <message>
-+        <source>Iris</source>
-+        <translation type="obsolete">虹膜</translation>
-+    </message>
-+    <message>
-+        <source>Face</source>
-+        <translation type="obsolete">人脸</translation>
-+    </message>
-+    <message>
-+        <source>VoicePrint</source>
-+        <translation type="obsolete">声纹</translation>
-+    </message>
-+    <message>
-+        <source>Cancel</source>
-+        <translation type="obsolete">取消</translation>
-+    </message>
-+</context>
-+</TS>
-diff --git a/polkit-agent/src/PolkitListener.cpp b/polkit-agent/src/PolkitListener.cpp
-index 88d9cdb..67fe34c 100644
---- a/polkit-agent/src/PolkitListener.cpp
-+++ b/polkit-agent/src/PolkitListener.cpp
-@@ -357,6 +357,7 @@ void PolkitListener::onShowPrompt(const QString &prompt, bool echo)
-         mainWindow->setPrompt(prompt, echo);
-     }
- 
-+    mainWindow->setFixedSize(mainWindow->width(),mainWindow->height());
-     mainWindow->show();
-     // 重新开始认证不调整窗口位置
- //    QPoint pos = QCursor::pos();
-diff --git a/polkit-agent/src/mainwindow.cpp b/polkit-agent/src/mainwindow.cpp
-index e8b66c1..c72a01d 100644
---- a/polkit-agent/src/mainwindow.cpp
-+++ b/polkit-agent/src/mainwindow.cpp
-@@ -30,6 +30,7 @@
- #include <QFontMetrics>
- #include <QtMath>
- #include <QAbstractItemView>
-+#include <KWindowSystem>
- #include <fcntl.h>
- #include <unistd.h>
- #include <sys/types.h>
-@@ -61,6 +62,7 @@ MainWindow::MainWindow(QWidget *parent) :
-     m_nCurLockMin(0),
-     isbioSuccess(false)
- {
-+    KWindowSystem::setState(this->winId(), NET::SkipTaskbar | NET::SkipPager);
-     ui->setupUi(this);
-     setWindowTitle(tr("Authentication"));
-     setWindowFlags(Qt::WindowCloseButtonHint | Qt::WindowStaysOnTopHint);
-@@ -97,6 +99,7 @@ MainWindow::MainWindow(QWidget *parent) :
-     ui->titleTipLayout->addWidget(m_labelTip);
-     ui->loginOptionsLayout->setAlignment(Qt::AlignTop|Qt::AlignCenter);
-     ui->loginOptionsLayout->addWidget(m_loginOptsWidget);
-+    ui->loadingUkeyWidget->adjustSize();
-     ui->loadingUkeyWidget->hide();
-     ui->widgetUkeyAuth->hide();
-     ui->loadingUkeyBtn->setAttribute(Qt::WA_TransparentForMouseEvents, true);
-@@ -105,14 +108,12 @@ MainWindow::MainWindow(QWidget *parent) :
-     ui->loadingUkeyLbl->setAlignment(Qt::AlignTop|Qt::AlignHCenter);
-     ui->ukeyTipLbl->setText(tr("Enter the ukey password"));
-     ui->ukeyPassword->setPlaceholderText(tr("Input Password"));
--    ui->loadingUkeyWidget->adjustSize();
-     maxFailedTimes = bioDevices.getFailedTimes();
-     isHiddenSwitchButton = bioDevices.GetHiddenSwitchButton();
- 
-     connect(m_loginOptsWidget, &LoginOptionsWidget::optionSelected,
-             this, [&](unsigned uCurLoginOptType, const DeviceInfoPtr &deviceInfo){
--
--	isLoadingUkey = false;
-+        isLoadingUkey = false;
- 
-         if(uCurLoginOptType == LOGINOPT_TYPE_GENERAL_UKEY){
-             stopLoadingUkey();
-@@ -142,7 +143,7 @@ MainWindow::MainWindow(QWidget *parent) :
- 
-         if (uCurLoginOptType == LOGINOPT_TYPE_GENERAL_UKEY && !deviceInfo){
-             isLoadingUkey = true;
--	    startLoadingUkey();
-+            startLoadingUkey();
-             m_loginOptsWidget->updateUkeyUIStatus(LOGINOPT_TYPE_GENERAL_UKEY);
-         }else if(uCurLoginOptType == LOGINOPT_TYPE_GENERAL_UKEY && deviceInfo){
-             stopLoadingUkey();
-@@ -157,8 +158,8 @@ MainWindow::MainWindow(QWidget *parent) :
-             return ;
-         }
- 
--	if(m_bioTimer)
--	    m_bioTimer->stop();
-+        if(m_bioTimer)
-+            m_bioTimer->stop();
- 
-         m_deviceInfo = deviceInfo;
-         switchLoginOptType(uCurLoginOptType);
-@@ -365,24 +366,27 @@ void MainWindow::setUkeyTypeTip(QString text)
- 
- void MainWindow::startLoadingUkey()
- {
-+    m_loadingPixmap = QIcon::fromTheme("ukui-loading-0-symbolic").pixmap(27,27);
-+    ui->loadingUkeyBtn->setIcon(m_loadingPixmap);
-+    ui->loadingUkeyBtn->setIconSize(QSize(27, 27));
-+
-+    ui->loadingUkeyWidget->adjustSize();
-+    ui->cmbUsers->hide();
-+    ui->widgetUkeyAuth->hide();
-+    ui->lePassword->hide();
-+
-+    ui->widgetPasswdAuth->hide();
-+
-     isLoadingUkey = true;
-     ui->loadingUkeyWidget->show();
-+
-     if(!m_loadingTimer)
-     {
-         m_loadingTimer = new QTimer(this);
-         m_loadingTimer->setInterval(150);
-         connect(m_loadingTimer, &QTimer::timeout, this, &MainWindow::updateLoadingPixmap);
-     }
--
--    m_loadingPixmap = QIcon::fromTheme("ukui-loading-0-symbolic").pixmap(27,27);
--    ui->loadingUkeyBtn->setIcon(m_loadingPixmap);
--    ui->loadingUkeyBtn->setIconSize(QSize(27, 27));
-     m_loadingTimer->start();
--    ui->loadingUkeyWidget->adjustSize();
--    ui->cmbUsers->hide();
--    ui->widgetUkeyAuth->hide();
--    ui->lePassword->hide();
--    ui->widgetPasswdAuth->hide();
- }
- 
- void MainWindow::stopLoadingUkey()
-@@ -391,9 +395,10 @@ void MainWindow::stopLoadingUkey()
-     if(m_loadingTimer){
-         m_loadingTimer->stop();
-     }
-+
-     ui->loadingUkeyWidget->hide();
-     //ui->cmbUsers->show();
--    ui->widgetUkeyAuth->show();
-+    //ui->widgetUkeyAuth->show();
- }
- 
- void MainWindow::updateLoadingPixmap()
-@@ -874,6 +879,7 @@ void MainWindow::switchAuthMode(Mode mode)
-     int count = m_loginOptsWidget->getLoginOptCount();
-     enableBioAuth  = count > 0;
-     if (count < 1) {
-+        setLoginTypeTip(tr("Input your password to authentication"));
-         m_loginOptsWidget->hide();
-     } else {
-         m_loginOptsWidget->show();
-@@ -881,6 +887,7 @@ void MainWindow::switchAuthMode(Mode mode)
-     }
- 
-     if(m_loginOptsWidget->getHasUkeyOptions()){
-+        setLoginTypeTip(tr("Input your password to authentication"));
-         m_loginOptsWidget->show();
-     }
-     
-@@ -1074,6 +1081,7 @@ void MainWindow::switchWidget(Mode mode)
-     ui->returnButton->setText(tr("Use password"));
-     ui->btnLoading->setDisabled(true);
-     ui->returnButton->adjustSize();
-+    m_labelTip->adjustSize();
-     if(is_Mavis){
-         ui->cmbUsers->setFixedHeight(48);
-         ui->lePassword->setFixedHeight(48);
-@@ -1084,8 +1092,7 @@ void MainWindow::switchWidget(Mode mode)
-     switch(mode){
-     case PASSWORD:
-     {
--        setMinimumWidth(420);
--        setMaximumWidth(420);
-+        setFixedWidth(420);
- 
-         if (m_deviceInfo && m_loginOptsWidget->findDeviceById(m_deviceInfo->device_id)) {
-             switchLoginOptType(m_loginOptsWidget->convertDeviceType(m_deviceInfo->biotype));
-@@ -1121,18 +1128,16 @@ void MainWindow::switchWidget(Mode mode)
-                     + ui->cmbUsers->height() + ui->lePassword->height() + ui->lblMessage->height()
-                     + ui->btnAuth->height();
-         }
--        if (m_loginOptsWidget->isHidden()) {
--            height -= 20 ;
--        }
-+//        if (m_loginOptsWidget->isHidden()) {
-+//            height = height - m_labelTip->height() - 10;
-+//        }
- 
-         unsigned uOptsWidgetHeight = m_loginOptsWidget->height();
-         if (m_loginOptsWidget->isHidden()) {
-             uOptsWidgetHeight = 0;
--            height -= 20 ;
-+            height = height + m_labelTip->height() - 10;
-         }
--        setMinimumHeight(height + uOptsWidgetHeight + 10);
--        setMaximumHeight(height + uOptsWidgetHeight + 10);
--
-+        setFixedHeight(height + uOptsWidgetHeight + 10);
- 
-         //m_loginOptsWidget->updateUIStatus();
-         ui->btnBioAuth->setStyleSheet("QPushButton{font-size:14px;}QPushButton:hover{border:none;color:#3E6CE5;}QPushButton:pressed{border:none;}");
-@@ -1163,14 +1168,11 @@ void MainWindow::switchWidget(Mode mode)
-         break;
- 
-     case BIOMETRIC:
--        setMinimumWidth(420);
--        setMaximumWidth(420);
-+        setFixedWidth(420);
-         if(m_loginOptsWidget->getLoginOptCount() <= 1){
--            setMinimumHeight(392+ui->cmbUsers->height()+ui->lblHeader->height());
--            setMaximumHeight(392+ui->cmbUsers->height()+ui->lblHeader->height());
-+            setFixedHeight(392+ui->cmbUsers->height()+ui->lblHeader->height());
-         } else {
--            setMinimumHeight(482+ui->cmbUsers->height()+ui->lblHeader->height());
--            setMaximumHeight(482+ui->cmbUsers->height()+ui->lblHeader->height());
-+            setFixedHeight(482+ui->cmbUsers->height()+ui->lblHeader->height());
-         }
- 
-         ui->btnCancel->hide();
-@@ -1484,11 +1486,15 @@ void MainWindow::setLoginTypeTip(QString strLoginTypeTip)
-         m_labelTip->hide();
-     } else {
-         QPalette pe;
--        if(no_changes)
-+        if(no_changes) {
-             pe.setColor(QPalette::WindowText,Qt::red);
--        else
--            pe.setColor(QPalette::WindowText,QColor(55, 144, 250, 255));
--        m_labelTip->setPalette(pe);
-+            m_labelTip->setPalette(pe);
-+        } else {
-+            QColor color = palette().color(QPalette::WindowText);
-+            QPalette pal(this->palette());
-+            pal.setColor(QPalette::WindowText,QColor(color));
-+            m_labelTip->setPalette(pal);
-+        }
-         m_labelTip->setText(m_strLoginTypeTip);
-         m_labelTip->show();
-     }
-@@ -1499,7 +1505,7 @@ void MainWindow::startBioAuthDelay()
-     if (m_deviceInfo) {
-         if(m_deviceInfo->biotype == LOGINOPT_TYPE_GENERAL_UKEY){
- 
--    }else{
-+        }else{
-             m_loginOptsWidget->startAuth(m_deviceInfo, getUid(userName));
-         }
-         switchLoginOptType(m_loginOptsWidget->convertDeviceType(m_deviceInfo->biotype));
-@@ -1589,17 +1595,14 @@ void MainWindow::onUpdateWndSize(unsigned uLoginOptType, unsigned uLoginOptSize)
-                 + ui->btnAuth->height();
-     }
-     if (m_loginOptsWidget->isHidden()) {
--        height -= 20 ;
-+        height = height + m_labelTip->height() - 10;
-     }
- 
-     if(uLoginOptType == LOGINOPT_TYPE_GENERAL_UKEY){
--
--        setMinimumHeight(height + uOptsWidgetHeight + 10);
--        setMaximumHeight(height + uOptsWidgetHeight + 10);
-+        setLoginTypeTip("");
-+        setFixedSize(width(), height + uOptsWidgetHeight + 10);
-     }else{
--
--        setMinimumHeight(height + uOptsWidgetHeight);
--        setMaximumHeight(height + uOptsWidgetHeight);
-+        setFixedSize(width(), height + uOptsWidgetHeight);
-     }
- }
- 
-diff --git a/polkit-agent/src/mainwindow.ui b/polkit-agent/src/mainwindow.ui
-index e9cf404..01fc13b 100644
---- a/polkit-agent/src/mainwindow.ui
-+++ b/polkit-agent/src/mainwindow.ui
-@@ -7,7 +7,7 @@
-     <x>0</x>
-     <y>0</y>
-     <width>459</width>
--    <height>547</height>
-+    <height>646</height>
-    </rect>
-   </property>
-   <property name="sizePolicy">
-@@ -120,6 +120,9 @@
-      </item>
-      <item row="4" column="1">
-       <layout class="QHBoxLayout" name="titleTipLayout">
-+       <property name="topMargin">
-+        <number>8</number>
-+       </property>
-        <property name="bottomMargin">
-         <number>8</number>
-        </property>
-@@ -380,19 +383,6 @@
-      </property>
-     </layout>
-    </item>
--   <item>
--    <spacer name="verticalSpacer">
--     <property name="orientation">
--      <enum>Qt::Vertical</enum>
--     </property>
--     <property name="sizeHint" stdset="0">
--      <size>
--       <width>20</width>
--       <height>40</height>
--      </size>
--     </property>
--    </spacer>
--   </item>
-    <item>
-     <layout class="QHBoxLayout" name="horizontalLayout_7">
-      <property name="spacing">
-@@ -410,7 +400,7 @@
-      <item>
-       <widget class="QPushButton" name="btnBioAuth">
-        <property name="cursor">
--        <cursorShape>PointingHandCursor</cursorShape>
-+        <cursorShape>ArrowCursor</cursorShape>
-        </property>
-        <property name="styleSheet">
-         <string notr="true"/>
-@@ -442,7 +432,7 @@
-         </sizepolicy>
-        </property>
-        <property name="cursor">
--        <cursorShape>PointingHandCursor</cursorShape>
-+        <cursorShape>ArrowCursor</cursorShape>
-        </property>
-        <property name="styleSheet">
-         <string notr="true"/>
-@@ -461,7 +451,7 @@
-         </sizepolicy>
-        </property>
-        <property name="cursor">
--        <cursorShape>PointingHandCursor</cursorShape>
-+        <cursorShape>ArrowCursor</cursorShape>
-        </property>
-        <property name="styleSheet">
-         <string notr="true"/>
-diff --git a/polkit-agent/src/modeButton.cpp b/polkit-agent/src/modeButton.cpp
-index 53d0ffc..66f712c 100644
---- a/polkit-agent/src/modeButton.cpp
-+++ b/polkit-agent/src/modeButton.cpp
-@@ -39,7 +39,7 @@ void ModeButton::initUI()
-     setModeIcon();
-     setFixedSize(QSize(24, 24));
-     setModeIcon();
--    setCursor(Qt::PointingHandCursor);
-+    setCursor(Qt::ArrowCursor);
-     setStyleSheet("QPushButton::pressed{border:none;background-color:transparent}"
-                                     "QPushButton::hover::!pressed{border:none;background-color:transparent}");
- 
-diff --git a/uniauth-backend/CMakeLists.txt b/uniauth-backend/CMakeLists.txt
-index 4ba44ec..5ee3930 100644
---- a/uniauth-backend/CMakeLists.txt
-+++ b/uniauth-backend/CMakeLists.txt
-@@ -2,9 +2,12 @@ project(uniauth-backend)
- 
- set(CMAKE_AUTOMOC ON)
- 
-+pkg_check_modules(LIGHTDM-QT5-3 REQUIRED liblightdm-qt5-3)
-+
- include_directories(
-     ${Qt5Core_INCLUDE_DIRS}
-     ${Qt5DBus_INCLUDE_DIRS}
-+    ${LIGHTDM-QT5-3_INCLUDE_DIRS}
-     )
- 
- set(bin_SRCS
-@@ -16,10 +19,15 @@ set(bin_SRCS
-     src/serviceinterface.cpp
-     src/servicemanager.h
-     src/servicemanager.cpp
-+    src/personalizeddata.h
-+    src/CSingleton.h
-+    src/personalizeddata.cpp
-+    src/rsac.h
-+    src/rsac.cpp
-     )
- 
- add_executable(uniauth-backend ${bin_SRCS})
--target_link_libraries(uniauth-backend Qt5::Core Qt5::DBus -lukui-log4qt)
-+target_link_libraries(uniauth-backend Qt5::Core Qt5::DBus -lukui-log4qt ${LIGHTDM-QT5-3_LIBRARIES} -lcrypto)
- 
- install(TARGETS uniauth-backend DESTINATION bin)
- install(FILES org.ukui.UniauthBackend.conf DESTINATION /etc/dbus-1/system.d/)
-diff --git a/uniauth-backend/src/CSingleton.h b/uniauth-backend/src/CSingleton.h
-new file mode 100644
-index 0000000..99c42d8
---- /dev/null
-+++ b/uniauth-backend/src/CSingleton.h
-@@ -0,0 +1,46 @@
-+#ifndef CSINGLETON_H
-+#define CSINGLETON_H
-+
-+
-+template <typename T>
-+class SingleTon
-+{
-+public:
-+    // 创建单例实例
-+    template<typename... Args>
-+    static T* instance(Args&&... args)
-+    {
-+        if (m_pInstance == nullptr)
-+        {
-+            m_pInstance = new T(std::forward<Args>(args)...);
-+        }
-+
-+        return m_pInstance;
-+    }
-+
-+    // 获取单例
-+    static T* getInstance()
-+    {
-+        return m_pInstance;
-+    }
-+
-+    // 删除单例
-+    static void destroyInstance()
-+    {
-+        delete m_pInstance;
-+        m_pInstance = nullptr;
-+    }
-+
-+private:
-+    SingleTon();
-+    virtual ~SingleTon();
-+
-+private:
-+    static T* m_pInstance;
-+};
-+
-+template <class T>
-+T* SingleTon<T>::m_pInstance = nullptr;
-+
-+
-+#endif
-diff --git a/uniauth-backend/src/biodeviceinfo.h b/uniauth-backend/src/biodeviceinfo.h
-index 3ec5c81..87c5f87 100644
---- a/uniauth-backend/src/biodeviceinfo.h
-+++ b/uniauth-backend/src/biodeviceinfo.h
-@@ -21,6 +21,7 @@
- #include <QDBusInterface>
- #include <QDBusArgument>
- #include <QDBusMetaType>
-+#include <memory>
- 
- struct DeviceInfo {
-     int device_id;
-@@ -52,6 +53,10 @@ enum BioType {
- 
- Q_DECLARE_METATYPE(DeviceInfo)
- Q_DECLARE_METATYPE(QList<QDBusVariant>)
-+
-+typedef std::shared_ptr<DeviceInfo> DeviceInfoPtr;
-+typedef QList<DeviceInfoPtr> DeviceList;
-+
- void registerCustomTypes();
- QDBusArgument &operator<<(QDBusArgument &argument, const DeviceInfo &deviceInfo);
- const QDBusArgument &operator>>(const QDBusArgument &argument, DeviceInfo &deviceInfo);
-diff --git a/uniauth-backend/src/main.cpp b/uniauth-backend/src/main.cpp
-index e52bac8..f719754 100644
---- a/uniauth-backend/src/main.cpp
-+++ b/uniauth-backend/src/main.cpp
-@@ -17,6 +17,7 @@
- **/
- #include <QCoreApplication>
- #include "serviceinterface.h"
-+#include "personalizeddata.h"
- #include <ukui-log4qt.h>
- 
- int main(int argc, char *argv[])
-@@ -24,6 +25,8 @@ int main(int argc, char *argv[])
-     initUkuiLog4qt("ukui-biometric-uniauth");
-     QCoreApplication a(argc, argv);
- 
-+    KYLINUSERDATAMNG::instance();
-+
-     ServiceInterface serviveInterface;
-     Q_UNUSED(serviveInterface);
- 
-diff --git a/uniauth-backend/src/personalizeddata.cpp b/uniauth-backend/src/personalizeddata.cpp
-new file mode 100644
-index 0000000..d093977
---- /dev/null
-+++ b/uniauth-backend/src/personalizeddata.cpp
-@@ -0,0 +1,345 @@
-+#include "personalizeddata.h"
-+
-+#include <QJsonDocument>
-+#include <QJsonObject>
-+#include <QJsonValue>
-+#include <QJsonParseError>
-+#include <QJsonArray>
-+#include <QFile>
-+#include <QDate>
-+#include <QTime>
-+
-+enum enum_operation
-+{
-+    enum_operation_update = 0,
-+    enum_operation_add,
-+    enum_operation_del,
-+};
-+
-+PersonalizedData::PersonalizedData(QString user)
-+{
-+    KyInfo() << user;
-+    m_user = user;
-+    m_usd_conf_path = QString("/var/lib/lightdm-data/%1/usd/config/ukui-settings-daemon.settings").arg(m_user);
-+    m_greeter_conf_path = QString("/var/lib/lightdm-data/%1/ukui-greeter.conf").arg(m_user);
-+    m_file_watch = new QFileSystemWatcher();
-+    connect(m_file_watch, &QFileSystemWatcher::fileChanged, this, &PersonalizedData::fileChanged);
-+    this->__load_conf_ukuigreeterconf();
-+    //无需读取usd配置
-+    //this->__load_conf_usd_conf();
-+
-+}
-+
-+PersonalizedData::~PersonalizedData()
-+{
-+    KyInfo() << m_user;
-+    if(0 != m_conf_TimerID)
-+    {
-+        this->killTimer(m_conf_TimerID);
-+        m_conf_TimerID = 0;
-+    }
-+    if(nullptr != m_file_watch)
-+    {
-+        delete m_file_watch;
-+        m_file_watch = nullptr;
-+    }
-+
-+}
-+
-+void PersonalizedData::getJsonData(QJsonObject & json)
-+{
-+    json["user"] = m_user;
-+    {
-+        QJsonObject json_1;
-+        json_1["dateType"] = m_dateType;
-+        json_1["fontSize"] = m_fontSize;
-+        json_1["timeType"] = m_timeType;
-+        json_1["backgroundPath"] = m_backgroundPath;
-+        json_1["color"] = m_color;
-+        json["greeter"] = json_1;
-+    }
-+}
-+
-+QString PersonalizedData::getJsonData()
-+{
-+    QJsonObject json;
-+    this->getJsonData(json);
-+    json["operation"] = enum_operation_update;
-+    QJsonDocument document;
-+    document.setObject(json);
-+    return document.toJson(QJsonDocument::Compact);
-+}
-+
-+void PersonalizedData::fileChanged(const QString &path)
-+{
-+    KyInfo() << path;
-+    if(m_greeter_conf_path == path)
-+    {
-+        m_greeter_conf_path_changed = true;
-+    }
-+    if(m_usd_conf_path == path)
-+    {
-+        m_usd_conf_path_changed = true;
-+    }
-+
-+    if(0 != m_conf_TimerID)
-+    {
-+        this->killTimer(m_conf_TimerID);
-+        m_conf_TimerID = 0;
-+    }
-+    m_conf_TimerID = this->startTimer(100);
-+}
-+
-+void PersonalizedData::timerEvent(QTimerEvent *event)
-+{
-+    KyInfo() << m_file_watch->files();
-+    if(event->timerId() == m_conf_TimerID)
-+    {
-+        this->killTimer(m_conf_TimerID);
-+        m_conf_TimerID = 0;
-+
-+        if(m_greeter_conf_path_changed)
-+        {
-+            m_greeter_conf_path_changed = false;
-+            this->__load_conf_ukuigreeterconf();
-+        }
-+        if(m_usd_conf_path_changed)
-+        {
-+            m_usd_conf_path_changed = false;
-+            this->__load_conf_usd_conf();
-+        }
-+        emit KYLINUSERDATAMNG::getInstance()->conf_changed(this->getJsonData());
-+    }
-+}
-+
-+int PersonalizedData::__load_conf_ukuigreeterconf()
-+{
-+    KyInfo();
-+    QSettings conf(m_greeter_conf_path, QSettings::IniFormat);
-+    if(QSettings::NoError != conf.status())
-+    {
-+        KyWarning() << m_greeter_conf_path << conf.status();
-+        return -1;
-+    }
-+
-+    if(conf.childGroups().contains("Greeter"))
-+    {
-+        conf.beginGroup("Greeter");
-+
-+        if(conf.contains("dateType"))
-+            m_dateType = conf.value("dateType", m_dateType).toString();
-+
-+        if(conf.contains("fontSize"))
-+            m_fontSize = conf.value("fontSize", m_fontSize).toInt();
-+
-+        if(conf.contains("timeType"))
-+            m_timeType = conf.value("timeType", m_timeType).toInt();
-+
-+        conf.endGroup();
-+    }
-+
-+    if(conf.childGroups().contains("greeter"))
-+    {
-+        conf.beginGroup("greeter");
-+
-+        if(conf.contains("backgroundPath"))
-+        {
-+            m_backgroundPath = conf.value("backgroundPath", m_backgroundPath).toString();
-+            if(!m_backgroundPath.isEmpty())
-+            {
-+                m_backgroundPath = this->__copy_file(m_backgroundPath);
-+            }
-+        }
-+
-+
-+        if(conf.contains("color"))
-+            m_color = conf.value("color", m_color).toString();
-+
-+        conf.endGroup();
-+    }
-+
-+    if(nullptr != m_file_watch && !m_file_watch->files().contains(m_greeter_conf_path))
-+    {
-+        m_file_watch->addPath(m_greeter_conf_path);
-+    }
-+    return 0;
-+}
-+
-+int PersonalizedData::__load_conf_usd_conf()
-+{
-+    KyInfo();
-+    QSettings conf(m_usd_conf_path, QSettings::IniFormat);
-+    if(QSettings::NoError != conf.status())
-+    {
-+        KyWarning() << m_usd_conf_path << conf.status();
-+        return -1;
-+    }
-+
-+    if(conf.childGroups().contains("xsettings"))
-+    {
-+        conf.beginGroup("xsettings");
-+
-+        if(conf.contains("cursor-size"))
-+            m_cursor_size = conf.value("cursor-size", m_cursor_size).toInt();
-+
-+        if(conf.contains("cursor-theme"))
-+            m_cursor_theme = conf.value("cursor-theme", m_cursor_theme).toString();
-+
-+        if(conf.contains("scaling-factor"))
-+            m_scaling_factor = conf.value("scaling-factor", m_scaling_factor).toInt();
-+
-+        conf.endGroup();
-+    }
-+
-+    if(nullptr != m_file_watch && !m_file_watch->files().contains(m_usd_conf_path))
-+    {
-+        m_file_watch->addPath(m_usd_conf_path);
-+    }
-+    return 0;
-+}
-+
-+QString PersonalizedData::__copy_file(QString oldfile)
-+{
-+    if(QFile::exists(oldfile))
-+    {
-+        QString newfile = "/tmp/loginBackground-" + m_user;
-+        QDate d =QDate::currentDate();
-+        newfile += d.toString("yyyy-MM-dd");
-+        if(QFile::exists(newfile))
-+        {
-+            QFile::remove(newfile);
-+        }
-+        if(QFile::copy(oldfile, newfile))
-+        {
-+            return newfile;
-+        }
-+    }
-+    return "";
-+}
-+
-+
-+
-+/////////////////////////PersonalizedDataMng//////////////////////////////////////
-+
-+PersonalizedDataMng::PersonalizedDataMng(void)
-+{
-+    m_usersModel = new QLightDM::UsersModel(this);
-+    connect(m_usersModel, &QAbstractListModel::rowsInserted, this, &PersonalizedDataMng::onUserAdded);
-+    connect(m_usersModel, &QAbstractListModel::rowsRemoved, this, &PersonalizedDataMng::onUserRemoved);
-+    this->__updateUsersInfo();
-+}
-+
-+PersonalizedDataMng::~PersonalizedDataMng()
-+{
-+    if(nullptr != m_usersModel)
-+    {
-+        delete m_usersModel;
-+        m_usersModel = nullptr;
-+    }
-+}
-+
-+QString PersonalizedDataMng::GetConfInformation(QString name)
-+{
-+    QJsonObject json;
-+    if(m_userPersonalizedData.contains(name))
-+    {
-+        QJsonObject json1;
-+        m_userPersonalizedData[name]->getJsonData(json1);
-+        json[name] = json1;
-+    }
-+    else if(name.isEmpty())
-+    {
-+        for(auto & it : m_userPersonalizedData.toStdMap())
-+        {
-+            QJsonObject json1;
-+            it.second->getJsonData(json1);
-+            json[it.first] = json1;
-+        }
-+    }
-+    else if("lightdm" == name)
-+    {
-+        QString tmp(m_lightdm_str);
-+        m_lightdm_str = "";
-+        return tmp;
-+    }
-+
-+    QJsonDocument document;
-+    document.setObject(json);
-+    QString strJson(document.toJson(QJsonDocument::Compact));
-+    KyDebug() << strJson;
-+    return strJson;
-+}
-+
-+void PersonalizedDataMng::SetLoginSynInformation(QString val)
-+{
-+    m_lightdm_str = val;
-+}
-+
-+void PersonalizedDataMng::onUserAdded(const QModelIndex &, int left, int right)
-+{
-+    if(!m_usersModel)
-+        return;
-+
-+    for(int i = left; i <= right; i++)
-+    {
-+        QString name = m_usersModel->index(i).data(QLightDM::UsersModel::NameRole).toString();
-+        KyInfo() << left << right << name;
-+        if(!name.isEmpty())
-+        {
-+             m_userPersonalizedData[name] = KylinUserDatePtr(new PersonalizedData(name));
-+
-+             QJsonObject json;
-+             m_userPersonalizedData[name]->getJsonData(json);
-+             json["operation"] = enum_operation_add;
-+             QJsonDocument document;
-+             document.setObject(json);
-+             emit conf_changed(document.toJson());
-+        }
-+    }
-+}
-+
-+void PersonalizedDataMng::onUserRemoved(const QModelIndex &, int, int)
-+{
-+    if(!m_usersModel)
-+        return;
-+
-+    auto tmp = m_userPersonalizedData;
-+    for(int i = 0; i < m_usersModel->rowCount(QModelIndex()); i++)
-+    {
-+        QString name = m_usersModel->index(i).data(QLightDM::UsersModel::NameRole).toString();
-+        if(!name.isEmpty())
-+            tmp.remove(name);
-+    }
-+
-+    if(tmp.size() > 0)
-+    {
-+        KyInfo() << tmp.begin().key();
-+        m_userPersonalizedData.remove(tmp.begin().key());
-+
-+        QJsonObject json;
-+        json["operation"] = enum_operation_del;
-+        json["user"] = tmp.begin().key();
-+        QJsonDocument document;
-+        document.setObject(json);
-+        emit conf_changed(document.toJson());
-+    }
-+}
-+
-+void PersonalizedDataMng::__updateUsersInfo()
-+{
-+    if (m_usersModel)
-+    {
-+        for(int i = 0; i < m_usersModel->rowCount(QModelIndex()); i++)
-+        {
-+            QString name = m_usersModel->index(i).data(QLightDM::UsersModel::NameRole).toString();
-+            if(!name.isEmpty())
-+            {
-+                m_userPersonalizedData[name] = KylinUserDatePtr(new PersonalizedData(name));
-+            }
-+
-+        }
-+    }
-+}
-+
-+
-+
-diff --git a/uniauth-backend/src/personalizeddata.h b/uniauth-backend/src/personalizeddata.h
-new file mode 100644
-index 0000000..b8fb872
---- /dev/null
-+++ b/uniauth-backend/src/personalizeddata.h
-@@ -0,0 +1,140 @@
-+#ifndef PERSONALIZEDDATA_H
-+#define PERSONALIZEDDATA_H
-+
-+#include <QObject>
-+#include <QSettings>
-+#include <QMap>
-+#include <QFile>
-+#include <QTimer>
-+#include <QEventLoop>
-+#include <QTimerEvent>
-+#include <QFileSystemWatcher>
-+#include <QSharedPointer>
-+#include <QLightDM/Greeter>
-+#include <QLightDM/SessionsModel>
-+#include <QLightDM/UsersModel>
-+#include <QModelIndex>
-+
-+#include <QJsonDocument>
-+#include <QJsonObject>
-+#include <QJsonValue>
-+#include <QJsonParseError>
-+#include <QJsonArray>
-+
-+#include "ukui-log4qt.h"
-+#include "CSingleton.h"
-+
-+
-+class PersonalizedData : public QObject
-+{
-+    Q_OBJECT
-+public:
-+    explicit PersonalizedData(QString user);
-+    virtual ~PersonalizedData();
-+
-+    ////////////////////ukui-greeter-conf//////////////////////////////
-+    QString dateType(void){ return m_dateType; }
-+    void dateType(QString val){ m_dateType = val; }
-+
-+    int fontSize(void){ return m_fontSize; }
-+    void fontSize(int val){ m_fontSize = val; }
-+
-+    int timeType(void){ return m_timeType; }
-+    void timeType(int val){ m_timeType = val; }
-+
-+    QString backgroundPath(void){ return m_backgroundPath; }
-+    void backgroundPath(QString val){ m_backgroundPath = val; }
-+
-+    QString color(void){ return m_color; }
-+    void color(QString val){ m_color = val; }
-+
-+    /////////////////////usd-ukui-settings-daemon////////////////////////////////
-+    int cursor_size(void){ return m_cursor_size; }
-+    void cursor_size(int val){ m_cursor_size = val; }
-+
-+    QString cursor_theme(void){ return m_cursor_theme; }
-+    void cursor_theme(QString val){ m_cursor_theme = val; }
-+
-+    int scaling_factor(void){ return m_scaling_factor; }
-+    void scaling_factor(int val){ m_scaling_factor = val; }
-+
-+
-+    void getJsonData(QJsonObject & json);
-+    QString getJsonData(void);
-+
-+
-+protected slots:
-+    void fileChanged(const QString &path);
-+
-+    virtual void timerEvent( QTimerEvent *event);
-+
-+private:
-+    int __load_conf_ukuigreeterconf(void);
-+    int __load_conf_usd_conf(void);
-+    QString __copy_file(QString);
-+protected:
-+    //ukui-greeter-conf
-+    QString m_dateType = "cn";
-+    int m_fontSize = 5;
-+    int m_timeType = 24;
-+    QString m_backgroundPath;
-+    QString m_color;
-+
-+    //usd-ukui-settings-daemon
-+    int m_cursor_size = 48;
-+    QString m_cursor_theme;
-+    int m_scaling_factor = 1;
-+
-+    //用户名
-+    QString m_user;
-+
-+    QFileSystemWatcher * m_file_watch = nullptr;
-+    QString m_greeter_conf_path;
-+    bool m_greeter_conf_path_changed = false;
-+    QString m_usd_conf_path;
-+    bool m_usd_conf_path_changed = false;
-+    int m_conf_TimerID = 0;
-+};
-+
-+
-+
-+typedef QSharedPointer<PersonalizedData> KylinUserDatePtr;
-+
-+/////////////////////////////////////////////////
-+/// \brief The PersonalizedDataMng class
-+///
-+
-+class PersonalizedDataMng : public QObject
-+{
-+    Q_OBJECT
-+protected:
-+    explicit PersonalizedDataMng(void);
-+    virtual ~PersonalizedDataMng();
-+
-+
-+public:
-+    QString GetConfInformation(QString);
-+
-+    void SetLoginSynInformation(QString val);
-+
-+signals:
-+    void conf_changed(QString jsonstr);
-+
-+protected Q_SLOTS:
-+    void onUserAdded(const QModelIndex&, int, int);
-+
-+    void onUserRemoved(const QModelIndex&, int, int );
-+
-+protected:
-+    void __updateUsersInfo();
-+
-+protected:
-+    QMap<QString, KylinUserDatePtr > m_userPersonalizedData;
-+    QLightDM::UsersModel  * m_usersModel = nullptr;
-+    QString m_lightdm_str;
-+    friend class SingleTon<PersonalizedDataMng>;
-+};
-+
-+typedef SingleTon<PersonalizedDataMng>  KYLINUSERDATAMNG;
-+
-+#endif // PERSONALIZEDDATA_H
-diff --git a/uniauth-backend/src/rsac.cpp b/uniauth-backend/src/rsac.cpp
-new file mode 100644
-index 0000000..0c6877d
---- /dev/null
-+++ b/uniauth-backend/src/rsac.cpp
-@@ -0,0 +1,199 @@
-+#include "rsac.h"
-+#include <openssl/rsa.h>
-+#include <openssl/pem.h>
-+
-+RSA* publicKeyToRSA(const QByteArray &pubKey)
-+{
-+    BIO *pBio = BIO_new_mem_buf(pubKey.data(), pubKey.size()); // 创建内存
-+    RSA* rsa = PEM_read_bio_RSA_PUBKEY(pBio, nullptr, nullptr, nullptr);
-+    BIO_free_all(pBio); // 释放内存
-+    return rsa;
-+}
-+
-+RSA* privateKeyToRSA(const QByteArray &priKey)
-+{
-+    BIO *pBio = BIO_new_mem_buf(priKey.data(), priKey.size()); // 创建内存
-+    RSA* rsa = PEM_read_bio_RSAPrivateKey(pBio, nullptr, nullptr, nullptr);
-+    BIO_free_all(pBio); // 释放内存
-+    return rsa;
-+}
-+
-+/**
-+ * @brief RSAC::generateKeyPair
-+ * 生成密钥对,并分别保存为文件
-+ * @param priKeyFile 私钥文件名
-+ * @param pubKeyFile 公钥文件名
-+ * @param bits 秘钥长度,一般建议1024及以上
-+ */
-+void RSAC::generateKeyPair(const QString &priKeyFile, const QString &pubKeyFile, int bits)
-+{
-+    // 生成公钥
-+    RSA* rsa = RSA_generate_key(bits, RSA_F4, nullptr, nullptr);
-+    BIO *bp = BIO_new(BIO_s_file());
-+    BIO_write_filename(bp, (void*)pubKeyFile.toStdString().c_str());
-+    PEM_write_bio_RSAPublicKey(bp, rsa);
-+    BIO_free_all(bp);
-+
-+    // 生成私钥
-+    bp = BIO_new(BIO_s_file());
-+    BIO_write_filename(bp, (void*)priKeyFile.toStdString().c_str());
-+    PEM_write_bio_RSAPrivateKey(bp, rsa, nullptr, nullptr, 0, nullptr, nullptr);
-+    CRYPTO_cleanup_all_ex_data();
-+    BIO_free_all(bp);
-+    RSA_free(rsa);
-+}
-+
-+/**
-+ * @brief RSAC::generateKeyPair
-+ * 生成密钥对数据
-+ * @param privateKey 私钥数据
-+ * @param publicKey 公钥数据
-+ * @param bits 秘钥长度,一般建议1024及以上
-+ */
-+void RSAC::generateKeyPair(QByteArray &privateKey, QByteArray &pubKey, int bits)
-+{
-+    // 生成密钥对
-+    RSA *keyPair = RSA_generate_key(bits, RSA_F4, nullptr, nullptr);
-+
-+    BIO *pri = BIO_new(BIO_s_mem());
-+    BIO *pub = BIO_new(BIO_s_mem());
-+
-+    PEM_write_bio_RSAPrivateKey(pri, keyPair, nullptr, nullptr, 0, nullptr, nullptr);
-+    PEM_write_bio_RSA_PUBKEY(pub, keyPair);
-+
-+    // 获取长度
-+    int pri_len = BIO_pending(pri);
-+    int pub_len = BIO_pending(pub);
-+
-+    privateKey.resize(pri_len);
-+    pubKey.resize(pub_len);
-+
-+    BIO_read(pri, privateKey.data(), pri_len);
-+    BIO_read(pub, pubKey.data(), pub_len);
-+
-+    // 内存释放
-+    RSA_free(keyPair);
-+    BIO_free_all(pub);
-+    BIO_free_all(pri);
-+}
-+
-+/**
-+ * @brief RSAC::encrypt
-+ * RSA加密函数,使用公钥对输入数据,进行加密
-+ * @param in 输入数据(明文)
-+ * @param out 输出数据(密文)
-+ * @param pubKey 公钥
-+ * @return 执行结果
-+ */
-+bool RSAC::encrypt(const QByteArray &in, QByteArray &out, const QByteArray& pubKey)
-+{
-+    // 公钥数据转RSA
-+    RSA* rsa = publicKeyToRSA(pubKey);
-+    if (rsa == nullptr)
-+    {
-+        return false;
-+    }
-+
-+    // 对任意长度数据进行加密,超长时,进行分段加密
-+    int keySize = RSA_size(rsa);
-+    int dataLen = in.size();
-+    const unsigned char *from = (const unsigned char *)in.data();
-+    QByteArray to(keySize, 0);
-+    int readLen = 0;
-+    do
-+    {
-+        int select = (keySize - 11) > dataLen ? dataLen : (keySize - 11);
-+        RSA_public_encrypt(select, (from + readLen), (unsigned char *)to.data(), rsa, RSA_PKCS1_PADDING);
-+        dataLen -= select;
-+        readLen += select;
-+        out.append(to);
-+    }while (dataLen > 0);
-+    RSA_free(rsa);
-+    return true;
-+}
-+
-+/**
-+ * @brief RSAC::private_decrypt
-+ * RSA解密函数,使用私钥对输入数据,进行解密
-+ * @param in 输入数据(密文)
-+ * @param out 输出数据(解密后的内容)
-+ * @param priKey 私钥
-+ * @return 执行结果
-+ */
-+bool RSAC::decrypt(const QByteArray &in, QByteArray &out, const QByteArray& priKey)
-+{
-+    // 私钥数据转RSA
-+    RSA* rsa = privateKeyToRSA(priKey);
-+    if (rsa == nullptr)
-+    {
-+        return false;
-+    }
-+
-+    // 对任意长度数据进行解密,超长时,进行分段解密
-+    int keySize = RSA_size(rsa);
-+    int dataLen = in.size();
-+    const unsigned char *from = (const unsigned char *)in.data();
-+    QByteArray to(keySize, 0);
-+    int readLen = 0;
-+    do
-+    {
-+        int size = RSA_private_decrypt(keySize, (from + readLen), (unsigned char *)to.data(), rsa, RSA_PKCS1_PADDING);
-+        dataLen -= keySize;
-+        readLen += keySize;
-+        out.append(to.data(), size);
-+    }while (dataLen > 0);
-+    RSA_free(rsa);
-+    return true;
-+}
-+
-+/**
-+ * @brief RSAC::sign
-+ * 使用私钥对摘要数据进行签名
-+ * @param digest 摘要数据
-+ * @param sign 签名后的数据
-+ * @param priKey 私钥
-+ * @return 执行结果
-+ */
-+bool RSAC::sign(const QByteArray &digest, QByteArray &sign, const QByteArray& priKey)
-+{
-+    // 私钥数据转RSA
-+    RSA* rsa = privateKeyToRSA(priKey);
-+    if (rsa == nullptr)
-+    {
-+        return false;
-+    }
-+
-+    // 对digest进行签名
-+    unsigned int siglen = 0;
-+    QByteArray temp(RSA_size(rsa), 0);
-+    RSA_sign(NID_sha1, (const unsigned char*)digest.data(), digest.size(),
-+             (unsigned char*)temp.data(), &siglen, rsa);
-+    sign.clear();
-+    sign.append(temp.data(), siglen);
-+    RSA_free(rsa);
-+    return true;
-+}
-+
-+/**
-+ * @brief RSAC::verify
-+ * 使用公钥对摘要数据进行验签
-+ * @param digest 摘要数据
-+ * @param sign 签名后的数据
-+ * @param pubKey 公钥
-+ * @return 执行结果
-+ */
-+bool RSAC::verify(const QByteArray &digest, const QByteArray &sign, const QByteArray& pubKey)
-+{
-+    // 公钥数据转RSA
-+    RSA* rsa = publicKeyToRSA(pubKey);
-+    if (rsa == nullptr)
-+    {
-+        return false;
-+    }
-+
-+    // 对digest、sign进行验签
-+    int ret = RSA_verify(NID_sha1, (const unsigned char*)digest.data(), digest.size(),
-+               (const unsigned char *)sign.data(), sign.size(), rsa);
-+    RSA_free(rsa);
-+    return (ret == 1);
-+}
-diff --git a/uniauth-backend/src/rsac.h b/uniauth-backend/src/rsac.h
-new file mode 100644
-index 0000000..93d4678
---- /dev/null
-+++ b/uniauth-backend/src/rsac.h
-@@ -0,0 +1,26 @@
-+#ifndef RSAC_H
-+#define RSAC_H
-+
-+#include <QString>
-+
-+/**
-+ * @brief The RSAC class
-+ * RSA算法相关实现,包括密钥对生成,加密与解密,签名与验签。
-+ */
-+class RSAC
-+{
-+public:
-+    // 生成秘钥对
-+    void generateKeyPair(const QString& priKeyFile, const QString &pubKeyFile, int bits = 1024);
-+    void generateKeyPair(QByteArray& priKey, QByteArray& pubKey, int bits = 1024);
-+
-+    // 对数据进行加解密
-+    bool encrypt(const QByteArray& in, QByteArray& out, const QByteArray& pubKey);
-+    bool decrypt(const QByteArray& in, QByteArray& out, const QByteArray& priKey);
-+
-+    // 对摘要进行签名和验签
-+    bool sign(const QByteArray& digest, QByteArray& sign, const QByteArray &priKey);
-+    bool verify(const QByteArray& digest, const QByteArray &sign, const QByteArray &pubKey);
-+};
-+
-+#endif // RSAC_H
-diff --git a/uniauth-backend/src/serviceinterface.cpp b/uniauth-backend/src/serviceinterface.cpp
-index b6ae9f0..58670dd 100644
---- a/uniauth-backend/src/serviceinterface.cpp
-+++ b/uniauth-backend/src/serviceinterface.cpp
-@@ -19,6 +19,9 @@
- #include <QDBusConnection>
- #include <QSettings>
- #include <QDir>
-+#include <QRegExp>
-+#include <QFile>
-+#include <QTimer>
- #include <pwd.h>
- #include <unistd.h>
- #include <sys/types.h>
-@@ -29,11 +32,25 @@
- #include <QDBusMetaType>
- #include <QDBusConnectionInterface>
- #include <QDBusContext>
-+#include <QDBusInterface>
- #include <QDBusMessage>
- #include "servicemanager.h"
-+#include "personalizeddata.h"
-+#include <unistd.h>
-+#include <openssl/rsa.h>
-+#include <openssl/pem.h>
-+
-+#define UKUI_GREETER        "/usr/sbin/ukui-greeter"
-+#define UKUI_SCREENSAVER    "/usr/bin/ukui-screensaver-dialog"
- 
-+#define GREETER_DBUS_PATH           "/"
-+#define GREETER_DBUS_INTERFACE      "org.ukui.greeter"
-+#define SCREENSAVER_DBUS_PATH       "/"
-+#define SCREENSAVER_DBUS_INTERFACE  "org.ukui.screensaver"
- #define COMM_CONFIG_PATH "/etc/biometric-auth/ukui-biometric.conf"
- #define USER_CONFIG_PATH "/home/%1/.biometric_auth/ukui_biometric.conf"
-+#define OLD_990_USER_CONFIG_PATH "/home/%1/.biometric-auth/ukui-biometric.conf"
-+#define PROC_CPUINFO "/proc/cpuinfo"
- 
- ServiceInterface::ServiceInterface()
- {
-@@ -50,9 +67,10 @@ ServiceInterface::ServiceInterface()
-     }
- 
-     registerCustomTypes();
-+    checkIs990();
-     m_serviceInterface = new QDBusInterface(DBUS_SERVICE, DBUS_PATH,
-                                             DBUS_INTERFACE,
--                                            QDBusConnection::systemBus());
-+                                            QDBusConnection::systemBus(), this);
- 
-     m_serviceInterface->setTimeout(2147483647);
-     connect(m_serviceInterface, SIGNAL(USBDeviceHotPlug(int, int, int)),
-@@ -63,6 +81,9 @@ ServiceInterface::ServiceInterface()
-     ServiceManager *sm = ServiceManager::instance();
-     connect(sm, &ServiceManager::serviceStatusChanged,
-             this, &ServiceInterface::onBiometricDbusChanged);
-+
-+    rsac.generateKeyPair(priKey, pubKey, 1024);
-+    connect(KYLINUSERDATAMNG::getInstance(), &PersonalizedDataMng::conf_changed, this, &ServiceInterface::updateUserInformation);
- }
- 
- void ServiceInterface::setDefaultDevice(QString userName, int bioDevType, QString deviceName)
-@@ -475,8 +496,22 @@ bool ServiceInterface::getBioAuthStatus(QString userName, int bioAuthType)
-     default:
-         return false;
-     }
-+
-+    //同步990旧的配置文件,然后删除
-+    if(getIs990() && (bioAuthType == ENABLETYPE_BIO)){
-+        QString oldConfigPath = QString(OLD_990_USER_CONFIG_PATH).arg(userName);
-+        QSettings oldSettings(oldConfigPath, QSettings::IniFormat);
-+        if(oldSettings.contains(strBioAuthType)){
-+            settings.setValue(strBioAuthType,oldSettings.value(strBioAuthType).toBool());
-+            oldSettings.remove(strBioAuthType);
-+            oldSettings.sync();
-+        }
-+    }
-     if (settings.contains(strBioAuthType)) {
-         return settings.value(strBioAuthType).toBool();
-+    }else if(getIs990() && (bioAuthType == ENABLETYPE_BIO)){
-+        //990默认为打开
-+        return true;
-     } else {
-         QSettings settings2(COMM_CONFIG_PATH, QSettings::IniFormat);
-         if (settings2.contains(strBioAuthType)) {
-@@ -496,6 +531,23 @@ int ServiceInterface::getMaxFailedTimes()
-         return 3;
- }
- 
-+int ServiceInterface::getFTimeoutTimes()
-+{
-+    QSettings sysSettings(COMM_CONFIG_PATH, QSettings::IniFormat);
-+    if(sysSettings.contains("FaceTimeoutTimes"))
-+        return sysSettings.value("FaceTimeoutTimes").toInt();
-+    else
-+        return 1;
-+}
-+
-+void ServiceInterface::setFTimeoutTimes(int times)
-+{
-+    if (times < 1)
-+        times = 1;
-+    QSettings settings(COMM_CONFIG_PATH, QSettings::IniFormat);
-+    settings.setValue("FaceTimeoutTimes", times);
-+}
-+
- bool ServiceInterface::getQRCodeEnable()
- {
-     bool isEnable = false;
-@@ -576,6 +628,44 @@ void ServiceInterface::onUSBDeviceHotPlug(int drvid, int action, int deviceNum)
-     }
- }
- 
-+//记录当前生物认证信息
-+void ServiceInterface::recordAuthDrive(QString appName,int drvid,bool insert)
-+{
-+    if(insert){
-+        m_AuthingDriveList.insert(appName,drvid);
-+    }else{
-+        m_AuthingDriveList.remove(appName);
-+    }
-+}
-+
-+
-+//获取当前正在认证的应用
-+QStringList ServiceInterface::getAllAuthApp()
-+{
-+    return m_AuthingDriveList.keys();
-+}
-+
-+//根据应用名称获取认证的驱动
-+int ServiceInterface::getAppAuthDrive(QString appName)
-+{
-+    if(m_AuthingDriveList.contains(appName)){
-+        return m_AuthingDriveList.value(appName);
-+    }
-+    return -1;
-+}
-+
-+QString ServiceInterface::GetUserInformation(QString username)
-+{
-+    KyInfo() << username;
-+    return KYLINUSERDATAMNG::getInstance()->GetConfInformation(username);
-+}
-+
-+void ServiceInterface::SetLoginSynInformation(QString val)
-+{
-+    KyInfo() << val;
-+    KYLINUSERDATAMNG::getInstance()->SetLoginSynInformation(val);
-+}
-+
- void ServiceInterface::waitBiometricServiceStatus()
- {
-     qDebug()<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~` get biometric status";
-@@ -628,7 +718,7 @@ void ServiceInterface::updateCommDefaultDevice(int nDriId)
-     QDBusArgument argument;
-     QList<QDBusVariant> qlist;
-     QDBusVariant item;
--    DeviceInfo *deviceInfo;
-+    DeviceInfoPtr deviceInfo = nullptr;
- 
-     /* 返回值为 i -- int 和 av -- array of variant */
-     QDBusPendingReply<int, QList<QDBusVariant> > reply = m_serviceInterface->call("GetDrvList");
-@@ -652,7 +742,7 @@ void ServiceInterface::updateCommDefaultDevice(int nDriId)
-             variant = item.variant(); /* 转为普通QVariant对象 */
-             /* 解封装得到 QDBusArgument 对象 */
-             argument = variant.value<QDBusArgument>();
--            deviceInfo = new DeviceInfo();
-+            deviceInfo = std::make_shared<DeviceInfo>();
-             argument >> *deviceInfo; /* 提取最终的 DeviceInfo 结构体 */
-             if (nDriId == deviceInfo->device_id) {
-                 if (getCommDefaultDevice(deviceInfo->biotype).isEmpty()) {
-@@ -662,19 +752,13 @@ void ServiceInterface::updateCommDefaultDevice(int nDriId)
-             }
-         }
-     } else {
--        for (auto devInfo : m_listDeviceInfos) {
--            if (devInfo) {
--                delete devInfo;
--                devInfo = nullptr;
--            }
--        }
-         m_listDeviceInfos.clear();
-         for (int i = 0; i < deviceCount; i++) {
-             item = qlist[i]; /* 取出一个元素 */
-             variant = item.variant(); /* 转为普通QVariant对象 */
-             /* 解封装得到 QDBusArgument 对象 */
-             argument = variant.value<QDBusArgument>();
--            deviceInfo = new DeviceInfo();
-+            deviceInfo = std::make_shared<DeviceInfo>();
-             argument >> *deviceInfo; /* 提取最终的 DeviceInfo 结构体 */
-             m_listDeviceInfos.push_back(deviceInfo);
-         }
-@@ -797,3 +881,230 @@ void ServiceInterface::onBiometricDbusChanged(bool bActive)
-         initData();
-     }
- }
-+
-+void ServiceInterface::checkIs990()
-+{
-+    QRegExp  r1("kirin.*9.0");
-+    r1.setCaseSensitivity(Qt::CaseInsensitive);
-+    QRegExp r2("pangu.*m900");
-+    r2.setCaseSensitivity(Qt::CaseInsensitive);
-+
-+    QFile file(PROC_CPUINFO);
-+    if(!file.exists()){
-+        is990 = false;
-+    }
-+    file.open(QFile::ReadOnly);
-+    QString str(file.readAll());
-+    is990 = (str.contains(r1) || str.contains(r2));
-+    file.close();
-+}
-+
-+bool ServiceInterface::getIs990()
-+{
-+    return is990;
-+}
-+
-+QString ServiceInterface::getPublicEncrypt()
-+{
-+    return pubKey;
-+}
-+
-+bool ServiceInterface::sendPassword(QString username,QByteArray password)
-+{
-+    QByteArray decryptText;
-+    QByteArray encryptText;
-+    rsac.decrypt(password, decryptText, priKey);     // 解密
-+    //如果处于登录状态
-+
-+    qDebug()<<"sendPassword"<<loginAppList.count();
-+    if(loginAppList.contains("lightdm")){
-+        qDebug()<<"login:";
-+        isFirstLogin = false;
-+        QString publicKey = getLoginPubKey(loginAppList.value("lightdm"),GREETER_DBUS_PATH,GREETER_DBUS_INTERFACE);
-+        rsac.encrypt(decryptText, encryptText, publicKey.toLatin1());
-+        return sendLoginPassword(loginAppList.value("lightdm"),GREETER_DBUS_PATH,GREETER_DBUS_INTERFACE,username,encryptText);
-+    }
-+
-+    //处于锁屏状态
-+    if(loginAppList.contains(username)){
-+        qDebug()<<"unlock:";
-+        isFirstLogin = false;
-+        QString publicKey = getLoginPubKey(loginAppList.value(username),SCREENSAVER_DBUS_PATH,SCREENSAVER_DBUS_INTERFACE);
-+        rsac.encrypt(decryptText, encryptText, publicKey.toLatin1());
-+        return sendLoginPassword(loginAppList.value(username),SCREENSAVER_DBUS_PATH,SCREENSAVER_DBUS_INTERFACE,username,encryptText);
-+    }
-+
-+    //如果是第一次调用,则配置自动登录
-+    if(isFirstLogin){
-+        qDebug()<<"isFirstLogin:";
-+        isFirstLogin = false;
-+        hasSaveLogin = true;
-+        return handleFirstSingleLogn(username,decryptText);
-+    }
-+
-+    isFirstLogin = false;
-+    return false;
-+}
-+
-+bool ServiceInterface::handleFirstSingleLogn(QString username,QByteArray decryptText)
-+{
-+     QEventLoop loopTemp;
-+     bool ret = false;
-+     QByteArray encryptText;
-+
-+     qDebug()<<"handleFirstSingleLogn wait";
-+     QMetaObject::Connection connection = QObject::connect(this, &ServiceInterface::onLoginServicdRegisted, [&loopTemp]() {
-+         if (loopTemp.isRunning()) {
-+             loopTemp.quit();
-+         }
-+     });
-+     QTimer::singleShot(10000, &loopTemp, SLOT(quit()));
-+     loopTemp.exec();
-+     qDebug()<<"handleFirstSingleLogn finished";
-+     disconnect(connection);
-+     qDebug()<<loginAppList.count();
-+     if(loginAppList.contains("lightdm")){
-+         isFirstLogin = false;
-+         QString publicKey = getLoginPubKey(loginAppList.value("lightdm"),GREETER_DBUS_PATH,GREETER_DBUS_INTERFACE);
-+         if(publicKey.isEmpty()){
-+             qDebug()<<"get Login PubKey failed!";
-+             return false;
-+         }
-+         rsac.encrypt(decryptText, encryptText, publicKey.toLatin1());
-+         return sendLoginPassword(loginAppList.value("lightdm"),GREETER_DBUS_PATH,GREETER_DBUS_INTERFACE,username,encryptText);
-+     }
-+     return ret;
-+}
-+
-+QString  ServiceInterface::getLoginPubKey(QString service,QString path,QString interface)
-+{
-+    QDBusInterface iface(service,
-+                             path,
-+                             interface,
-+                             QDBusConnection::systemBus());
-+    QDBusReply<QString> stateReply = iface.call("getPublicEncrypt");
-+
-+    if(!stateReply.isValid()){
-+        qWarning()<< "Get state error:" << stateReply.error();
-+        qDebug()<<"getPublicEncrypt failed";
-+        return "";
-+    }
-+    return stateReply.value();
-+}
-+
-+bool ServiceInterface::sendSignalLoginFinished(QString username,bool res)
-+{
-+    qDebug()<<"sendSignalLoginFinished "<<username<<res;
-+    emit onSignalLoginFinished(username,res);
-+
-+    return true;
-+}
-+
-+bool  ServiceInterface::sendLoginPassword(QString service,QString path,QString interface,QString username,QByteArray array)
-+{
-+    QEventLoop loopTemp;
-+    bool ret = false;
-+
-+    qDebug()<<"sendLoginPassword";
-+    QMetaObject::Connection connection = QObject::connect(this, &ServiceInterface::onSignalLoginFinished, [&loopTemp,&ret](QString username,bool res) {
-+        qDebug()<<"onSignalLoginFinished:"<<username<<res;
-+        ret = res;
-+        if (loopTemp.isRunning()) {
-+                loopTemp.quit();
-+        }
-+    });
-+
-+    QDBusInterface iface(service,
-+                         path,
-+                         interface,
-+                         QDBusConnection::systemBus());
-+
-+    QDBusReply<bool> stateReply = iface.call("sendPassword",username,array);
-+    if(!stateReply.isValid()){
-+        disconnect(connection);
-+        return false;
-+    }
-+
-+    if(!stateReply.value()){
-+        disconnect(connection);
-+        return stateReply.value();
-+    }
-+
-+    QTimer::singleShot(30000, &loopTemp, SLOT(quit()));
-+
-+    loopTemp.exec();
-+    disconnect(connection);
-+
-+    return ret;
-+}
-+QString ServiceInterface::getProcessNameFromPid(int pid)
-+{
-+    QString filename = "/proc/" + QString::number(pid) + "/cmdline";
-+    qDebug()<<"filename is "<<filename;
-+    QFile file(filename);
-+    if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
-+        qDebug()<<"Can't open the file!"<<endl;
-+        return "";
-+    }
-+    QByteArray text = file.readAll();
-+    return QString(text);
-+}
-+
-+QString ServiceInterface::getUserNameFromUid(int uid)
-+{
-+    struct passwd *pw = NULL;
-+    pw = getpwuid(uid);
-+    if(pw){
-+        return QString(pw->pw_name);
-+    }
-+    return "";
-+}
-+
-+void ServiceInterface::onDbusNameOwnerChanged(QString name,QString oldOwner,QString newOwner)
-+{
-+    if(newOwner.isEmpty()){
-+        for(QString str:loginAppList.keys()){
-+            if(name == loginAppList.value(str)){
-+                qDebug()<<"remove name  "<<name;
-+                loginAppList.remove(str);
-+            }
-+        }
-+    }
-+}
-+
-+bool ServiceInterface::registerLoginApp()
-+{
-+    QDBusConnection conn = connection();
-+    QDBusMessage msg = message();
-+
-+    qDebug() << "Sender Name" << conn.interface()->serviceOwner(msg.service()).value();
-+    qDebug() << "Sender Pid " << conn.interface()->servicePid(msg.service()).value();
-+    qDebug() << "Sender uid " << conn.interface()->serviceUid(msg.service()).value();
-+
-+    int pid = conn.interface()->servicePid(msg.service()).value();
-+    QString serviceOwner = conn.interface()->serviceOwner(msg.service()).value();
-+    int uid = conn.interface()->serviceUid(msg.service()).value();
-+
-+    QString appName = getProcessNameFromPid(pid);
-+    qDebug()<<"appName = "<<appName;
-+
-+    if(appName != UKUI_GREETER && appName != UKUI_SCREENSAVER){
-+        return false;
-+    }
-+
-+    QString appUser = getUserNameFromUid(uid);
-+    if(appUser.isEmpty())
-+        return false;
-+
-+    qDebug()<<"insert "<<appUser<<serviceOwner;
-+    loginAppList.insert(appUser,serviceOwner);
-+
-+    if(appUser == "lightdm" && hasSaveLogin){
-+        QTimer::singleShot(1000, this, [=](){
-+           emit onLoginServicdRegisted();
-+        });
-+    }
-+
-+    return true;
-+}
-+
-diff --git a/uniauth-backend/src/serviceinterface.h b/uniauth-backend/src/serviceinterface.h
-index dddf1cc..cf13d8c 100644
---- a/uniauth-backend/src/serviceinterface.h
-+++ b/uniauth-backend/src/serviceinterface.h
-@@ -22,7 +22,10 @@
- #include <QCoreApplication>
- #include <QDBusContext>
- #include <QObject>
-+#include <QMap>
- #include <QFileSystemWatcher>
-+#include <QDBusInterface>
-+#include "rsac.h"
- 
- #define DBUS_SERVICE "org.ukui.Biometric"
- #define DBUS_PATH "/org/ukui/Biometric"
-@@ -57,6 +60,10 @@ public slots:
-     void setBioAuthStatus(int bioAuthType, bool status);
-     // 获取最大失败次数
-     int getMaxFailedTimes();
-+    // 获取人脸识别超时停用次数
-+    int getFTimeoutTimes();
-+    // 设置人脸识别超时停用次数
-+    void setFTimeoutTimes(int times);
-     // 获取是否使能微信扫码登录
-     bool getQRCodeEnable();
-     // 获取是否双认证
-@@ -69,17 +76,39 @@ public slots:
-     bool getUseFirstDevice();
-     // 获取是否隐藏切换按钮
-     bool getHiddenSwitchButton();
--
-+    // 记录当前正在进行生物认证的设备
-+    void recordAuthDrive(QString appName,int drvid,bool insert);
-+    // 获取当前正在进行生物认证的应用
-+    QStringList getAllAuthApp();
-+    // 获取当前应用在认证的驱动
-+    int	getAppAuthDrive(QString appName);
-+    //获取用户配置
-+    QString GetUserInformation(QString username);
-+    //同步登录界面配置
-+    void SetLoginSynInformation(QString val);
-+    // 获取公钥    
-+    QString getPublicEncrypt();
-+    //发送用户名和密码
-+    bool sendPassword(QString username,QByteArray password);
-+    //前端注册到后端接口
-+    bool registerLoginApp();
-+    //发送认证结果
-+    bool sendSignalLoginFinished(QString username,bool res);
- private slots:
-     void onUSBDeviceHotPlug(int drvid, int action, int deviceNum);
-     void onBiometricDbusChanged(bool bActive);
--
-+    void onDbusNameOwnerChanged(QString name,QString oldOwner,QString newOwner);
- signals:
-     //默认设备改变
-     void defaultDeviceChanged(QString userName, int bioDevType, QString deviceName);
-     //开关状态改变
-     void bioAuthStatusChanged(QString userName, int type, bool status);
--
-+    //用户配置改变
-+    void updateUserInformation(QString jsonstring);
-+    //单点登录完成信号
-+    void onSignalLoginFinished(QString username,bool res);
-+    //登录服务以启动信号
-+    void onLoginServicdRegisted();
- private:
-     //设置默认设备
-     void setDefaultDevice(QString userName, int bioDevType, QString deviceName);
-@@ -95,11 +124,34 @@ private:
-     void updateCommDefaultDevice(int nDriId);
-     // 等待生物识别服务
-     void waitBiometricServiceStatus();
--
-+    //判断系统是否为990
-+    void checkIs990();
-+    //获取系统是否为990
-+    bool getIs990();
-+    //根据pid获取进程名称
-+    QString getProcessNameFromPid(int pid);
-+    //根据uid获取用户名
-+    QString getUserNameFromUid(int uid);
-+    //获取登录锁屏界面的公钥
-+    QString getLoginPubKey(QString service,QString path,QString interface);
-+    //发送密码到登录锁屏界面
-+    bool sendLoginPassword(QString service,QString path,QString interface,QString username,QByteArray array);
-+    //处理首次登录逻辑
-+    bool handleFirstSingleLogn(QString username,QByteArray decryptText);
- private:
-     QDBusInterface *m_serviceInterface = nullptr;
--    QList<DeviceInfo *> m_listDeviceInfos;
-+    DeviceList m_listDeviceInfos;
-     int deviceCount = 0;
-+    bool is990 = false;
-+    QMap<QString,int> m_AuthingDriveList;
-+
-+    QMap<QString,QString> loginAppList;
-+    RSAC rsac;
-+    QByteArray priKey, pubKey;
-+    bool isFirstLogin = true;
-+    bool hasSaveLogin = false;
-+    QString savedUsername;
-+    QByteArray savedPassword;
- };
- 
- #endif // SERVICEINTERFACE_H
-diff --git a/uniauth-backend/src/servicemanager.cpp b/uniauth-backend/src/servicemanager.cpp
-index 7219d32..a9b61c3 100644
---- a/uniauth-backend/src/servicemanager.cpp
-+++ b/uniauth-backend/src/servicemanager.cpp
-@@ -83,6 +83,8 @@ void ServiceManager::onDBusNameOwnerChanged(const QString &name,
-                  << (newOwner.isEmpty() ? "inactivate" : "activate");
-         Q_EMIT serviceStatusChanged(!newOwner.isEmpty());
-     }
-+
-+    Q_EMIT dbusNameOwnerChanged(name,oldOwner,newOwner);
- }
- 
- /*!
-diff --git a/uniauth-backend/src/servicemanager.h b/uniauth-backend/src/servicemanager.h
-index 0128b38..6c85df3 100644
---- a/uniauth-backend/src/servicemanager.h
-+++ b/uniauth-backend/src/servicemanager.h
-@@ -36,6 +36,7 @@ private:
- 
- Q_SIGNALS:
-     void serviceStatusChanged(bool activate);
-+    void dbusNameOwnerChanged(QString name,QString oldOwner,QString newOwner);
- 
- public Q_SLOTS:
-     void onDBusNameOwnerChanged(const QString &name,
diff -Nru ukui-biometric-auth-4.10.0.0/debian/patches/0001-update-changelog.patch ukui-biometric-auth-4.20.0.0/debian/patches/0001-update-changelog.patch
--- ukui-biometric-auth-4.10.0.0/debian/patches/0001-update-changelog.patch	1970-01-01 08:00:00.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/debian/patches/0001-update-changelog.patch	2024-11-15 17:01:40.000000000 +0800
@@ -0,0 +1,12282 @@
+From: yangmin100 <yangmin@kylinos.cn>
+Date: Wed, 13 Nov 2024 19:58:45 +0800
+Subject: update changelog
+
+---
+ bioauth-bin/src/main.cpp                           |   16 +-
+ bioauth/include/bioauth.h                          |    2 +-
+ bioauth/include/loginoptionswidget.h               |   16 +-
+ bioauth/src/bioauth.cpp                            |    6 +-
+ bioauth/src/biodevices.cpp                         |  281 ++--
+ bioauth/src/loginoptionswidget.cpp                 |  814 ++++++----
+ ...desktop.plicykit.pkexec.bioctl-helper.policy.in |    8 +-
+ ...freedesktop.plicykit.pkexec.biodrvctl.policy.in |    8 +-
+ ...reedesktop.plicykit.pkexec.biorestart.policy.in |    8 +-
+ polkit-agent/CMakeLists.txt                        |   22 +-
+ polkit-agent/assets.qrc                            |   47 +
+ polkit-agent/assets/biowaiting/fingerprint0.svg    |    1 +
+ polkit-agent/assets/biowaiting/fingerprint1.svg    |    1 +
+ polkit-agent/assets/biowaiting/fingerprint10.svg   |    1 +
+ polkit-agent/assets/biowaiting/fingerprint11.svg   |    1 +
+ polkit-agent/assets/biowaiting/fingerprint12.svg   |    1 +
+ polkit-agent/assets/biowaiting/fingerprint13.svg   |    1 +
+ polkit-agent/assets/biowaiting/fingerprint14.svg   |    1 +
+ polkit-agent/assets/biowaiting/fingerprint2.svg    |    1 +
+ polkit-agent/assets/biowaiting/fingerprint3.svg    |    1 +
+ polkit-agent/assets/biowaiting/fingerprint4.svg    |    1 +
+ polkit-agent/assets/biowaiting/fingerprint5.svg    |    1 +
+ polkit-agent/assets/biowaiting/fingerprint6.svg    |    1 +
+ polkit-agent/assets/biowaiting/fingerprint7.svg    |    1 +
+ polkit-agent/assets/biowaiting/fingerprint8.svg    |    1 +
+ polkit-agent/assets/biowaiting/fingerprint9.svg    |    1 +
+ polkit-agent/assets/biowaiting/fingervein0.svg     |    1 +
+ polkit-agent/assets/biowaiting/fingervein1.svg     |    1 +
+ polkit-agent/assets/biowaiting/fingervein10.svg    |    1 +
+ polkit-agent/assets/biowaiting/fingervein11.svg    |    1 +
+ polkit-agent/assets/biowaiting/fingervein2.svg     |    1 +
+ polkit-agent/assets/biowaiting/fingervein3.svg     |    1 +
+ polkit-agent/assets/biowaiting/fingervein4.svg     |    1 +
+ polkit-agent/assets/biowaiting/fingervein5.svg     |    1 +
+ polkit-agent/assets/biowaiting/fingervein6.svg     |    1 +
+ polkit-agent/assets/biowaiting/fingervein7.svg     |    1 +
+ polkit-agent/assets/biowaiting/fingervein8.svg     |    1 +
+ polkit-agent/assets/biowaiting/fingervein9.svg     |    1 +
+ polkit-agent/assets/biowaiting/iris0.svg           |    1 +
+ polkit-agent/assets/biowaiting/iris1.svg           |    1 +
+ polkit-agent/assets/biowaiting/iris10.svg          |    1 +
+ polkit-agent/assets/biowaiting/iris11.svg          |    1 +
+ polkit-agent/assets/biowaiting/iris2.svg           |    1 +
+ polkit-agent/assets/biowaiting/iris3.svg           |    1 +
+ polkit-agent/assets/biowaiting/iris4.svg           |    1 +
+ polkit-agent/assets/biowaiting/iris5.svg           |    1 +
+ polkit-agent/assets/biowaiting/iris6.svg           |    1 +
+ polkit-agent/assets/biowaiting/iris7.svg           |    1 +
+ polkit-agent/assets/biowaiting/iris8.svg           |    1 +
+ polkit-agent/assets/biowaiting/iris9.svg           |    1 +
+ polkit-agent/assets/biowaiting/voiceprint0.svg     |    1 +
+ polkit-agent/assets/biowaiting/voiceprint1.svg     |    1 +
+ polkit-agent/assets/biowaiting/voiceprint2.svg     |    1 +
+ polkit-agent/assets/biowaiting/voiceprint3.svg     |    1 +
+ polkit-agent/assets/biowaiting/voiceprint4.svg     |    1 +
+ polkit-agent/assets/biowaiting/voiceprint5.svg     |    1 +
+ polkit-agent/assets/biowaiting/voiceprint6.svg     |    1 +
+ polkit-agent/assets/biowaiting/voiceprint7.svg     |    1 +
+ polkit-agent/i18n_ts/bo.ts                         |  192 +--
+ polkit-agent/i18n_ts/bo_CN.ts                      |  180 ++-
+ polkit-agent/i18n_ts/de.ts                         |  180 ++-
+ polkit-agent/i18n_ts/es.ts                         |  180 ++-
+ polkit-agent/i18n_ts/fr.ts                         |  180 ++-
+ polkit-agent/i18n_ts/kk.ts                         |  180 ++-
+ polkit-agent/i18n_ts/ky.ts                         |  180 ++-
+ polkit-agent/i18n_ts/mn.ts                         |  180 ++-
+ polkit-agent/i18n_ts/pt.ts                         |   53 +-
+ polkit-agent/i18n_ts/ru.ts                         |   53 +-
+ polkit-agent/i18n_ts/tr.ts                         |  178 ++-
+ polkit-agent/i18n_ts/ug.ts                         |  180 ++-
+ polkit-agent/i18n_ts/zh_CN.ts                      |  180 ++-
+ polkit-agent/i18n_ts/zh_HK.ts                      |  182 ++-
+ polkit-agent/src/PolkitListener.cpp                |  354 ++---
+ polkit-agent/src/PolkitListener.h                  |   48 +-
+ polkit-agent/src/fullscreenbackground.cpp          |  513 ++++++
+ polkit-agent/src/fullscreenbackground.h            |  173 ++
+ polkit-agent/src/kalabel.cpp                       |   16 +-
+ polkit-agent/src/kalabel.h                         |    3 +-
+ polkit-agent/src/mainwindow.cpp                    | 1654 ++++++++++----------
+ polkit-agent/src/mainwindow.h                      |   90 +-
+ polkit-agent/src/mainwindow.ui                     |  165 +-
+ polkit-agent/src/modeButton.h                      |    2 +-
+ polkit-agent/src/pam-tally.c                       |   16 +-
+ polkit-agent/src/pam-tally.h                       |   42 +-
+ polkit-agent/src/sessionmanager.cpp                |   35 +-
+ polkit-agent/src/types.h                           |   36 +-
+ polkit-agent/src/usdblockshortcut.cpp              |   61 +
+ polkit-agent/src/usdblockshortcut.h                |   49 +
+ polkit-agent/src/users.cpp                         |   94 +-
+ polkit-agent/src/users.h                           |   13 +-
+ 90 files changed, 4209 insertions(+), 2708 deletions(-)
+ create mode 100644 polkit-agent/assets/biowaiting/fingerprint0.svg
+ create mode 100644 polkit-agent/assets/biowaiting/fingerprint1.svg
+ create mode 100644 polkit-agent/assets/biowaiting/fingerprint10.svg
+ create mode 100644 polkit-agent/assets/biowaiting/fingerprint11.svg
+ create mode 100644 polkit-agent/assets/biowaiting/fingerprint12.svg
+ create mode 100644 polkit-agent/assets/biowaiting/fingerprint13.svg
+ create mode 100644 polkit-agent/assets/biowaiting/fingerprint14.svg
+ create mode 100644 polkit-agent/assets/biowaiting/fingerprint2.svg
+ create mode 100644 polkit-agent/assets/biowaiting/fingerprint3.svg
+ create mode 100644 polkit-agent/assets/biowaiting/fingerprint4.svg
+ create mode 100644 polkit-agent/assets/biowaiting/fingerprint5.svg
+ create mode 100644 polkit-agent/assets/biowaiting/fingerprint6.svg
+ create mode 100644 polkit-agent/assets/biowaiting/fingerprint7.svg
+ create mode 100644 polkit-agent/assets/biowaiting/fingerprint8.svg
+ create mode 100644 polkit-agent/assets/biowaiting/fingerprint9.svg
+ create mode 100644 polkit-agent/assets/biowaiting/fingervein0.svg
+ create mode 100644 polkit-agent/assets/biowaiting/fingervein1.svg
+ create mode 100644 polkit-agent/assets/biowaiting/fingervein10.svg
+ create mode 100644 polkit-agent/assets/biowaiting/fingervein11.svg
+ create mode 100644 polkit-agent/assets/biowaiting/fingervein2.svg
+ create mode 100644 polkit-agent/assets/biowaiting/fingervein3.svg
+ create mode 100644 polkit-agent/assets/biowaiting/fingervein4.svg
+ create mode 100644 polkit-agent/assets/biowaiting/fingervein5.svg
+ create mode 100644 polkit-agent/assets/biowaiting/fingervein6.svg
+ create mode 100644 polkit-agent/assets/biowaiting/fingervein7.svg
+ create mode 100644 polkit-agent/assets/biowaiting/fingervein8.svg
+ create mode 100644 polkit-agent/assets/biowaiting/fingervein9.svg
+ create mode 100644 polkit-agent/assets/biowaiting/iris0.svg
+ create mode 100644 polkit-agent/assets/biowaiting/iris1.svg
+ create mode 100644 polkit-agent/assets/biowaiting/iris10.svg
+ create mode 100644 polkit-agent/assets/biowaiting/iris11.svg
+ create mode 100644 polkit-agent/assets/biowaiting/iris2.svg
+ create mode 100644 polkit-agent/assets/biowaiting/iris3.svg
+ create mode 100644 polkit-agent/assets/biowaiting/iris4.svg
+ create mode 100644 polkit-agent/assets/biowaiting/iris5.svg
+ create mode 100644 polkit-agent/assets/biowaiting/iris6.svg
+ create mode 100644 polkit-agent/assets/biowaiting/iris7.svg
+ create mode 100644 polkit-agent/assets/biowaiting/iris8.svg
+ create mode 100644 polkit-agent/assets/biowaiting/iris9.svg
+ create mode 100644 polkit-agent/assets/biowaiting/voiceprint0.svg
+ create mode 100644 polkit-agent/assets/biowaiting/voiceprint1.svg
+ create mode 100644 polkit-agent/assets/biowaiting/voiceprint2.svg
+ create mode 100644 polkit-agent/assets/biowaiting/voiceprint3.svg
+ create mode 100644 polkit-agent/assets/biowaiting/voiceprint4.svg
+ create mode 100644 polkit-agent/assets/biowaiting/voiceprint5.svg
+ create mode 100644 polkit-agent/assets/biowaiting/voiceprint6.svg
+ create mode 100644 polkit-agent/assets/biowaiting/voiceprint7.svg
+ create mode 100644 polkit-agent/src/fullscreenbackground.cpp
+ create mode 100644 polkit-agent/src/fullscreenbackground.h
+ create mode 100644 polkit-agent/src/usdblockshortcut.cpp
+ create mode 100644 polkit-agent/src/usdblockshortcut.h
+
+diff --git a/bioauth-bin/src/main.cpp b/bioauth-bin/src/main.cpp
+index 81ffdb4..a88dfe8 100644
+--- a/bioauth-bin/src/main.cpp
++++ b/bioauth-bin/src/main.cpp
+@@ -21,6 +21,7 @@
+ #include <QCommandLineOption>
+ #include <QCommandLineParser>
+ #include <termios.h>
++#include <signal.h>
+ 
+ #include <pwd.h>
+ 
+@@ -38,7 +39,7 @@
+ 
+ bool enableDebug;
+ QString logPrefix;
+-
++BioAuth bioAuth;
+ enum MsgType
+ {
+     START,
+@@ -241,6 +242,13 @@ DeviceInfo showDevices(const QMap<int, QList<DeviceInfo>> &devicesMap)
+     return DeviceInfo();
+ }
+ 
++static void signal_handler(int signo)
++{
++    if (signo == SIGHUP) {
++        bioAuth.stopAuth();
++    }
++}
++
+ int main(int argc, char *argv[])
+ {
+     QCoreApplication::setSetuidAllowed(true);
+@@ -310,7 +318,8 @@ int main(int argc, char *argv[])
+             showMessage(QObject::tr("Press Q or Esc to cancel"), PROMPT);
+     }
+ 
+-    BioAuth bioAuth(uid, deviceInfo);
++    bioAuth.setUid(uid);
++    bioAuth.setDevice(deviceInfo);
+     KeyWatcher watcher;
+     QMap<int,int>   m_failedTimes;
+ 
+@@ -403,7 +412,7 @@ int main(int argc, char *argv[])
+ 
+     bioAuth.startAuth();
+ 
+-    if(!isHiddenSwitchButton){
++    if (!isHiddenSwitchButton) {
+         QObject::connect(&watcher, &KeyWatcher::exit, &a, [&]{
+             showMessage(QObject::tr("AUTHENTICATION CANCELED"), START);
+             bioAuth.stopAuth();
+@@ -411,6 +420,7 @@ int main(int argc, char *argv[])
+         });
+     }
+     watcher.start();
++    signal(SIGHUP, signal_handler);
+ 
+     return a.exec();
+ }
+diff --git a/bioauth/include/bioauth.h b/bioauth/include/bioauth.h
+index 477d3b3..bc7d325 100644
+--- a/bioauth/include/bioauth.h
++++ b/bioauth/include/bioauth.h
+@@ -36,6 +36,7 @@ public:
+     explicit BioAuth(QObject *parent = nullptr);
+     ~BioAuth();
+     void setDevice(const DeviceInfoPtr deviceInfo);
++    void setUid(qint32 uid);
+     DeviceInfoPtr getDevice();
+     void startAuth();
+     void startUkeyAuth();
+@@ -59,7 +60,6 @@ public:
+          */
+     bool GetHasUkeyFeature(int uid, int indexStart = 0, int indexEnd = -1);
+ 
+-
+ signals:
+     void authComplete(int uid, bool result, int retErrNo);
+     void authFinished();
+diff --git a/bioauth/include/loginoptionswidget.h b/bioauth/include/loginoptionswidget.h
+index dbbe1af..0eca34d 100644
+--- a/bioauth/include/loginoptionswidget.h
++++ b/bioauth/include/loginoptionswidget.h
+@@ -54,7 +54,7 @@ public:
+     unsigned getLoginOptCount();
+     DeviceInfoPtr getFirstDevInfo();
+     int convertDeviceType(int nDevType);
+-    void updateUIStatus(bool update);
++    void updateUIStatus(bool update, int nPreOptType = -1);
+     void updateUkeyUIStatus(int type);
+     void setUser(int uid);
+     void setCurrentDevice(int drvid);
+@@ -97,6 +97,13 @@ public:
+     void SetExtraInfo(QString extra_info,QString info_type);
+     bool getHasUkeyOptions();
+     void setSelectedPassword();
++
++    // 设置所有生物识别的禁用状态
++    void setAllDeviceDisable(bool bDisable = true);
++
++    void startBioWaiting(unsigned uCurLoginOptType);
++    void stopBioWaiting(bool isDisable = false);
++
+ public slots:
+     void readDevicesInfo();
+     void onIdentifyComplete(int uid, bool ret, int retErrNo);
+@@ -129,6 +136,7 @@ private:
+     QPixmap scaledPixmap(int width, int height, QString url);
+     QPixmap drawSymbolicColoredPixmap(QPixmap &source, QString cgColor);
+     void updatePixmap();
++    QPixmap scaledSmoothPixmap(const QPixmap &src, int nWidth, int nHeight);
+ 
+ private:
+     BioAuth *m_biomericProxy = nullptr;
+@@ -164,6 +172,12 @@ private:
+     QTimer          *w_timer;
+ 
+     bool            isShowUkey = false;
++
++    // 指纹、指静脉、虹膜、声纹识别动图
++    QLabel *m_labelBioWaiting = nullptr; // 指纹、指静脉、虹膜、声纹识别动图提示
++    QTimer *m_timerBioWaiting = nullptr; // 指纹、指静脉、虹膜、声纹识别动图切换定时器
++    int m_nBioWaitingFrame = 0;             // 当前显示的动图帧
++    int m_nCurBioWaitingType = -1;          // 当前显示的动图类型
+ };
+ 
+ #endif // LOGINOPTIONSWIDGET_H
+diff --git a/bioauth/src/bioauth.cpp b/bioauth/src/bioauth.cpp
+index 98143e6..076f282 100644
+--- a/bioauth/src/bioauth.cpp
++++ b/bioauth/src/bioauth.cpp
+@@ -61,6 +61,11 @@ void BioAuth::setDevice(const DeviceInfoPtr deviceInfo)
+     this->deviceInfo = deviceInfo;
+ }
+ 
++void BioAuth::setUid(qint32 uid)
++{
++    this->uid = uid;
++}
++
+ void BioAuth::startUkeyAuth()
+ {
+     //    stopAuth();
+@@ -209,7 +214,6 @@ void BioAuth::onIdentityComplete(QDBusPendingCallWatcher *watcher)
+ 
+     /* 识别生物特征成功,发送认证结果 */
+     if(isInAuthentication){
+-
+         isInAuthentication = false;
+ 
+         if(result == DBUS_RESULT_SUCCESS && retUid == uid){
+diff --git a/bioauth/src/biodevices.cpp b/bioauth/src/biodevices.cpp
+index e1287b0..29c2d09 100644
+--- a/bioauth/src/biodevices.cpp
++++ b/bioauth/src/biodevices.cpp
+@@ -13,8 +13,8 @@
+  *
+  * You should have received a copy of the GNU General Public License
+  * along with this program; if not, see <http://www.gnu.org/licenses/>.
+- * 
+-**/
++ *
++ **/
+ #include "biodevices.h"
+ #include <QDBusInterface>
+ #include <QSettings>
+@@ -26,13 +26,12 @@
+ 
+ #include "generic.h"
+ 
+-
+ BioDevices::BioDevices(bool isIgnoreQrCode, QObject *parent)
+-    : QObject(parent),
+-      m_uniAuthService(new UniAuthService(this)),
+-      isShowHotPlug(false),
+-      useFirstDevice(false),
+-      m_isIgnoreQrCode(isIgnoreQrCode)
++    : QObject(parent)
++    , m_uniAuthService(new UniAuthService(this))
++    , isShowHotPlug(false)
++    , useFirstDevice(false)
++    , m_isIgnoreQrCode(isIgnoreQrCode)
+ {
+     connectToService();
+ 
+@@ -57,54 +56,45 @@ void BioDevices::connectToService()
+     qRegisterMetaType<DeviceInfo>();
+     qDBusRegisterMetaType<DeviceInfo>();
+ 
+-    serviceInterface = new QDBusInterface(BIO_DBUS_SERVICE,
+-                                          BIO_DBUS_PATH,
+-                                          BIO_DBUS_INTERFACE,
+-                                          QDBusConnection::systemBus());
++    serviceInterface
++        = new QDBusInterface(BIO_DBUS_SERVICE, BIO_DBUS_PATH, BIO_DBUS_INTERFACE, QDBusConnection::systemBus());
+ 
+-    connect(serviceInterface, SIGNAL(USBDeviceHotPlug(int, int, int)),
+-            this, SLOT(onUSBDeviceHotPlug(int,int,int)));
++    connect(serviceInterface, SIGNAL(USBDeviceHotPlug(int, int, int)), this, SLOT(onUSBDeviceHotPlug(int, int, int)));
+     serviceInterface->setTimeout(2147483647);
+ }
+ 
+ void BioDevices::onUSBDeviceHotPlug(int deviceId, int action, int devNumNow)
+ {
+     qDebug() << deviceId << action << devNumNow;
+-    QString  text = "";
++    QString text = "";
+ 
+-    if(action == -1){
++    if (action == -1) {
+         DeviceInfoPtr device = findDevice(deviceId);
+-        if(device)
+-             text = tr("Unplugging of %1 device detected").arg(bioTypeToString_tr(device->biotype));
++        if (device)
++            text = tr("Unplugging of %1 device detected").arg(bioTypeToString_tr(device->biotype));
+     }
+ 
+     getDevicesList();
+ 
+     emit deviceCountChanged(deviceInfos.size());
+ 
+-    if(action == 1){
++    if (action == 1) {
+         DeviceInfoPtr device = findDevice(deviceId);
+-        if(device)
+-             text = tr("%1 device insertion detected").arg(bioTypeToString_tr(device->biotype));
++        if (device)
++            text = tr("%1 device insertion detected").arg(bioTypeToString_tr(device->biotype));
+     }
+ 
+-    if(isShowHotPlug && text != ""){
+-        QDBusInterface iface("org.freedesktop.Notifications",
+-                             "/org/freedesktop/Notifications",
+-                             "org.freedesktop.Notifications",
+-                             QDBusConnection::sessionBus());
++    if (isShowHotPlug && text != "") {
++        QDBusInterface iface(
++            "org.freedesktop.Notifications",
++            "/org/freedesktop/Notifications",
++            "org.freedesktop.Notifications",
++            QDBusConnection::sessionBus());
+         QList<QVariant> args;
+-        args<<(tr("Biometric Manager"))
+-           <<((unsigned int) 0)
+-          <<"biometric-manager"
+-         <<tr("biometric")
+-        <<text
+-        <<QStringList()
+-        <<QVariantMap()
+-        <<(int)-1;
+-        iface.callWithArgumentList(QDBus::AutoDetect,"Notify",args);
++        args << (tr("Biometric Manager")) << ((unsigned int)0) << "biometric-manager" << tr("biometric") << text
++             << QStringList() << QVariantMap() << (int)-1;
++        iface.callWithArgumentList(QDBus::AutoDetect, "Notify", args);
+     }
+-
+ }
+ 
+ bool BioDevices::GetBioAuthEnable(uid_t uid)
+@@ -121,11 +111,11 @@ bool BioDevices::GetBioAuthEnable(uid_t uid)
+         QSettings settings(configPath, QSettings::IniFormat);
+         qDebug() << "configure path: " << settings.fileName();
+ 
+-        if(settings.allKeys().contains("EnableAuth")){
++        if (settings.allKeys().contains("EnableAuth")) {
+             return settings.value("EnableAuth").toBool();
+-        }else{
++        } else {
+             QSettings sysSettings(GET_STR(CONFIG_FILE), QSettings::IniFormat);
+-            if(sysSettings.contains("EnableAuth"))
++            if (sysSettings.contains("EnableAuth"))
+                 return sysSettings.value("EnableAuth").toBool();
+             else
+                 return true;
+@@ -140,7 +130,7 @@ void BioDevices::getDevicesList()
+ {
+     /* 返回值为 i -- int 和 av -- array of variant */
+     QDBusMessage msg = serviceInterface->call("GetDevList");
+-    if(msg.type() == QDBusMessage::ErrorMessage){
++    if (msg.type() == QDBusMessage::ErrorMessage) {
+         LOG() << msg.errorMessage();
+         return;
+     }
+@@ -155,21 +145,20 @@ void BioDevices::getDevicesList()
+ 
+     deviceInfos.clear();
+ 
+-    for(int i = 0; i < deviceNum; i++) {
++    for (int i = 0; i < deviceNum; i++) {
+         DeviceInfoPtr pDeviceInfo = std::make_shared<DeviceInfo>();
+         infos.at(i).value<QDBusArgument>() >> *pDeviceInfo;
+ 
+-        if(pDeviceInfo->device_available > 0) {  //设备可用
++        if (pDeviceInfo->device_available > 0) { // 设备可用
+             if (pDeviceInfo->biotype == REMOTE_QRCODE_TYPE && m_isIgnoreQrCode)
+                 continue;
+             if (!bEnableBioAuth && pDeviceInfo->biotype <= BIOTYPE_VOICEPRINT)
+                 continue;
+             deviceInfos.push_back(pDeviceInfo);
+-        }            
++        }
+     }
+ }
+ 
+-
+ int BioDevices::count()
+ {
+     return deviceInfos.size();
+@@ -179,7 +168,7 @@ int BioDevices::GetUserDevCount(int uid)
+ {
+     int count = 0;
+     QDBusMessage msg = serviceInterface->call("GetDevList");
+-    if(msg.type() == QDBusMessage::ErrorMessage){
++    if (msg.type() == QDBusMessage::ErrorMessage) {
+         LOG() << msg.errorMessage();
+         return 0;
+     }
+@@ -190,14 +179,13 @@ int BioDevices::GetUserDevCount(int uid)
+     QList<QVariant> infos;
+     argument >> infos;
+ 
+-    for(int i = 0; i < deviceNum; i++) {
++    for (int i = 0; i < deviceNum; i++) {
+         DeviceInfoPtr pDeviceInfo = std::make_shared<DeviceInfo>();
+         infos.at(i).value<QDBusArgument>() >> *pDeviceInfo;
+-        if(pDeviceInfo->device_available > 0 && GetUserDevFeatureCount(uid,pDeviceInfo->device_id)>0)     //设备可用
++        if (pDeviceInfo->device_available > 0 && GetUserDevFeatureCount(uid, pDeviceInfo->device_id) > 0) // 设备可用
+             count++;
+     }
+     return count;
+-
+ }
+ 
+ FeatureMap BioDevices::GetUserFeatures(int uid)
+@@ -206,8 +194,7 @@ FeatureMap BioDevices::GetUserFeatures(int uid)
+     QList<QDBusVariant> qlist;
+     int listsize;
+     QDBusMessage result = serviceInterface->call(QStringLiteral("GetAllFeatureList"), uid, 0, -1);
+-    if(result.type() == QDBusMessage::ErrorMessage)
+-    {
++    if (result.type() == QDBusMessage::ErrorMessage) {
+         qWarning() << "GetDevList error:" << result.errorMessage();
+         return featureMap;
+     }
+@@ -224,13 +211,12 @@ FeatureMap BioDevices::GetUserFeatures(int uid)
+     return featureMap;
+ }
+ 
+-int BioDevices::GetUserDevFeatureCount(int uid,int drvid)
++int BioDevices::GetUserDevFeatureCount(int uid, int drvid)
+ {
+-    QDBusMessage FeatureResult = serviceInterface->call(QStringLiteral("GetFeatureList"),drvid,uid,0,-1);
+-    if(FeatureResult.type() == QDBusMessage::ErrorMessage)
+-    {
+-            qWarning() << "GetFeatureList error:" << FeatureResult.errorMessage();
+-            return 0;
++    QDBusMessage FeatureResult = serviceInterface->call(QStringLiteral("GetFeatureList"), drvid, uid, 0, -1);
++    if (FeatureResult.type() == QDBusMessage::ErrorMessage) {
++        qWarning() << "GetFeatureList error:" << FeatureResult.errorMessage();
++        return 0;
+     }
+     return FeatureResult.arguments().takeFirst().toInt();
+ }
+@@ -238,13 +224,13 @@ int BioDevices::GetUserDevFeatureCount(int uid,int drvid)
+ int BioDevices::getFeatureCount(int uid, int indexStart, int indexEnd)
+ {
+     int res = 0;
+-    for(int i = 0; i < deviceInfos.count(); i++) {
++    for (int i = 0; i < deviceInfos.count(); i++) {
+         DeviceInfoPtr deviceInfo = deviceInfos.at(i);
+-        QDBusMessage featurecount = serviceInterface->call("GetFeatureList",deviceInfo->device_id,uid,indexStart,indexEnd);
+-        if(featurecount.type() == QDBusMessage::ErrorMessage)
+-        {
+-                qWarning() << "GetFeatureList error:" << featurecount.errorMessage();
+-        }else{
++        QDBusMessage featurecount
++            = serviceInterface->call("GetFeatureList", deviceInfo->device_id, uid, indexStart, indexEnd);
++        if (featurecount.type() == QDBusMessage::ErrorMessage) {
++            qWarning() << "GetFeatureList error:" << featurecount.errorMessage();
++        } else {
+             res += featurecount.arguments().takeFirst().toInt();
+         }
+     }
+@@ -255,11 +241,11 @@ QMap<int, QList<DeviceInfo>> BioDevices::getAllDevices()
+ {
+     QMap<int, QList<DeviceInfo>> devices;
+ 
+-    for(auto deviceInfo : deviceInfos) {
+-        if (deviceInfo->biotype == REMOTE_QRCODE_TYPE)  // 终端不使用扫码
++    for (auto deviceInfo : deviceInfos) {
++        if (deviceInfo->biotype == REMOTE_QRCODE_TYPE) // 终端不使用扫码
+             continue;
+ 
+-        if(!GetDirveIsIdle(deviceInfo->device_id))
++        if (!GetDirveIsIdle(deviceInfo->device_id))
+             continue;
+ 
+         devices[deviceInfo->biotype].push_back(*deviceInfo);
+@@ -272,9 +258,9 @@ QMap<int, QList<DeviceInfo>> BioDevices::getUserDevices(int uid)
+ {
+     QMap<int, QList<DeviceInfo>> devices;
+     bool isQRCodeEnable = GetQRCodeEnable();
+-    for(auto deviceInfo : deviceInfos) {
+-        if(GetUserDevFeatureCount(uid,deviceInfo->device_id) > 0) {
+-            if (!isQRCodeEnable && deviceInfo->biotype == REMOTE_QRCODE_TYPE)    // 关闭了二维码功能
++    for (auto deviceInfo : deviceInfos) {
++        if (GetUserDevFeatureCount(uid, deviceInfo->device_id) > 0) {
++            if (!isQRCodeEnable && deviceInfo->biotype == REMOTE_QRCODE_TYPE) // 关闭了二维码功能
+                 continue;
+             devices[deviceInfo->biotype].push_back(*deviceInfo);
+         }
+@@ -287,7 +273,7 @@ QList<DeviceInfo> BioDevices::getDevices(int type)
+ {
+     QList<DeviceInfo> devices;
+ 
+-    for(auto deviceInfo : deviceInfos) {
++    for (auto deviceInfo : deviceInfos) {
+         if (deviceInfo->biotype == type)
+             devices.push_back(*deviceInfo);
+     }
+@@ -316,7 +302,7 @@ bool BioDevices::GetHiddenSwitchButton()
+         return m_uniAuthService->getHiddenSwitchButton();
+     } else {
+         QSettings sysSettings("/etc/biometric-auth/ukui-biometric.conf", QSettings::IniFormat);
+-        if(sysSettings.contains("HiddenSwitchButton"))
++        if (sysSettings.contains("HiddenSwitchButton"))
+             return sysSettings.value("HiddenSwitchButton").toBool();
+         else
+             return false;
+@@ -329,7 +315,7 @@ int BioDevices::getFailedTimes()
+         return m_uniAuthService->getMaxFailedTimes();
+     } else {
+         QSettings sysSettings("/etc/biometric-auth/ukui-biometric.conf", QSettings::IniFormat);
+-        if(sysSettings.contains("MaxFailedTimes"))
++        if (sysSettings.contains("MaxFailedTimes"))
+             return sysSettings.value("MaxFailedTimes").toInt();
+         else
+             return 3;
+@@ -369,22 +355,22 @@ bool BioDevices::GetBioAuthEnable()
+             isEnable = m_uniAuthService->getBioAuthStatus(pwd->pw_name, ENABLETYPE_BIO);
+         }
+         if (isEnable && !isShowHotPlug) {
+-            if(qAppName() == "polkit-ukui-authentication-agent-1")  //获取polkit开关是否打开
++            if (qAppName() == "polkit-ukui-authentication-agent-1") // 获取polkit开关是否打开
+                 isEnable = m_uniAuthService->getBioAuthStatus(pwd->pw_name, ENABLETYPE_POLKIT);
+-            if(qAppName() == "bioauth"){  //获取父进程名称为sudo,su,或者login
+-                int ppid = getppid();    //获取父进程pid
++            if (qAppName() == "bioauth") { // 获取父进程名称为sudo,su,或者login
++                int ppid = getppid();      // 获取父进程pid
+                 QString filename = "/proc/" + QString::number(ppid) + "/cmdline";
+                 QFile file(filename);
+-                if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
+-                    qDebug()<<"Can't open the file!"<<endl;
++                if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
++                    qDebug() << "Can't open the file!" << endl;
+                 }
+                 QByteArray text = file.readAll();
+                 file.close();
+-                if(text.contains("sudo")){
++                if (text.contains("sudo")) {
+                     isEnable = m_uniAuthService->getBioAuthStatus(pwd->pw_name, ENABLETYPE_SUDO);
+-                }else if(text.contains("su")){
++                } else if (text.contains("su")) {
+                     isEnable = m_uniAuthService->getBioAuthStatus(pwd->pw_name, ENABLETYPE_SU);
+-                }else if(text.contains("login")){
++                } else if (text.contains("login")) {
+                     isEnable = m_uniAuthService->getBioAuthStatus(pwd->pw_name, ENABLETYPE_LOGIN);
+                 }
+             }
+@@ -401,23 +387,23 @@ bool BioDevices::GetBioAuthEnable()
+ 
+         if (isEnable && sysSettings.allKeys().contains("EnableAuthApp")) {
+             isEnableApp = sysSettings.value("EnableAuthApp").toInt();
+-            if(qAppName() == "polkit-ukui-authentication-agent-1")  //获取polkit开关是否打开
+-                isEnable = isEnableApp & (1<<2);
+-            if(qAppName() == "bioauth"){  //获取父进程名称为sudo,su,或者login
+-                int ppid = getppid();    //获取父进程pid
++            if (qAppName() == "polkit-ukui-authentication-agent-1") // 获取polkit开关是否打开
++                isEnable = isEnableApp & (1 << 2);
++            if (qAppName() == "bioauth") { // 获取父进程名称为sudo,su,或者login
++                int ppid = getppid();      // 获取父进程pid
+                 QString filename = "/proc/" + QString::number(ppid) + "/cmdline";
+                 QFile file(filename);
+-                if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
+-                    qDebug()<<"Can't open the file!"<<endl;
++                if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
++                    qDebug() << "Can't open the file!" << endl;
+                 }
+                 QByteArray text = file.readAll();
+                 file.close();
+-                if(text.contains("sudo")){
+-                    isEnable = isEnableApp & (1<<3);
+-                }else if(text.contains("su")){
+-                    isEnable = isEnableApp & (1<<4);
+-                }else if(text.contains("login")){
+-                    isEnable = isEnableApp & (1<<5);
++                if (text.contains("sudo")) {
++                    isEnable = isEnableApp & (1 << 3);
++                } else if (text.contains("su")) {
++                    isEnable = isEnableApp & (1 << 4);
++                } else if (text.contains("login")) {
++                    isEnable = isEnableApp & (1 << 5);
+                 }
+             }
+         }
+@@ -426,9 +412,9 @@ bool BioDevices::GetBioAuthEnable()
+     }
+ }
+ 
+-DeviceInfoPtr BioDevices::getDefaultDevice(uid_t uid,int bioType)
++DeviceInfoPtr BioDevices::getDefaultDevice(uid_t uid, int bioType)
+ {
+-    if(deviceInfos.size() <= 0)
++    if (deviceInfos.size() <= 0)
+         return nullptr;
+ 
+     FeatureMap mapFeatures = GetUserFeatures(uid);
+@@ -438,18 +424,18 @@ DeviceInfoPtr BioDevices::getDefaultDevice(uid_t uid,int bioType)
+         DeviceInfoPtr ptrDevInfo = nullptr;
+         if (pwdInfo) {
+             QString strDeviceName = m_uniAuthService->getDefaultDevice(pwdInfo->pw_name, bioType);
+-            qDebug()<<strDeviceName;
+-            if(!strDeviceName.isEmpty()) {
++            qDebug() << strDeviceName;
++            if (!strDeviceName.isEmpty()) {
+                 ptrDevInfo = findDevice(strDeviceName);
+                 if (ptrDevInfo) {
+                     int isIdle = GetDirveIsIdle(ptrDevInfo->device_id);
+-                    if(isIdle && mapFeatures.contains(ptrDevInfo->device_shortname)){
++                    if (isIdle && mapFeatures.contains(ptrDevInfo->device_shortname)) {
+                         defaultDeviceName = strDeviceName;
+                     }
+                 }
+             }
+         }
+-        if(defaultDeviceName.isEmpty()){
++        if (defaultDeviceName.isEmpty()) {
+             return nullptr;
+         }
+         return ptrDevInfo;
+@@ -463,29 +449,28 @@ DeviceInfoPtr BioDevices::getDefaultDevice(uid_t uid,int bioType)
+         defaultDeviceName = userConfig.value(DEFAULT_DEVICE).toString();
+         qDebug() << defaultDeviceName;
+ 
+-        if(defaultDeviceName.isEmpty() || !findDevice(defaultDeviceName)) {
++        if (defaultDeviceName.isEmpty() || !findDevice(defaultDeviceName)) {
+             QSettings sysConfig(GET_STR(CONFIG_FILE), QSettings::IniFormat);
+             defaultDeviceName = sysConfig.value(DEFAULT_DEVICE).toString();
+         }
+ 
+-        if(defaultDeviceName.isEmpty() || !findDevice(defaultDeviceName)){
++        if (defaultDeviceName.isEmpty() || !findDevice(defaultDeviceName)) {
+             QString userConfigFile = QString(pwd->pw_dir) + "/.biometric_auth/ukui_biometric.conf";
+             QSettings userConfig(userConfigFile, QSettings::IniFormat);
+             defaultDeviceName = userConfig.value(DEFAULT_DEVICE).toString();
+         }
+         qDebug() << "default device: " << defaultDeviceName;
+         // 终端不默认使用第一个设备
+-        if(defaultDeviceName.isEmpty()){
++        if (defaultDeviceName.isEmpty()) {
+             return nullptr;
+         }
+         bool defValid = false;
+         DeviceInfoPtr ptrDevInfo = findDevice(defaultDeviceName);
+         if (ptrDevInfo) {
+             int isIdle = GetDirveIsIdle(ptrDevInfo->device_id);
+-            if(isIdle && mapFeatures.contains(ptrDevInfo->device_shortname)){
++            if (isIdle && mapFeatures.contains(ptrDevInfo->device_shortname)) {
+                 defValid = true;
+             }
+-
+         }
+ 
+         if (!defValid) {
+@@ -498,18 +483,18 @@ DeviceInfoPtr BioDevices::getDefaultDevice(uid_t uid,int bioType)
+ 
+ void BioDevices::recordAuthDrive(QString appName, int drvid, bool insert)
+ {
+-    if(m_uniAuthService && m_uniAuthService->isActivatable()){
+-        m_uniAuthService->recordAuthDrive(appName,drvid,insert);
++    if (m_uniAuthService && m_uniAuthService->isActivatable()) {
++        m_uniAuthService->recordAuthDrive(appName, drvid, insert);
+     }
+ }
+ 
+ bool BioDevices::GetDirveIsIdle(int drvid)
+ {
+-    if(m_uniAuthService && m_uniAuthService->isActivatable()){
++    if (m_uniAuthService && m_uniAuthService->isActivatable()) {
+         QStringList appList = m_uniAuthService->getAuthingApp();
+-        for(QString appName : appList){
++        for (QString appName : appList) {
+             int id = m_uniAuthService->getAuthingAppDrivd(appName);
+-            if(id == drvid){
++            if (id == drvid) {
+                 return false;
+             }
+         }
+@@ -520,7 +505,7 @@ bool BioDevices::GetDirveIsIdle(int drvid)
+ 
+ DeviceInfoPtr BioDevices::getDefaultDevice(uid_t uid)
+ {
+-    if(deviceInfos.size() <= 0)
++    if (deviceInfos.size() <= 0)
+         return nullptr;
+ 
+     FeatureMap mapFeatures = GetUserFeatures(uid);
+@@ -530,13 +515,16 @@ DeviceInfoPtr BioDevices::getDefaultDevice(uid_t uid)
+         DeviceInfoPtr ptrDevInfo = nullptr;
+         if (pwdInfo) {
+             for (auto bioType : m_listPriority) {
++                if (bioType == REMOTE_QRCODE_TYPE) {
++                    continue;
++                }
+                 QString strDeviceName = m_uniAuthService->getDefaultDevice(pwdInfo->pw_name, bioType);
+-                qDebug()<<strDeviceName;
+-                if(!strDeviceName.isEmpty()) {
++                qDebug() << strDeviceName;
++                if (!strDeviceName.isEmpty()) {
+                     ptrDevInfo = findDevice(strDeviceName);
+                     if (ptrDevInfo) {
+                         int isIdle = GetDirveIsIdle(ptrDevInfo->device_id);
+-                        if(isIdle && mapFeatures.contains(ptrDevInfo->device_shortname)){
++                        if (isIdle && mapFeatures.contains(ptrDevInfo->device_shortname)) {
+                             defaultDeviceName = strDeviceName;
+                             break;
+                         }
+@@ -544,7 +532,7 @@ DeviceInfoPtr BioDevices::getDefaultDevice(uid_t uid)
+                 }
+             }
+         }
+-        if(defaultDeviceName.isEmpty()){
++        if (defaultDeviceName.isEmpty()) {
+             return nullptr;
+         }
+         return ptrDevInfo;
+@@ -558,21 +546,19 @@ DeviceInfoPtr BioDevices::getDefaultDevice(uid_t uid)
+         defaultDeviceName = userConfig.value(DEFAULT_DEVICE).toString();
+         qDebug() << defaultDeviceName;
+ 
+-        if(defaultDeviceName.isEmpty() || !findDevice(defaultDeviceName)) {
++        if (defaultDeviceName.isEmpty() || !findDevice(defaultDeviceName)) {
+             QSettings sysConfig(GET_STR(CONFIG_FILE), QSettings::IniFormat);
+             defaultDeviceName = sysConfig.value(DEFAULT_DEVICE).toString();
+         }
+ 
+-        if(defaultDeviceName.isEmpty() || !findDevice(defaultDeviceName)){
++        if (defaultDeviceName.isEmpty() || !findDevice(defaultDeviceName)) {
+             QString userConfigFile = QString(pwd->pw_dir) + "/.biometric_auth/ukui_biometric.conf";
+             QSettings userConfig(userConfigFile, QSettings::IniFormat);
+             defaultDeviceName = userConfig.value(DEFAULT_DEVICE).toString();
+-
+-
+         }
+         qDebug() << "default device: " << defaultDeviceName;
+         // 终端不默认使用第一个设备
+-        if(defaultDeviceName.isEmpty()){
++        if (defaultDeviceName.isEmpty()) {
+             return nullptr;
+         }
+         bool defValid = false;
+@@ -609,18 +595,18 @@ QStringList BioDevices::getAllDefDevices()
+         defaultDeviceName = userConfig.value(DEFAULT_DEVICE).toString();
+         qDebug() << defaultDeviceName;
+ 
+-        if(defaultDeviceName.isEmpty() || !findDevice(defaultDeviceName)) {
++        if (defaultDeviceName.isEmpty() || !findDevice(defaultDeviceName)) {
+             QSettings sysConfig(GET_STR(CONFIG_FILE), QSettings::IniFormat);
+             defaultDeviceName = sysConfig.value(DEFAULT_DEVICE).toString();
+         }
+ 
+-        if(defaultDeviceName.isEmpty() || !findDevice(defaultDeviceName)){
++        if (defaultDeviceName.isEmpty() || !findDevice(defaultDeviceName)) {
+             QString userConfigFile = QString(pwd->pw_dir) + "/.biometric_auth/ukui_biometric.conf";
+             QSettings userConfig(userConfigFile, QSettings::IniFormat);
+             defaultDeviceName = userConfig.value(DEFAULT_DEVICE).toString();
+         }
+         qDebug() << "default device: " << defaultDeviceName;
+-        if(!defaultDeviceName.isEmpty()){
++        if (!defaultDeviceName.isEmpty()) {
+             listDefDevices.push_back(defaultDeviceName);
+         }
+     }
+@@ -664,18 +650,18 @@ void BioDevices::SetLastDevice(const QString &userName, int drvid)
+ 
+ DeviceInfoPtr BioDevices::findDevice(const int id)
+ {
+-    for(auto deviceInfo : deviceInfos) {
+-        if(deviceInfo->device_id == id)
++    for (auto deviceInfo : deviceInfos) {
++        if (deviceInfo->device_id == id)
+             return deviceInfo;
+     }
+-    //qDebug() << deviceName << "doesn't exists";
++    // qDebug() << deviceName << "doesn't exists";
+     return nullptr;
+ }
+ 
+ DeviceInfoPtr BioDevices::findDevice(const QString &deviceName)
+ {
+-    for(auto deviceInfo : deviceInfos) {
+-        if(deviceInfo->device_shortname == deviceName)
++    for (auto deviceInfo : deviceInfos) {
++        if (deviceInfo->device_shortname == deviceName)
+             return deviceInfo;
+     }
+     qDebug() << deviceName << "doesn't exists";
+@@ -695,21 +681,21 @@ DeviceInfoPtr BioDevices::getFirstDevice(int uid)
+ 
+ QString BioDevices::bioTypeToString_tr(int type)
+ {
+-    switch(type) {
+-    case BIOTYPE_FINGERPRINT:
+-        return tr("FingerPrint");
+-    case BIOTYPE_FINGERVEIN:
+-        return tr("FingerVein");
+-    case BIOTYPE_IRIS:
+-        return tr("Iris");
+-    case BIOTYPE_FACE:
+-        return tr("Face");
+-    case BIOTYPE_VOICEPRINT:
+-        return tr("VoicePrint");
+-    case LOGINOPT_TYPE_GENERAL_UKEY:
+-        return tr("Ukey");
+-    case REMOTE_QRCODE_TYPE:
+-        return tr("QRCode");
++    switch (type) {
++        case BIOTYPE_FINGERPRINT:
++            return tr("FingerPrint");
++        case BIOTYPE_FINGERVEIN:
++            return tr("FingerVein");
++        case BIOTYPE_IRIS:
++            return tr("Iris");
++        case BIOTYPE_FACE:
++            return tr("Face");
++        case BIOTYPE_VOICEPRINT:
++            return tr("VoicePrint");
++        case LOGINOPT_TYPE_GENERAL_UKEY:
++            return tr("Ukey");
++        case REMOTE_QRCODE_TYPE:
++            return tr("QRCode");
+     }
+     return QString();
+ }
+@@ -723,19 +709,18 @@ StatusReslut BioDevices::UpdateStatus(int drvid)
+ {
+     StatusReslut status;
+     QDBusMessage result = serviceInterface->call(QStringLiteral("UpdateStatus"), drvid);
+-    if(result.type() == QDBusMessage::ErrorMessage)
+-    {
++    if (result.type() == QDBusMessage::ErrorMessage) {
+         qWarning() << "UpdateStatus error:" << result.errorMessage();
+         status.result = -1;
+         return status;
+     }
+ 
+-    status.result           = result.arguments().at(0).toInt();
+-    status.enable           = result.arguments().at(1).toInt();
+-    status.devNum           = result.arguments().at(2).toInt();
+-    status.devStatus        = result.arguments().at(3).toInt();
+-    status.opsStatus        = result.arguments().at(4).toInt();
+-    status.notifyMessageId  = result.arguments().at(5).toInt();
++    status.result = result.arguments().at(0).toInt();
++    status.enable = result.arguments().at(1).toInt();
++    status.devNum = result.arguments().at(2).toInt();
++    status.devStatus = result.arguments().at(3).toInt();
++    status.opsStatus = result.arguments().at(4).toInt();
++    status.notifyMessageId = result.arguments().at(5).toInt();
+ 
+     return status;
+ }
+diff --git a/bioauth/src/loginoptionswidget.cpp b/bioauth/src/loginoptionswidget.cpp
+index bc54363..f75be62 100644
+--- a/bioauth/src/loginoptionswidget.cpp
++++ b/bioauth/src/loginoptionswidget.cpp
+@@ -40,90 +40,69 @@
+ #include <QApplication>
+ #include <QFont>
+ #include <QDebug>
+-
++#include <QPixmapCache>
+ 
+ LoginOptionsWidget::LoginOptionsWidget(QWidget *parent)
+-    : QWidget(parent)
+-    , m_biomericProxy(new BioAuth(this))
+-    , m_bioDevices(new BioDevices())
+-    , w_timer(nullptr)
++    : QWidget(parent), m_biomericProxy(new BioAuth(this)), m_bioDevices(new BioDevices()), w_timer(nullptr)
+ {
+-    m_bioDevices->recordAuthDrive("polkit",0,false);
++    m_bioDevices->recordAuthDrive("polkit", 0, false);
+     initUI();
+     initConnections();
+     m_mapDisableDev.clear();
+ }
+ 
+-LoginOptionsWidget::~LoginOptionsWidget()
+-{
+-
+-}
++LoginOptionsWidget::~LoginOptionsWidget() {}
+ 
+ void LoginOptionsWidget::initUI()
+ {
+     // 初始化UI
+     m_layoutMain = new QVBoxLayout();
+-    m_layoutMain->setContentsMargins(0,0,0,30);
++    m_layoutMain->setContentsMargins(0, 0, 0, 30);
+     m_layoutMain->setSpacing(12);
+     m_layoutMain->setAlignment(Qt::AlignTop);
+-    m_layoutOptBtns = new QHBoxLayout();
+-    m_layoutOptBtns->setContentsMargins(0,0,0,0);
+-    m_layoutOptBtns->setSpacing(16);
++
++    m_widgetImage = new QWidget();
++    m_widgetImage->setFixedSize(154, 154);
+     m_layoutImage = new QHBoxLayout();
+-    m_layoutImage->setContentsMargins(0,0,0,0);
++    m_layoutImage->setContentsMargins(0, 8, 0, 16);
+     m_layoutImage->setSpacing(0);
+     m_layoutImage->setAlignment(Qt::AlignCenter);
+-
+-    m_labelOptTitle = new QLabel();
+-    m_labelOptTitle->setAlignment(Qt::AlignLeft);
+-    m_labelOptTitle->setText(tr("Login Options"));
+-    m_layoutMain->addWidget(m_labelOptTitle);
+-
+-    m_btnGroup = new QButtonGroup(this);
+-    m_btnGroup->setExclusive(true);
+-
+-    m_layoutOptBtns->setAlignment(Qt::AlignLeft);
+-    m_layoutMain->addLayout(m_layoutOptBtns);
+-
+-    m_widgetImage = new QWidget();
+-    m_widgetImage->setFixedSize(154,154);
+     m_layoutImage->addSpacerItem(new QSpacerItem(109, 0, QSizePolicy::Expanding));
+     m_layoutImage->addWidget(m_widgetImage);
+     m_layoutImage->addSpacerItem(new QSpacerItem(109, 0, QSizePolicy::Expanding));
+     m_widgetImage->hide();
++
+     // 人脸识别
+     m_labelFace = new QLabel(m_widgetImage);
+     m_labelFace->setObjectName("faceLabel");
+     m_labelFace->setAlignment(Qt::AlignCenter);
+-    m_labelFace->setFixedSize(154,154);
++    m_labelFace->setFixedSize(154, 154);
+     QHBoxLayout *layoutFace = new QHBoxLayout();
+-    layoutFace->setContentsMargins(0,0,0,0);
++    layoutFace->setContentsMargins(0, 0, 0, 0);
+     layoutFace->setAlignment(Qt::AlignCenter);
+     m_labelFace->setLayout(layoutFace);
++    m_labelFace->hide();
+     m_labelFaceLoad = new QLabel();
+     m_labelFaceLoad->setAlignment(Qt::AlignCenter);
+     m_labelFaceLoad->setFixedSize(142, 142);
+-    m_labelFaceLoad->setStyleSheet(QString("QLabel{background-color: rgba(230,230,230,0.39); border-radius: %1px; border: 8px solid white;}").arg(71));
++    m_labelFaceLoad->setStyleSheet(
++        QString("QLabel{background-color: rgba(230,230,230,0.39); border-radius: %1px; border: 8px solid white;}")
++            .arg(71));
+     layoutFace->addWidget(m_labelFaceLoad, 0, Qt::AlignVCenter);
+ 
+-
+-//    QImage img;
+-//    setFaceImg(img);
+-    m_labelFace->hide();
+     // 二维码窗口
+     m_labelQRCode = new QLabel(m_widgetImage);
+     m_labelQRCode->setObjectName("qrCodeLabel");
+     m_labelQRCode->setAlignment(Qt::AlignCenter);
+-    m_labelQRCode->setFixedSize(154,154);
++    m_labelQRCode->setFixedSize(154, 154);
+     m_labelQRCode->hide();
+-    m_layoutMain->addLayout(m_layoutImage);
+     QVBoxLayout *layoutQRCode = new QVBoxLayout();
+     layoutQRCode->setAlignment(Qt::AlignCenter);
+     layoutQRCode->setSpacing(5);
+     m_labelQRCode->setLayout(layoutQRCode);
+     m_labelQRCodeTip = new QLabel();
+-    m_labelQRCodeTip->setFixedSize(22,22);
+-    m_labelQRCodeTip->setPixmap(QIcon::fromTheme("dialog-warning").pixmap(QSize(22,22)));
++    m_labelQRCodeTip->setFixedSize(22, 22);
++    m_labelQRCodeTip->setPixmap(QIcon::fromTheme("dialog-warning").pixmap(QSize(22, 22)));
+     layoutQRCode->addWidget(m_labelQRCodeTip, 0, Qt::AlignHCenter);
+     m_labelQRCodeMsg = new QLabel();
+     m_labelQRCodeMsg->setFixedHeight(24);
+@@ -133,9 +112,33 @@ void LoginOptionsWidget::initUI()
+     m_labelQRCodeMsg->setFont(font);
+     layoutQRCode->addWidget(m_labelQRCodeMsg, 0, Qt::AlignHCenter);
+ 
++    // 生物特征等待验证动画
++    m_labelBioWaiting = new QLabel(m_widgetImage);
++    m_labelBioWaiting->setAlignment(Qt::AlignCenter);
++    m_labelBioWaiting->setFixedSize(154, 154);
++    m_labelBioWaiting->hide();
++
++    m_layoutMain->addLayout(m_layoutImage);
++
++    m_layoutOptBtns = new QHBoxLayout();
++    m_layoutOptBtns->setContentsMargins(0, 0, 0, 0);
++    m_layoutOptBtns->setSpacing(16);
++
++    m_labelOptTitle = new QLabel();
++    m_labelOptTitle->setFixedHeight(30);
++    m_labelOptTitle->setAlignment(Qt::AlignLeft);
++    m_labelOptTitle->setText(tr("Login Options"));
++    m_layoutMain->addWidget(m_labelOptTitle);
++
++    m_btnGroup = new QButtonGroup(this);
++    m_btnGroup->setExclusive(true);
++
++    m_layoutOptBtns->setAlignment(Qt::AlignLeft);
++    m_layoutMain->addLayout(m_layoutOptBtns);
++
+     this->setLayout(m_layoutMain);
+ 
+-    //设置水平扩展
++    // 设置水平扩展
+     QSizePolicy sizePolicy = this->sizePolicy();
+     sizePolicy.setHorizontalPolicy(QSizePolicy::Expanding);
+     this->setSizePolicy(sizePolicy);
+@@ -143,38 +146,32 @@ void LoginOptionsWidget::initUI()
+ 
+ void LoginOptionsWidget::SetExtraInfo(QString extra_info, QString info_type)
+ {
+-    if(!m_biomericProxy)
+-    {
++    if (!m_biomericProxy) {
+         qWarning() << "BiometricProxy doesn't exist.";
+         return;
+     }
+-    m_biomericProxy->SetExtraInfo(info_type,extra_info);
++    m_biomericProxy->SetExtraInfo(info_type, extra_info);
+ }
+ 
+ void LoginOptionsWidget::initConnections()
+ {
+-    if(m_biomericProxy) {
+-        connect(m_biomericProxy, &BioAuth::notifyDetail,
+-                this, &LoginOptionsWidget::onStatusChanged);
++    if (m_biomericProxy) {
++        connect(m_biomericProxy, &BioAuth::notifyDetail, this, &LoginOptionsWidget::onStatusChanged);
+ 
+-        connect(m_biomericProxy, &BioAuth::frameWritten,
+-                this, &LoginOptionsWidget::onFrameWritten);
++        connect(m_biomericProxy, &BioAuth::frameWritten, this, &LoginOptionsWidget::onFrameWritten);
+ 
+-        connect(m_biomericProxy, &BioAuth::authComplete,
+-                this, &LoginOptionsWidget::onIdentifyComplete);
++        connect(m_biomericProxy, &BioAuth::authComplete, this, &LoginOptionsWidget::onIdentifyComplete);
+ 
+-        connect(m_biomericProxy, &BioAuth::authFinished,
+-                this, &LoginOptionsWidget::onAuthFinished);
++        connect(m_biomericProxy, &BioAuth::authFinished, this, &LoginOptionsWidget::onAuthFinished);
+     }
+     if (m_bioDevices) {
+-        connect(m_bioDevices, &BioDevices::deviceCountChanged,
+-                this, &LoginOptionsWidget::onUSBDeviceCountChange);
+-        //readDevicesInfo();
++        connect(m_bioDevices, &BioDevices::deviceCountChanged, this, &LoginOptionsWidget::onUSBDeviceCountChange);
++        // readDevicesInfo();
+     }
+     connect(m_btnGroup, SIGNAL(buttonClicked(int)), this, SLOT(onOptionSelected(int)));
+ }
+ 
+-bool LoginOptionsWidget::getCurLoginOpt(int& nLoginOptType, int& nDrvId)
++bool LoginOptionsWidget::getCurLoginOpt(int &nLoginOptType, int &nDrvId)
+ {
+     if (m_curDevInfo) {
+         nLoginOptType = convertDeviceType(m_curDevInfo->biotype);
+@@ -192,18 +189,18 @@ unsigned LoginOptionsWidget::getLoginOptCount()
+ DeviceInfoPtr LoginOptionsWidget::getFirstDevInfo()
+ {
+     DeviceInfoPtr devInfo = nullptr;
+-    struct passwd* pwdInfo = getpwuid(m_uid);
++    struct passwd *pwdInfo = getpwuid(m_uid);
+     if (!pwdInfo)
+         return devInfo;
+     int nDrvId = m_bioDevices->GetLastDevice(pwdInfo->pw_name);
+     if (nDrvId >= 0) {
+-        qDebug()<<"GetLastDevice:"<<nDrvId;
++        qDebug() << "GetLastDevice:" << nDrvId;
+         DeviceMap::iterator itDevInfo = m_mapDevices.begin();
+         for (; itDevInfo != m_mapDevices.end(); itDevInfo++) {
+             for (auto devinfo : itDevInfo.value()) {
+                 if (devinfo && devinfo->device_id == nDrvId) {
+                     if (!isDeviceDisable(devinfo->device_id)) {
+-                        devInfo =  devinfo;
++                        devInfo = devinfo;
+                         break;
+                     }
+                 }
+@@ -218,7 +215,7 @@ DeviceInfoPtr LoginOptionsWidget::getFirstDevInfo()
+         for (; itDevInfo != m_mapDevices.end(); itDevInfo++) {
+             for (auto devinfo : itDevInfo.value()) {
+                 if (devinfo && !isDeviceDisable(devinfo->device_id)) {
+-                    devInfo =  devinfo;
++                    devInfo = devinfo;
+                     break;
+                 }
+             }
+@@ -238,53 +235,45 @@ bool LoginOptionsWidget::getHasUkeyOptions()
+ void LoginOptionsWidget::addOptionButton(unsigned uLoginOptType, int nDrvId, QString strDrvName)
+ {
+     if (m_mapOptBtns.contains(nDrvId)) {
+-        return ;
++        return;
+     }
+ 
+     QToolButton *newButton = new QToolButton();
+-//    newButton->setStyleSheet(QString("QToolButton{text-align:center;border: none;border-radius: 6px;outline: none;background-color: rgba(230, 230, 230, 100%);} \
+-//				      QToolButton::hover{background-color: rgba(55, 144, 250, 40%);}  \
+-//				      QToolButton::pressed {background-color: rgba(55, 144, 250, 100%);} \
+-//				      QToolButton::checked {background-color: rgba(55, 144, 250, 100%);} \
+-//				      "));
+     newButton->setCheckable(true);
+     newButton->setChecked(false);
+     newButton->setFocusPolicy(Qt::NoFocus);
+-    newButton->setContentsMargins(16,16,16,16);
+-//    if (nDrvId == -1) {
+-//        newButton->setEnabled(false);
+-//        newButton->setChecked(true);
+-//    } else {
+-       int nLength = m_btnGroup->buttons().length();
+-       m_btnGroup->addButton(newButton, nLength);
+-       m_listDriveId.append(nDrvId);
+-//   }
++    newButton->setContentsMargins(16, 16, 16, 16);
++
++    int nLength = m_btnGroup->buttons().length();
++    m_btnGroup->addButton(newButton, nLength);
++    m_listDriveId.append(nDrvId);
++
+     QIcon icon;
+     switch (uLoginOptType) {
+-    case LOGINOPT_TYPE_PASSWORD:
+-        icon = QIcon(QString("%1/images/ukui-loginopt-password.svg").arg(GET_STR(UKUI_BIOMETRIC)));
+-        break;
+-    case LOGINOPT_TYPE_GENERAL_UKEY:
+-        icon = QIcon(QString("%1/images/ukui-loginopt-ukey.svg").arg(GET_STR(UKUI_BIOMETRIC)));
+-        break;
+-    case LOGINOPT_TYPE_FACE:
+-        icon = QIcon(QString("%1/images/ukui-loginopt-face.svg").arg(GET_STR(UKUI_BIOMETRIC)));
+-        break;
+-    case LOGINOPT_TYPE_FINGERPRINT:
+-        icon = QIcon(QString("%1/images/ukui-loginopt-finger.svg").arg(GET_STR(UKUI_BIOMETRIC)));
+-        break;
+-    case LOGINOPT_TYPE_IRIS:
+-        icon = QIcon(QString("%1/images/ukui-loginopt-iris.svg").arg(GET_STR(UKUI_BIOMETRIC)));
+-        break;
+-    case LOGINOPT_TYPE_VOICEPRINT:
+-        icon = QIcon(QString("%1/images/ukui-loginopt-voice.svg").arg(GET_STR(UKUI_BIOMETRIC)));
+-        break;
+-    case LOGINOPT_TYPE_FINGERVEIN:
+-        icon = QIcon(QString("%1/images/ukui-loginopt-fingervein.svg").arg(GET_STR(UKUI_BIOMETRIC)));
+-        break;
+-    case LOGINOPT_TYPE_QRCODE:
+-        icon = QIcon(QString("%1/images/ukui-loginopt-qrcode.svg").arg(GET_STR(UKUI_BIOMETRIC)));
+-        break;
++        case LOGINOPT_TYPE_PASSWORD:
++            icon = QIcon(QString("%1/images/ukui-loginopt-password.svg").arg(GET_STR(UKUI_BIOMETRIC)));
++            break;
++        case LOGINOPT_TYPE_GENERAL_UKEY:
++            icon = QIcon(QString("%1/images/ukui-loginopt-ukey.svg").arg(GET_STR(UKUI_BIOMETRIC)));
++            break;
++        case LOGINOPT_TYPE_FACE:
++            icon = QIcon(QString("%1/images/ukui-loginopt-face.svg").arg(GET_STR(UKUI_BIOMETRIC)));
++            break;
++        case LOGINOPT_TYPE_FINGERPRINT:
++            icon = QIcon(QString("%1/images/ukui-loginopt-finger.svg").arg(GET_STR(UKUI_BIOMETRIC)));
++            break;
++        case LOGINOPT_TYPE_IRIS:
++            icon = QIcon(QString("%1/images/ukui-loginopt-iris.svg").arg(GET_STR(UKUI_BIOMETRIC)));
++            break;
++        case LOGINOPT_TYPE_VOICEPRINT:
++            icon = QIcon(QString("%1/images/ukui-loginopt-voice.svg").arg(GET_STR(UKUI_BIOMETRIC)));
++            break;
++        case LOGINOPT_TYPE_FINGERVEIN:
++            icon = QIcon(QString("%1/images/ukui-loginopt-fingervein.svg").arg(GET_STR(UKUI_BIOMETRIC)));
++            break;
++        case LOGINOPT_TYPE_QRCODE:
++            icon = QIcon(QString("%1/images/ukui-loginopt-qrcode.svg").arg(GET_STR(UKUI_BIOMETRIC)));
++            break;
+     }
+     newButton->setIcon(icon);
+     newButton->setToolTip(strDrvName);
+@@ -301,8 +290,8 @@ void LoginOptionsWidget::addOptionButton(unsigned uLoginOptType, int nDrvId, QSt
+ 
+ void LoginOptionsWidget::clearOptionButtons()
+ {
+-    QMap<int, QToolButton*>::iterator itMapBtn = m_mapOptBtns.begin();
+-    for ( ; itMapBtn != m_mapOptBtns.end(); itMapBtn++) {
++    QMap<int, QToolButton *>::iterator itMapBtn = m_mapOptBtns.begin();
++    for (; itMapBtn != m_mapOptBtns.end(); itMapBtn++) {
+         if (itMapBtn.value()) {
+             m_btnGroup->removeButton(itMapBtn.value());
+             m_layoutOptBtns->removeWidget(itMapBtn.value());
+@@ -319,66 +308,44 @@ void LoginOptionsWidget::updateOptionButtons()
+     clearOptionButtons();
+     addOptionButton(LOGINOPT_TYPE_PASSWORD, -1, tr("Password"));
+     DeviceMap::iterator itMapDev = m_mapDevices.begin();
+-    for ( ; itMapDev != m_mapDevices.end(); itMapDev++) {
++    for (; itMapDev != m_mapDevices.end(); itMapDev++) {
+         for (DeviceInfoPtr devPtr : itMapDev.value()) {
+             if (devPtr) {
+-                if(devPtr->biotype == LOGINOPT_TYPE_GENERAL_UKEY){
+-                    //ukey 设备类型排在二维码前,但实际上应该显示在二维码之后,因此暂时不添加
++                if (devPtr->biotype == LOGINOPT_TYPE_GENERAL_UKEY) {
++                    // ukey 设备类型排在二维码前,但实际上应该显示在二维码之后,因此暂时不添加
+                     isShowUkey = true;
+                     continue;
+                 }
+-	        addOptionButton(itMapDev.key(), devPtr->device_id, BioDevices::bioTypeToString_tr(devPtr->biotype));
+-	    }
++                addOptionButton(itMapDev.key(), devPtr->device_id, BioDevices::bioTypeToString_tr(devPtr->biotype));
++            }
+         }
+     }
+ 
+     itMapDev = m_mapDevices.begin();
+-    if(isShowUkey){
+-        for ( ; itMapDev != m_mapDevices.end(); itMapDev++) {
++    if (isShowUkey) {
++        for (; itMapDev != m_mapDevices.end(); itMapDev++) {
+             for (DeviceInfoPtr devPtr : itMapDev.value()) {
+-                if(devPtr && devPtr->biotype == LOGINOPT_TYPE_GENERAL_UKEY){
+-                    //此处才添加ukey
++                if (devPtr && devPtr->biotype == LOGINOPT_TYPE_GENERAL_UKEY) {
++                    // 此处才添加ukey
+                     addOptionButton(itMapDev.key(), devPtr->device_id, BioDevices::bioTypeToString_tr(devPtr->biotype));
+-		}
++                }
+             }
+         }
+     }
+ 
+-    //存在特征但没有插入ukey
+-    if( !isShowUkey && m_biomericProxy->GetHasUkeyFeature(m_uid)){
+-        addOptionButton(LOGINOPT_TYPE_GENERAL_UKEY,-2,BioDevices::bioTypeToString_tr(LOGINOPT_TYPE_GENERAL_UKEY));
++    // 存在特征但没有插入ukey
++    if (!isShowUkey && m_biomericProxy->GetHasUkeyFeature(m_uid)) {
++        addOptionButton(LOGINOPT_TYPE_GENERAL_UKEY, -2, BioDevices::bioTypeToString_tr(LOGINOPT_TYPE_GENERAL_UKEY));
+         isShowUkey = true;
+     }
+ 
+-    if (m_mapOptBtns.size() <= 2 && !isShowUkey) {
+-        //因为默认添加一个密码选项,因此当ukey没有显示出来时,按钮数小于等于2时就隐藏选项界面
+-        m_labelOptTitle->hide();
+-        QMap<int, QToolButton*>::iterator itMapBtn = m_mapOptBtns.begin();
+-        for ( ; itMapBtn != m_mapOptBtns.end(); itMapBtn++) {
+-            if (itMapBtn.value()) {
+-                itMapBtn.value()->hide();
+-            }
+-        }
+-        if (m_mapOptBtns.size() == 0) {
+-            m_labelFace->hide();
+-            m_labelQRCode->hide();
+-        }
+-    } else {
+-        m_labelOptTitle->show();
+-        QMap<int, QToolButton*>::iterator itMapBtn = m_mapOptBtns.begin();
+-        for ( ; itMapBtn != m_mapOptBtns.end(); itMapBtn++) {
+-            if (itMapBtn.value()) {
+-                itMapBtn.value()->show();
+-            }
++    m_labelOptTitle->show();
++    QMap<int, QToolButton *>::iterator itMapBtn = m_mapOptBtns.begin();
++    for (; itMapBtn != m_mapOptBtns.end(); itMapBtn++) {
++        if (itMapBtn.value()) {
++            itMapBtn.value()->show();
+         }
+     }
+-
+-    m_mapOptBtns[-1]->hide();
+-    if(m_mapOptBtns.size() == 2 && isShowUkey) {
+-        m_mapOptBtns[-1]->show();
+-    }
+-
+-    adjustSize();
+ }
+ 
+ void LoginOptionsWidget::setUser(int uid)
+@@ -404,53 +371,49 @@ void LoginOptionsWidget::readDevicesInfo()
+     DeviceList deviceList = m_bioDevices->GetDevList();
+     QStringList listDefDevices = m_bioDevices->getAllDefDevices();
+     FeatureMap mapFeatures = m_bioDevices->GetUserFeatures(m_uid);
+-        qDebug() << m_uid <<",count:"<<mapFeatures.size();
++    qDebug() << m_uid << ",count:" << mapFeatures.size();
+ 
+-    for(auto pDeviceInfo : deviceList)
+-    {
++    for (auto pDeviceInfo : deviceList) {
+         int nDevFeatureCount = 0;
+         if (m_isInAuth && m_curDevInfo && m_curDevInfo->device_id == pDeviceInfo->device_id) {
+             nDevFeatureCount = 1;
+         } else {
+             if (m_uid == -1) {
+                 nDevFeatureCount = 0;
+-            } else if(mapFeatures.contains(pDeviceInfo->device_shortname)){
++            } else if (mapFeatures.contains(pDeviceInfo->device_shortname)) {
+                 nDevFeatureCount = mapFeatures[pDeviceInfo->device_shortname].size();
+             }
+         }
+-        qDebug() << *pDeviceInfo << ",FeatureCount:"<<nDevFeatureCount;
+-        if(nDevFeatureCount > 0) {
++        qDebug() << *pDeviceInfo << ",FeatureCount:" << nDevFeatureCount;
++        if (nDevFeatureCount > 0) {
+             if (!isAuthEnable && pDeviceInfo->biotype <= BIOTYPE_VOICEPRINT)
+                 continue;
+             if (!isQRCodeEnable && pDeviceInfo->biotype == REMOTE_QRCODE_TYPE)
+                 continue;
+             int nDevType = LOGINOPT_TYPE_OTHERS;
+             nDevType = convertDeviceType(pDeviceInfo->biotype);
+-            if (listDefDevices.contains(pDeviceInfo->device_shortname) &&
+-               !m_mapDevices.contains(nDevType)) {
++            if (listDefDevices.contains(pDeviceInfo->device_shortname) && !m_mapDevices.contains(nDevType)) {
+                 m_mapDevices[nDevType].push_back(pDeviceInfo);
+             }
+         }
+     }
+     updateOptionButtons();
+     updateUIStatus(false);
+-    //Q_EMIT notifyOptionsChange(m_mapDevices.size());
++    // Q_EMIT notifyOptionsChange(m_mapDevices.size());
+ }
+ 
+ void LoginOptionsWidget::startAuth(DeviceInfoPtr device, int uid)
+ {
+-    if(!device || !m_biomericProxy || is_Lock)
+-    {
++    if (!device || !m_biomericProxy || is_Lock) {
+         qWarning() << "BiometricProxy doesn't exist.";
+         return;
+     }
+ 
+-    if(m_isInAuth)
+-    {
++    if (m_isInAuth) {
+         qDebug() << "Identification is currently under way, stop it";
+         stopAuth();
+     }
+-    qDebug()<<"deviceInfo:"<<device->device_id;
++    qDebug() << "deviceInfo:" << device->device_id;
+     this->m_curDevInfo = device;
+     this->m_uid = uid;
+     struct passwd *pwdInfo = getpwuid(uid);
+@@ -469,7 +432,7 @@ void LoginOptionsWidget::startAuth(DeviceInfoPtr device, int uid)
+ void LoginOptionsWidget::setSelectedPassword()
+ {
+     if (m_mapOptBtns.contains(-1)) {
+-        QToolButton* btn = m_mapOptBtns[-1];
++        QToolButton *btn = m_mapOptBtns[-1];
+         if (btn && btn->isVisible()) {
+             btn->setChecked(true);
+         }
+@@ -480,42 +443,41 @@ void LoginOptionsWidget::setSelectedPassword()
+ void LoginOptionsWidget::startAuth_()
+ {
+     if (!m_curDevInfo)
+-        return ;
++        return;
+     qDebug().noquote() << QString("Identify:[drvid: %1, uid: %2]").arg(m_curDevInfo->device_id).arg(m_uid);
+ 
+     m_isInAuth = true;
+     m_dupFD = -1;
+-    if(!w_timer)
+-    {
++    if (!w_timer) {
+         w_timer = new QTimer(this);
+         w_timer->setInterval(150);
+         connect(w_timer, &QTimer::timeout, this, &LoginOptionsWidget::updatePixmap);
+     }
+     m_waitingPixmap = QIcon::fromTheme("ukui-loading-0-symbolic").pixmap(24, 24);
+-    if(m_curLoginOptType == LOGINOPT_TYPE_QRCODE) {
++    if (m_curLoginOptType == LOGINOPT_TYPE_QRCODE) {
+         m_labelQRCodeTip->setPixmap(m_waitingPixmap);
+         m_labelQRCodeTip->show();
+         m_labelQRCodeMsg->hide();
+-    } else if(m_curLoginOptType == LOGINOPT_TYPE_FACE) {
+-        m_labelFace->setStyleSheet(QString("border-radius: %1px;  border:0px solid white;background-color: rgba(230,230,230,0.39);").arg(77));
++    } else if (m_curLoginOptType == LOGINOPT_TYPE_FACE) {
++        m_labelFace->setStyleSheet(
++            QString("border-radius: %1px;  border:0px solid white;background-color: rgba(230,230,230,0.39);").arg(77));
+         m_labelFace->setPixmap(QPixmap(""));
+         m_labelFaceLoad->setPixmap(m_waitingPixmap);
+         m_labelFaceLoad->show();
+     }
+     w_timer->start();
+-    m_bioDevices->recordAuthDrive("polkit",m_curDevInfo->device_id,true);
++    m_bioDevices->recordAuthDrive("polkit", m_curDevInfo->device_id, true);
+     m_biomericProxy->startAuth(m_uid, m_curDevInfo);
+ }
+ 
+ void LoginOptionsWidget::stopAuth()
+ {
+     m_isStopped = true;
+-    if(!m_isInAuth || !m_curDevInfo)
+-    {
++    if (!m_isInAuth || !m_curDevInfo) {
+         return;
+     }
+     m_biomericProxy->stopAuth();
+-    if(m_retrytimer&&m_retrytimer->isActive()){
++    if (m_retrytimer && m_retrytimer->isActive()) {
+         m_retrytimer->stop();
+         delete m_retrytimer;
+         m_retrytimer = nullptr;
+@@ -531,27 +493,26 @@ void LoginOptionsWidget::updatePixmap()
+     QMatrix matrix;
+     matrix.rotate(90.0);
+     m_waitingPixmap = m_waitingPixmap.transformed(matrix, Qt::FastTransformation);
+-    if(m_curLoginOptType == LOGINOPT_TYPE_QRCODE)
++    if (m_curLoginOptType == LOGINOPT_TYPE_QRCODE)
+         m_labelQRCodeTip->setPixmap(m_waitingPixmap);
+-    else if(m_curLoginOptType == LOGINOPT_TYPE_FACE) {
++    else if (m_curLoginOptType == LOGINOPT_TYPE_FACE) {
+         m_labelFaceLoad->setPixmap(m_waitingPixmap);
+     }
+ }
+ 
+ void LoginOptionsWidget::onAuthFinished()
+ {
+-    if(m_bioDevices){
+-        m_bioDevices->recordAuthDrive("polkit",0,false);
++    if (m_bioDevices) {
++        m_bioDevices->recordAuthDrive("polkit", 0, false);
+     }
+ }
+ 
+ void LoginOptionsWidget::onIdentifyComplete(int uid, bool ret, int retErrNo)
+ {
+-    if(m_isStopped == true)
+-        return ;
++    if (m_isStopped == true)
++        return;
+ 
+-    if(uid < 0)
+-    {
++    if (uid < 0) {
+         readDevicesInfo();
+         Q_EMIT authComplete(uid, false, -1);
+         return;
+@@ -559,23 +520,28 @@ void LoginOptionsWidget::onIdentifyComplete(int uid, bool ret, int retErrNo)
+     qDebug() << retErrNo << uid << m_uid;
+ 
+     // 特征识别成功,而且用户id匹配
+-    if(retErrNo == DBUS_RESULT_SUCCESS && uid == m_uid) {
++    if (retErrNo == DBUS_RESULT_SUCCESS && uid == m_uid) {
+         qDebug() << "Identify success";
+         Q_EMIT authComplete(uid, true, 0);
+-    } else if(retErrNo == -1) { // 特征识别不匹配
++    } else if (retErrNo == -1) { // 特征识别不匹配
+         qDebug() << "Identify failed";
+         Q_EMIT authComplete(uid, false, 2);
+-    } else if(retErrNo == -2) {  //识别发生错误
++    } else if (retErrNo == -2) { // 识别发生错误
+         StatusReslut ret = m_bioDevices->UpdateStatus(m_curDevInfo->device_id);
+-        qDebug()<<"StatusReslut:"<<ret.result<<","<<ret.enable<<","<<ret.devNum<<","
+-                          <<ret.devStatus<<","<<ret.opsStatus<<","<<ret.notifyMessageId;
+-        //识别操作超时
+-        if(ret.result == 0 && (ret.opsStatus == 404 || ret.opsStatus == 304
+-              || ret.opsStatus == 8)) { // 304认证超时, 8网络异常
++        qDebug() << "StatusReslut:" << ret.result << "," << ret.enable << "," << ret.devNum << "," << ret.devStatus
++                 << "," << ret.opsStatus << "," << ret.notifyMessageId;
++        // 识别操作超时
++        if (ret.result == 0 && ret.opsStatus == 10) { // 10 当前时间错误导致网络错误
++            Q_EMIT authComplete(uid, false, -4);
++        } else if (
++            ret.result == 0
++            && (ret.opsStatus == 404 || ret.opsStatus == 304 || ret.opsStatus == 8)) { // 304认证超时, 8网络异常
+             Q_EMIT authComplete(uid, false, 1);
+         } else if (ret.opsStatus == OPS_IDENTIFY_STOP_BY_USER || ret.opsStatus == OPS_VERIFY_STOP_BY_USER) {
+             Q_EMIT authComplete(uid, false, -2); // 主动停止,直接重试
+-        } else if (ret.opsStatus == OPS_OPEN_FAIL || ret.opsStatus == OPS_OPEN_ERROR) {     // 无法打开设备(设备是坏的/被占用),直接禁用
++        } else if (
++            ret.opsStatus == OPS_OPEN_FAIL
++            || ret.opsStatus == OPS_OPEN_ERROR) { // 无法打开设备(设备是坏的/被占用),直接禁用
+             Q_EMIT authComplete(uid, false, 5);
+         } else {
+             Q_EMIT authComplete(uid, false, 2);
+@@ -592,14 +558,14 @@ QPixmap LoginOptionsWidget::PixmapToRound(const QPixmap &src, int radius)
+     }
+ 
+     QPixmap pixmapa(src);
+-    QPixmap pixmap(radius*2,radius*2);
++    QPixmap pixmap(radius * 2, radius * 2);
+     pixmap.fill(Qt::transparent);
+     QPainter painter(&pixmap);
+     painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
+     QPainterPath path;
+-    path.addEllipse(0, 0, radius*2, radius*2);
++    path.addEllipse(0, 0, radius * 2, radius * 2);
+     painter.setClipPath(path);
+-    painter.drawPixmap(0, 0, radius*2, radius*2, pixmapa);
++    painter.drawPixmap(0, 0, radius * 2, radius * 2, pixmapa);
+     return pixmap;
+ }
+ 
+@@ -614,13 +580,13 @@ QPixmap LoginOptionsWidget::PixmapToRound(const QPixmap &src, int radius)
+ QPixmap LoginOptionsWidget::scaledPixmap(int width, int height, QString url)
+ {
+     QFile imgFile(url);
+-    if(!imgFile.exists()){
+-        qDebug()<< "not find the pixmap file";
++    if (!imgFile.exists()) {
++        qDebug() << "not find the pixmap file";
+         return QPixmap();
+     }
+     QImage image(url);
+     QPixmap pixmap = QPixmap::fromImage(image);
+-    if(pixmap.isNull()) {
++    if (pixmap.isNull()) {
+         qDebug() << "pixmap is null";
+         QProcess exec;
+         QString program("file " + url);
+@@ -628,7 +594,7 @@ QPixmap LoginOptionsWidget::scaledPixmap(int width, int height, QString url)
+         exec.waitForFinished(1000);
+         QString output = exec.readAllStandardOutput();
+         qDebug() << output;
+-        if(output.contains("SVG")){
++        if (output.contains("SVG")) {
+             qDebug() << "image format is SVG";
+             QSvgRenderer render(url);
+             QImage image(width, height, QImage::Format_ARGB32);
+@@ -636,9 +602,8 @@ QPixmap LoginOptionsWidget::scaledPixmap(int width, int height, QString url)
+             QPainter painter(&image);
+             render.render(&painter, image.rect());
+             pixmap.convertFromImage(image);
+-        } else if(output.contains("TIFF")) {
++        } else if (output.contains("TIFF")) {
+             qDebug() << "image format is TIFF";
+-
+         }
+     }
+ 
+@@ -647,42 +612,46 @@ QPixmap LoginOptionsWidget::scaledPixmap(int width, int height, QString url)
+ 
+ void LoginOptionsWidget::onFrameWritten(int drvid)
+ {
+-    if(!m_curDevInfo)
++    if (!m_curDevInfo)
+         return;
+ 
+-    if (m_curDevInfo &&  m_curDevInfo->device_id != drvid || !m_isInAuth) {
+-        return ;
++    if (m_curDevInfo && m_curDevInfo->device_id != drvid || !m_isInAuth) {
++        return;
+     }
+ 
+-    if(m_dupFD == -1){
++    if (m_dupFD == -1) {
+         m_dupFD = get_server_gvariant_stdout(drvid);
+     }
+ 
+-    if(m_dupFD <= 0)
+-        return ;
++    if (m_dupFD <= 0)
++        return;
+ 
+     cv::Mat img;
+     lseek(m_dupFD, 0, SEEK_SET);
+-    char base64_bufferData[1024*1024];
+-    int rc = read(m_dupFD, base64_bufferData, 1024*1024);
++    char base64_bufferData[1024 * 1024];
++    int rc = read(m_dupFD, base64_bufferData, 1024 * 1024);
+     Q_UNUSED(rc);
+     // printf("rc = %d\n", rc);
+ 
+     cv::Mat mat2(1, sizeof(base64_bufferData), CV_8U, base64_bufferData);
+     img = cv::imdecode(mat2, cv::IMREAD_COLOR);
+     if (!img.data)
+-        return ;
+-    cv::cvtColor(img,img,cv::COLOR_BGR2RGB);
++        return;
++    cv::cvtColor(img, img, cv::COLOR_BGR2RGB);
+ 
+-    QImage srcQImage = QImage((uchar*)(img.data), img.cols, img.rows, QImage::Format_RGB888);
++    QImage srcQImage = QImage((uchar *)(img.data), img.cols, img.rows, QImage::Format_RGB888);
+     if (isAuthenticating()) {
+         if (m_curLoginOptType == LOGINOPT_TYPE_FACE) {
+-            m_labelFace->setStyleSheet(QString("border-radius: %1px;  border:0px solid white;background-color: rgba(255,255,255,10%);").arg(77));
++            m_labelFace->setStyleSheet(
++                QString("border-radius: %1px;  border:0px solid white;background-color: rgba(255,255,255,10%);")
++                    .arg(77));
+             setFaceImg(srcQImage);
+             m_labelFace->show();
+             m_labelQRCode->hide();
+         } else if (m_curLoginOptType == LOGINOPT_TYPE_QRCODE) {
+-            m_labelQRCode->setStyleSheet(QString("border-radius: %1px;  border:0px solid white;background-color: rgba(255,255,255,100%);").arg(6));
++            m_labelQRCode->setStyleSheet(
++                QString("border-radius: %1px;  border:0px solid white;background-color: rgba(255,255,255,100%);")
++                    .arg(6));
+             setQRCode(srcQImage);
+             m_labelQRCode->show();
+             m_labelQRCodeTip->hide();
+@@ -695,14 +664,13 @@ void LoginOptionsWidget::onFrameWritten(int drvid)
+         m_labelFace->hide();
+         m_labelQRCode->hide();
+     }
+-    if(w_timer && w_timer->isActive())
+-    {
++    if (w_timer && w_timer->isActive()) {
+         w_timer->stop();
+     }
+     Q_EMIT updateImage(srcQImage);
+ }
+ 
+-void LoginOptionsWidget::setQRCode(QImage& imgQRCode)
++void LoginOptionsWidget::setQRCode(QImage &imgQRCode)
+ {
+     if (imgQRCode.isNull()) {
+         imgQRCode.load(QString("%1/images/ukui-qrcode-null.svg").arg(GET_STR(UKUI_BIOMETRIC)));
+@@ -716,41 +684,49 @@ void LoginOptionsWidget::setQRCodeMsg(QString strMsg)
+ {
+     if (strMsg.isEmpty()) {
+         m_labelQRCodeMsg->hide();
+-        //m_labelQRCodeTip->hide();
++        // m_labelQRCodeTip->hide();
+     } else {
+-        //一开始认证时就没有网,直接停止加载状态
+-        if(w_timer && w_timer->isActive())
+-        {
++        // 一开始认证时就没有网,直接停止加载状态
++        if (w_timer && w_timer->isActive()) {
+             w_timer->stop();
+         }
+         m_labelQRCodeMsg->setText(strMsg);
+         m_labelQRCodeMsg->show();
+         m_labelQRCodeTip->show();
+-        m_labelQRCodeTip->setPixmap(QIcon::fromTheme("dialog-warning").pixmap(QSize(22,22)));
++        m_labelQRCodeTip->setPixmap(QIcon::fromTheme("dialog-warning").pixmap(QSize(22, 22)));
+     }
+ }
+ 
+-void LoginOptionsWidget::setFaceImg(QImage& imgFace, int nStatus)
++void LoginOptionsWidget::setFaceImg(QImage &imgFace, int nStatus)
+ {
+     QPixmap faceImage;
+-    m_labelFace->setFixedSize(154,154);
+-    //如果头像文件不存在,则使用默认头像
+-    if(!imgFace.isNull()) {
+-        faceImage = PixmapToRound(QPixmap::fromImage(imgFace),77);
++    m_labelFace->setFixedSize(154, 154);
++    // 如果头像文件不存在,则使用默认头像
++    if (!imgFace.isNull()) {
++        faceImage = PixmapToRound(QPixmap::fromImage(imgFace), 77);
+     } else {
+-        switch(nStatus) {
+-        case 1:
+-            faceImage = loadSvg(QString("%1/images/ukui-loginopt-lose.svg").arg(GET_STR(UKUI_BIOMETRIC)),"black",48);
+-            m_labelFace->setStyleSheet(QString("border-radius: %1px;  border:0px solid white;background-color: rgba(230,230,230,40%);").arg(77));
+-            break;
+-        case 2:
+-            faceImage = loadSvg(QString("%1/images/ukui-loginopt-smile.svg").arg(GET_STR(UKUI_BIOMETRIC)),"gray",48);
+-            m_labelFace->setStyleSheet(QString("border-radius: %1px;  border:0px solid white;background-color: rgba(230,230,230,100%);").arg(77));
+-            break;
+-        default:
+-            faceImage = loadSvg(QString("%1/images/ukui-loginopt-smile.svg").arg(GET_STR(UKUI_BIOMETRIC)),"black",48);
+-            m_labelFace->setStyleSheet(QString("border-radius: %1px;  border:0px solid white;background-color: rgba(230,230,230,40%);").arg(77));
+-            break;
++        switch (nStatus) {
++            case 1:
++                faceImage
++                    = loadSvg(QString("%1/images/ukui-loginopt-lose.svg").arg(GET_STR(UKUI_BIOMETRIC)), "black", 48);
++                m_labelFace->setStyleSheet(
++                    QString("border-radius: %1px;  border:0px solid white;background-color: rgba(230,230,230,40%);")
++                        .arg(77));
++                break;
++            case 2:
++                faceImage
++                    = loadSvg(QString("%1/images/ukui-loginopt-smile.svg").arg(GET_STR(UKUI_BIOMETRIC)), "gray", 48);
++                m_labelFace->setStyleSheet(
++                    QString("border-radius: %1px;  border:0px solid white;background-color: rgba(230,230,230,100%);")
++                        .arg(77));
++                break;
++            default:
++                faceImage
++                    = loadSvg(QString("%1/images/ukui-loginopt-smile.svg").arg(GET_STR(UKUI_BIOMETRIC)), "black", 48);
++                m_labelFace->setStyleSheet(
++                    QString("border-radius: %1px;  border:0px solid white;background-color: rgba(230,230,230,40%);")
++                        .arg(77));
++                break;
+         }
+     }
+ 
+@@ -761,22 +737,19 @@ void LoginOptionsWidget::setFaceImg(QImage& imgFace, int nStatus)
+ 
+ void LoginOptionsWidget::onStatusChanged(int drvid, const QString &message)
+ {
+-    if(!m_isInAuth || !m_curDevInfo)
+-    {
++    if (!m_isInAuth || !m_curDevInfo) {
+         return;
+     }
+-    if(drvid != m_curDevInfo->device_id)
+-    {
++    if (drvid != m_curDevInfo->device_id) {
+         return;
+     }
+-    //Q_EMIT updateAuthMsg(message);
++    // Q_EMIT updateAuthMsg(message);
+ }
+ 
+ void LoginOptionsWidget::setCurrentDevice(int drvid)
+ {
+     DeviceInfoPtr pDeviceInfo = findDeviceById(drvid);
+-    if(pDeviceInfo)
+-    {
++    if (pDeviceInfo) {
+         setCurrentDevice(pDeviceInfo);
+     }
+ }
+@@ -784,8 +757,7 @@ void LoginOptionsWidget::setCurrentDevice(int drvid)
+ void LoginOptionsWidget::setCurrentDevice(const QString &deviceName)
+ {
+     DeviceInfoPtr pDeviceInfo = findDeviceByName(deviceName);
+-    if(pDeviceInfo)
+-    {
++    if (pDeviceInfo) {
+         setCurrentDevice(pDeviceInfo);
+     }
+ }
+@@ -797,15 +769,11 @@ void LoginOptionsWidget::setCurrentDevice(const DeviceInfoPtr &pDeviceInfo)
+ 
+ DeviceInfoPtr LoginOptionsWidget::findDeviceById(int drvid)
+ {
+-    for(int type : m_mapDevices.keys())
+-    {
++    for (int type : m_mapDevices.keys()) {
+         DeviceList &deviceList = m_mapDevices[type];
+-        auto iter = std::find_if(deviceList.begin(), deviceList.end(),
+-                                 [&](DeviceInfoPtr ptr){
+-            return ptr->device_id == drvid;
+-        });
+-        if(iter != deviceList.end())
+-        {
++        auto iter = std::find_if(
++            deviceList.begin(), deviceList.end(), [&](DeviceInfoPtr ptr) { return ptr->device_id == drvid; });
++        if (iter != deviceList.end()) {
+             return *iter;
+         }
+     }
+@@ -814,25 +782,21 @@ DeviceInfoPtr LoginOptionsWidget::findDeviceById(int drvid)
+ 
+ DeviceInfoPtr LoginOptionsWidget::findDeviceByName(const QString &name)
+ {
+-    for(int type : m_mapDevices.keys())
+-    {
++    for (int type : m_mapDevices.keys()) {
+         DeviceList &deviceList = m_mapDevices[type];
+-        auto iter = std::find_if(deviceList.begin(), deviceList.end(),
+-                                 [&](DeviceInfoPtr ptr){
+-            return ptr->device_shortname == name;
+-        });
+-        if(iter != deviceList.end())
+-        {
++        auto iter = std::find_if(
++            deviceList.begin(), deviceList.end(), [&](DeviceInfoPtr ptr) { return ptr->device_shortname == name; });
++        if (iter != deviceList.end()) {
+             return *iter;
+         }
+     }
+     return DeviceInfoPtr();
+ }
+ 
+-QString LoginOptionsWidget::GetDefaultDevice(uid_t uid,int bioType)
++QString LoginOptionsWidget::GetDefaultDevice(uid_t uid, int bioType)
+ {
+     QString defaultDeviceName = "";
+-    DeviceInfoPtr pDeviceInfo = m_bioDevices->getDefaultDevice(uid,bioType);
++    DeviceInfoPtr pDeviceInfo = m_bioDevices->getDefaultDevice(uid, bioType);
+     if (pDeviceInfo) {
+         defaultDeviceName = pDeviceInfo->device_shortname;
+     }
+@@ -855,19 +819,19 @@ QString LoginOptionsWidget::GetDefaultDevice(uid_t uid)
+ 
+ void LoginOptionsWidget::onUSBDeviceCountChange(int newNum)
+ {
+-    qDebug()<<"deviceNewNum:"<<newNum;
++    qDebug() << "deviceNewNum:" << newNum;
+     int savedCount = 0;
+-    for(int type : m_mapDevices.keys())
++    for (int type : m_mapDevices.keys())
+         savedCount += m_mapDevices.value(type).count();
+ 
+     readDevicesInfo();
+ 
+     int count = 0;
+-    for(int type : m_mapDevices.keys())
++    for (int type : m_mapDevices.keys())
+         count += m_mapDevices.value(type).count();
+-    
+-    //设备数量发生了变化
+-    if(count != savedCount) {
++
++    // 设备数量发生了变化
++    if (count != savedCount) {
+         updateOptionButtons();
+         Q_EMIT notifyOptionsChange(count);
+     }
+@@ -876,40 +840,25 @@ void LoginOptionsWidget::onUSBDeviceCountChange(int newNum)
+ 
+ void LoginOptionsWidget::updateUkeyUIStatus(int type)
+ {
+-    if (type == LOGINOPT_TYPE_FACE) {
+-        m_labelFace->setStyleSheet(QString("border-radius: %1px;  border:0px solid white;background-color: rgba(255,255,255,10%);").arg(77));
+-        m_labelFace->show();
+-        m_labelQRCode->hide();
+-        m_widgetImage->show();
+-    } else if (type == LOGINOPT_TYPE_QRCODE) {
+-        m_labelQRCode->setStyleSheet(QString("border-radius: %1px;  border:0px solid white;background-color: rgba(255,255,255,100%);").arg(6));
+-        QImage img;
+-        setQRCode(img);
+-        m_labelQRCode->show();
+-        m_labelFace->hide();
+-        m_widgetImage->show();
+-    } else {
+-        m_labelFace->hide();
+-        m_labelQRCode->hide();
+-        m_widgetImage->hide();
+-    }
++    m_labelFace->hide();
++    m_labelQRCode->hide();
++    m_widgetImage->hide();
++    setFixedHeight(m_labelOptTitle->height() + 12 + 36);
+ 
+-    QTimer::singleShot(0,this,[&,this](){
+-        Q_EMIT this->updateWndSize(this->m_curLoginOptType, this->m_mapOptBtns.size());
+-    });
++    Q_EMIT this->updateWndSize(this->m_curLoginOptType, this->m_mapOptBtns.size());
+ }
+ 
+-void LoginOptionsWidget::updateUIStatus(bool update)
++void LoginOptionsWidget::updateUIStatus(bool update, int nPreOptType /* = -1*/)
+ {
+     if (m_mapOptBtns.contains(-1)) {
+-        QToolButton* btn = m_mapOptBtns[-1];
++        QToolButton *btn = m_mapOptBtns[-1];
+         if (btn && btn->isVisible()) {
+             btn->setChecked(true);
+         }
+     }
+     if (m_curDevInfo) {
+         if (m_mapOptBtns.contains(m_curDevInfo->device_id)) {
+-            QToolButton* btn = m_mapOptBtns[m_curDevInfo->device_id];
++            QToolButton *btn = m_mapOptBtns[m_curDevInfo->device_id];
+             if (btn) {
+                 btn->setChecked(true);
+             }
+@@ -917,27 +866,41 @@ void LoginOptionsWidget::updateUIStatus(bool update)
+     }
+ 
+     if (update) {
++        if (nPreOptType != -1) {
++            m_curLoginOptType = nPreOptType;
++        }
+         if (m_curLoginOptType == LOGINOPT_TYPE_FACE) {
+-            m_labelFace->setStyleSheet(QString("border-radius: %1px;  border:0px solid white;background-color: rgba(255,255,255,10%);").arg(77));
++            m_labelFace->setStyleSheet(
++                QString("border-radius: %1px;  border:0px solid white;background-color: rgba(255,255,255,10%);")
++                    .arg(77));
+             m_labelFace->show();
+             m_labelQRCode->hide();
+             m_widgetImage->show();
++            setFixedHeight(m_labelOptTitle->height() + 12 + 36 + 12 + 154 + 48);
+         } else if (m_curLoginOptType == LOGINOPT_TYPE_QRCODE) {
+-            m_labelQRCode->setStyleSheet(QString("border-radius: %1px;  border:0px solid white;background-color: rgba(255,255,255,100%);").arg(6));
++            m_labelQRCode->setStyleSheet(
++                QString("border-radius: %1px;  border:0px solid white;background-color: rgba(255,255,255,100%);")
++                    .arg(6));
+             QImage img;
+             setQRCode(img);
+             m_labelQRCode->show();
+             m_labelFace->hide();
+             m_widgetImage->show();
++            setFixedHeight(m_labelOptTitle->height() + 12 + 36 + 12 + 154 + 48);
+         } else {
+             m_labelFace->hide();
+             m_labelQRCode->hide();
+-            m_widgetImage->hide();
++            if (m_curLoginOptType == LOGINOPT_TYPE_FINGERPRINT || m_curLoginOptType == LOGINOPT_TYPE_FINGERVEIN
++                || m_curLoginOptType == LOGINOPT_TYPE_IRIS || m_curLoginOptType == LOGINOPT_TYPE_VOICEPRINT) {
++                m_widgetImage->show();
++                setFixedHeight(m_labelOptTitle->height() + 12 + 36 + 12 + 154 + 48);
++            } else {
++                m_widgetImage->hide();
++                setFixedHeight(m_labelOptTitle->height() + 12 + 36 + 24);
++            }
+         }
+-    }
+-    QTimer::singleShot(0,this,[&,this](){
+         Q_EMIT this->updateWndSize(this->m_curLoginOptType, this->m_mapOptBtns.size());
+-    });
++    }
+ }
+ 
+ void LoginOptionsWidget::onOptionSelected(int nIndex)
+@@ -949,17 +912,17 @@ void LoginOptionsWidget::onOptionSelected(int nIndex)
+         if (info && !isDeviceDisable(info->device_id)) {
+             Q_EMIT optionSelected(convertDeviceType(info->biotype), info);
+             this->m_curLoginOptType = convertDeviceType(info->biotype);
+-        }else if(nIndex == 0 && m_listDriveId[nIndex] == -1){
++        } else if (nIndex == 0 && m_listDriveId[nIndex] == -1) {
+             stopAuth();
+             m_curDevInfo = nullptr;
+-            Q_EMIT optionSelected(LOGINOPT_TYPE_PASSWORD,nullptr);
++            Q_EMIT optionSelected(LOGINOPT_TYPE_PASSWORD, nullptr);
+             this->m_curLoginOptType = LOGINOPT_TYPE_PASSWORD;
+ 
+-        }else if(m_listDriveId[nIndex] == -2){
+-            //存在ukey特征,但未插入ukey
++        } else if (m_listDriveId[nIndex] == -2) {
++            // 存在ukey特征,但未插入ukey
+             stopAuth();
+             m_curDevInfo = nullptr;
+-            Q_EMIT optionSelected(LOGINOPT_TYPE_GENERAL_UKEY,nullptr);
++            Q_EMIT optionSelected(LOGINOPT_TYPE_GENERAL_UKEY, nullptr);
+             this->m_curLoginOptType = LOGINOPT_TYPE_GENERAL_UKEY;
+         }
+     }
+@@ -969,33 +932,33 @@ int LoginOptionsWidget::convertDeviceType(int nDevType)
+ {
+     int nLoginOptType = LOGINOPT_TYPE_OTHERS;
+     switch (nDevType) {
+-    case BIOTYPE_FINGERPRINT:
+-        nLoginOptType = LOGINOPT_TYPE_FINGERPRINT;
+-        break;
+-    case BIOTYPE_FINGERVEIN:
+-        nLoginOptType = LOGINOPT_TYPE_FINGERVEIN;
+-        break;
+-    case BIOTYPE_IRIS:
+-        nLoginOptType = LOGINOPT_TYPE_IRIS;
+-        break;
+-    case BIOTYPE_FACE:
+-        nLoginOptType = LOGINOPT_TYPE_FACE;
+-        break;
+-    case BIOTYPE_VOICEPRINT:
+-        nLoginOptType = LOGINOPT_TYPE_VOICEPRINT;
+-        break;
+-    case UniT_General_Ukey:
+-        nLoginOptType = LOGINOPT_TYPE_GENERAL_UKEY;
+-        break;
+-    case UniT_Advanced_Ukey:
+-        nLoginOptType = LOGINOPT_TYPE_ADVANCED_UKEY;
+-        break;
+-    case REMOTE_QRCODE_TYPE:
+-        nLoginOptType = LOGINOPT_TYPE_QRCODE;
+-        break;
+-    default:
+-        nLoginOptType = LOGINOPT_TYPE_OTHERS;
+-        break;
++        case BIOTYPE_FINGERPRINT:
++            nLoginOptType = LOGINOPT_TYPE_FINGERPRINT;
++            break;
++        case BIOTYPE_FINGERVEIN:
++            nLoginOptType = LOGINOPT_TYPE_FINGERVEIN;
++            break;
++        case BIOTYPE_IRIS:
++            nLoginOptType = LOGINOPT_TYPE_IRIS;
++            break;
++        case BIOTYPE_FACE:
++            nLoginOptType = LOGINOPT_TYPE_FACE;
++            break;
++        case BIOTYPE_VOICEPRINT:
++            nLoginOptType = LOGINOPT_TYPE_VOICEPRINT;
++            break;
++        case UniT_General_Ukey:
++            nLoginOptType = LOGINOPT_TYPE_GENERAL_UKEY;
++            break;
++        case UniT_Advanced_Ukey:
++            nLoginOptType = LOGINOPT_TYPE_ADVANCED_UKEY;
++            break;
++        case REMOTE_QRCODE_TYPE:
++            nLoginOptType = LOGINOPT_TYPE_QRCODE;
++            break;
++        default:
++            nLoginOptType = LOGINOPT_TYPE_OTHERS;
++            break;
+     }
+     return nLoginOptType;
+ }
+@@ -1004,8 +967,8 @@ void LoginOptionsWidget::setDeviceDisable(int nDevId, bool bDisable)
+ {
+     if (bDisable) {
+         m_mapDisableDev[m_uid][nDevId] = true;
+-        QMap<int, QToolButton*>::iterator itMapBtn = m_mapOptBtns.begin();
+-        for ( ; itMapBtn != m_mapOptBtns.end(); itMapBtn++) {
++        QMap<int, QToolButton *>::iterator itMapBtn = m_mapOptBtns.begin();
++        for (; itMapBtn != m_mapOptBtns.end(); itMapBtn++) {
+             if (itMapBtn.key() == nDevId && itMapBtn.value()) {
+                 itMapBtn.value()->setDisabled(true);
+                 break;
+@@ -1013,8 +976,8 @@ void LoginOptionsWidget::setDeviceDisable(int nDevId, bool bDisable)
+         }
+     } else {
+         m_mapDisableDev[m_uid][nDevId] = false;
+-        QMap<int, QToolButton*>::iterator itMapBtn = m_mapOptBtns.begin();
+-        for ( ; itMapBtn != m_mapOptBtns.end(); itMapBtn++) {
++        QMap<int, QToolButton *>::iterator itMapBtn = m_mapOptBtns.begin();
++        for (; itMapBtn != m_mapOptBtns.end(); itMapBtn++) {
+             if (itMapBtn.key() == nDevId && itMapBtn.value()) {
+                 itMapBtn.value()->setDisabled(false);
+                 break;
+@@ -1023,6 +986,28 @@ void LoginOptionsWidget::setDeviceDisable(int nDevId, bool bDisable)
+     }
+ }
+ 
++void LoginOptionsWidget::setAllDeviceDisable(bool bDisable)
++{
++    if (bDisable) {
++        QMap<int, QToolButton *>::iterator itMapBtn = m_mapOptBtns.begin();
++        for (; itMapBtn != m_mapOptBtns.end(); itMapBtn++) {
++
++            m_mapDisableDev[m_uid][itMapBtn.key()] = true;
++            if (itMapBtn.value()) {
++                itMapBtn.value()->setDisabled(true);
++            }
++        }
++    } else {
++        QMap<int, QToolButton *>::iterator itMapBtn = m_mapOptBtns.begin();
++        for (; itMapBtn != m_mapOptBtns.end(); itMapBtn++) {
++            m_mapDisableDev[m_uid][itMapBtn.key()] = false;
++            if (itMapBtn.value()) {
++                itMapBtn.value()->setDisabled(false);
++            }
++        }
++    }
++}
++
+ bool LoginOptionsWidget::isDeviceDisable(int nDevId)
+ {
+     if (m_mapDisableDev[m_uid].contains(nDevId)) {
+@@ -1033,7 +1018,7 @@ bool LoginOptionsWidget::isDeviceDisable(int nDevId)
+ 
+ void LoginOptionsWidget::lockStatusChanged(bool locked)
+ {
+-    if(locked){
++    if (locked) {
+         is_Lock = true;
+         stopAuth();
+     } else {
+@@ -1046,7 +1031,7 @@ QPixmap LoginOptionsWidget::loadSvg(QString path, QString color, int size)
+ {
+     int origSize = size;
+     const auto ratio = qApp->devicePixelRatio();
+-    if ( 2 == ratio) {
++    if (2 == ratio) {
+         size += origSize;
+     } else if (3 == ratio) {
+         size += origSize;
+@@ -1071,22 +1056,22 @@ QPixmap LoginOptionsWidget::drawSymbolicColoredPixmap(QPixmap &source, QString c
+         for (int y = 0; y < img.height(); y++) {
+             auto color = img.pixelColor(x, y);
+             if (color.alpha() > 0) {
+-                if ( "white" == cgColor) {
++                if ("white" == cgColor) {
+                     color.setRed(255);
+                     color.setGreen(255);
+                     color.setBlue(255);
+                     img.setPixelColor(x, y, color);
+-                } else if( "black" == cgColor) {
++                } else if ("black" == cgColor) {
+                     color.setRed(0);
+                     color.setGreen(0);
+                     color.setBlue(0);
+                     img.setPixelColor(x, y, color);
+-                } else if ("gray"== cgColor) {
++                } else if ("gray" == cgColor) {
+                     color.setRed(152);
+                     color.setGreen(163);
+                     color.setBlue(164);
+                     img.setPixelColor(x, y, color);
+-                } else if ("blue" == cgColor){
++                } else if ("blue" == cgColor) {
+                     color.setRed(61);
+                     color.setGreen(107);
+                     color.setBlue(229);
+@@ -1099,3 +1084,160 @@ QPixmap LoginOptionsWidget::drawSymbolicColoredPixmap(QPixmap &source, QString c
+     }
+     return QPixmap::fromImage(img);
+ }
++
++QPixmap LoginOptionsWidget::scaledSmoothPixmap(const QPixmap &src, int nWidth, int nHeight)
++{
++    if (src.isNull()) {
++        return QPixmap();
++    }
++
++    QPixmap pixmapa(src);
++    QPixmap pixmap(nWidth, nHeight);
++    pixmap.fill(Qt::transparent);
++    QPainter painter(&pixmap);
++    painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
++    painter.drawPixmap(0, 0, nWidth, nHeight, pixmapa);
++    return pixmap;
++}
++
++void LoginOptionsWidget::startBioWaiting(unsigned uCurLoginOptType)
++{
++    if (uCurLoginOptType == m_nCurBioWaitingType
++        || (uCurLoginOptType != LOGINOPT_TYPE_FINGERPRINT && uCurLoginOptType != LOGINOPT_TYPE_FINGERVEIN
++            && uCurLoginOptType != LOGINOPT_TYPE_IRIS && uCurLoginOptType != LOGINOPT_TYPE_VOICEPRINT)) {
++        return;
++    }
++    m_nCurBioWaitingType = uCurLoginOptType;
++    if (!m_timerBioWaiting) {
++        m_timerBioWaiting = new QTimer(this);
++        m_timerBioWaiting->setInterval(100);
++    }
++    if (m_timerBioWaiting) {
++        if (m_timerBioWaiting->isActive()) {
++            m_timerBioWaiting->stop();
++        }
++        // 重新连接信号槽
++        disconnect(m_timerBioWaiting, nullptr, this, nullptr);
++        connect(m_timerBioWaiting, &QTimer::timeout, this, [&, this, uCurLoginOptType]() {
++            m_nBioWaitingFrame += 1;
++            QString strPicName = "";
++            switch (uCurLoginOptType) {
++                case LOGINOPT_TYPE_FINGERPRINT: {
++                    if (m_nBioWaitingFrame >= 15) {
++                        m_nBioWaitingFrame = 0;
++                    }
++                    strPicName = QString(":/image/assets/biowaiting/fingerprint%1.svg").arg(m_nBioWaitingFrame);
++                } break;
++                case LOGINOPT_TYPE_FINGERVEIN: {
++                    if (m_nBioWaitingFrame >= 12) {
++                        m_nBioWaitingFrame = 0;
++                    }
++                    strPicName = QString(":/image/assets/biowaiting/fingervein%1.svg").arg(m_nBioWaitingFrame);
++                } break;
++                case LOGINOPT_TYPE_IRIS: {
++                    if (m_nBioWaitingFrame >= 12) {
++                        m_nBioWaitingFrame = 0;
++                    }
++                    strPicName = QString(":/image/assets/biowaiting/iris%1.svg").arg(m_nBioWaitingFrame);
++                } break;
++                case LOGINOPT_TYPE_VOICEPRINT: {
++                    if (m_nBioWaitingFrame >= 8) {
++                        m_nBioWaitingFrame = 0;
++                    }
++                    strPicName = QString(":/image/assets/biowaiting/voiceprint%1.svg").arg(m_nBioWaitingFrame);
++                } break;
++                default:
++                    break;
++            }
++            if (!strPicName.isEmpty()) {
++                QPixmap pixmap;
++                if (QPixmapCache::find(strPicName, &pixmap)) {
++                    m_labelBioWaiting->setPixmap(pixmap);
++                } else {
++                    pixmap = scaledSmoothPixmap(QPixmap(strPicName), 154, 154);
++                    if (!pixmap.isNull()) {
++                        QPixmapCache::insert(strPicName, pixmap);
++                        m_labelBioWaiting->setPixmap(pixmap);
++                    }
++                }
++                m_labelBioWaiting->show();
++            }
++        });
++        m_timerBioWaiting->start();
++        m_nBioWaitingFrame = 0;
++        QString strPicName = "";
++        switch (uCurLoginOptType) {
++            case LOGINOPT_TYPE_FINGERPRINT: {
++                strPicName = QString(":/image/assets/biowaiting/fingerprint%1.svg").arg(m_nBioWaitingFrame);
++            } break;
++            case LOGINOPT_TYPE_FINGERVEIN: {
++                strPicName = QString(":/image/assets/biowaiting/fingervein%1.svg").arg(m_nBioWaitingFrame);
++            } break;
++            case LOGINOPT_TYPE_IRIS: {
++                strPicName = QString(":/image/assets/biowaiting/iris%1.svg").arg(m_nBioWaitingFrame);
++            } break;
++            case LOGINOPT_TYPE_VOICEPRINT: {
++                strPicName = QString(":/image/assets/biowaiting/voiceprint%1.svg").arg(m_nBioWaitingFrame);
++            } break;
++            default:
++                break;
++        }
++        if (!strPicName.isEmpty()) {
++            QPixmap pixmap;
++            if (QPixmapCache::find(strPicName, &pixmap)) {
++                m_labelBioWaiting->setPixmap(pixmap);
++            } else {
++                pixmap = scaledSmoothPixmap(QPixmap(strPicName), 154, 154);
++                if (!pixmap.isNull()) {
++                    QPixmapCache::insert(strPicName, pixmap);
++                    m_labelBioWaiting->setPixmap(pixmap);
++                }
++            }
++            m_labelBioWaiting->show();
++        }
++    }
++}
++
++void LoginOptionsWidget::stopBioWaiting(bool isDisable /* = false*/)
++{
++    if (m_timerBioWaiting) {
++        if (m_timerBioWaiting->isActive()) {
++            m_timerBioWaiting->stop();
++        }
++    }
++    m_nBioWaitingFrame = 0;
++    if (isDisable) {
++        QString strPicName = "";
++        switch (m_nCurBioWaitingType) {
++            case LOGINOPT_TYPE_FINGERPRINT: {
++                strPicName = QString(":/image/assets/biowaiting/fingerprint%1.svg").arg(m_nBioWaitingFrame);
++            } break;
++            case LOGINOPT_TYPE_FINGERVEIN: {
++                strPicName = QString(":/image/assets/biowaiting/fingervein%1.svg").arg(m_nBioWaitingFrame);
++            } break;
++            case LOGINOPT_TYPE_IRIS: {
++                strPicName = QString(":/image/assets/biowaiting/iris%1.svg").arg(m_nBioWaitingFrame);
++            } break;
++            case LOGINOPT_TYPE_VOICEPRINT: {
++                strPicName = QString(":/image/assets/biowaiting/voiceprint%1.svg").arg(m_nBioWaitingFrame);
++            } break;
++            default:
++                break;
++        }
++        if (!strPicName.isEmpty()) {
++            QPixmap pixmap;
++            if (QPixmapCache::find(strPicName, &pixmap)) {
++                m_labelBioWaiting->setPixmap(pixmap);
++            } else {
++                pixmap = scaledSmoothPixmap(QPixmap(strPicName), 154, 154);
++                if (!pixmap.isNull()) {
++                    QPixmapCache::insert(strPicName, pixmap);
++                    m_labelBioWaiting->setPixmap(pixmap);
++                }
++            }
++        }
++    } else {
++        m_labelBioWaiting->hide();
++    }
++    m_nCurBioWaitingType = -1;
++}
+diff --git a/pam-biometric/data/org.freedesktop.plicykit.pkexec.bioctl-helper.policy.in b/pam-biometric/data/org.freedesktop.plicykit.pkexec.bioctl-helper.policy.in
+index e5601cc..415e7cc 100644
+--- a/pam-biometric/data/org.freedesktop.plicykit.pkexec.bioctl-helper.policy.in
++++ b/pam-biometric/data/org.freedesktop.plicykit.pkexec.bioctl-helper.policy.in
+@@ -10,13 +10,17 @@
+ 		<description xml:lang="bo">འཁོར་སྐྱོད་སྐྱེ་དངོས་ཀྱི་ངོས་འཛིན་ཁས་ལེན་ཚོད་འཛིན་ཡོ་བྱད།།</description>
+ 		<description xml:lang="mn">ᠠᠵᠢᠯᠯᠠᠭᠠᠨ ᠤ ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ ᠢ ᠢᠯᠭᠠᠨ ᠲᠠᠨᠢᠵᠤ ᠭᠡᠷᠡᠴᠢᠯᠡᠬᠦ ᠡᠵᠡᠮᠳᠡᠯ ᠦᠨ ᠪᠠᠭᠠᠵᠢ ᠶᠢ ᠢᠯᠭᠠᠨ ᠲᠠᠨᠢᠬᠤ ᠬᠡᠷᠡᠭᠲᠡᠶ ᠃</description>
+ 		<description xml:lang="zh_HK">運行生物識別認證控制工具</description>
+-		<description xml:lang="uy">بىئولوگىيەلىك پەرقلەندۈرۈش ئىسپاتلاش كونترول قىلىش قورالى</description>
++		<description xml:lang="ug">بىئولوگىيەلىك پەرقلەندۈرۈش ئىسپاتلاش كونترول قىلىش قورالى</description>
++		<description xml:lang="kk">بىئولوگىيەلىك پارىقتاندىرۋ سپاتتاۋ مەڭگەرۋ ەتۋ قۇرالى</description>
++		<description xml:lang="ky">بىئولوگىيەلىك ايىرمالاندىرىش  ىسپاتتوو تىزگىندۅۅ  جاسوو ،اتقارۇۇ  قۇرالى</description>
+ 		<message>Authentication is required to enable or disable biometric authentication</message>
+ 		<message xml:lang="zh_CN">开启或关闭生物识别认证需要进行身份验证</message>
+ 		<message xml:lang="bo">སྒོ་རྒྱག་པའམ་ཡང་ན་སྒོ་རྒྱག་པའི་སྐྱེ་དངོས་ངོས་འཛིན་བདེན་དཔངར་སྤྲོད་བྱེད་པར་ཐོབ་ཐང་གི་ཚོད་ལྟསར་སྤྲོད་བྱ་དགོས།</message>
+ 		<message xml:lang="mn">ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ ᠢ ᠢᠯᠭᠠᠨ ᠲᠠᠨᠢᠬᠤ ᠭᠡᠷᠡᠴᠢᠯᠡᠭᠡ ᠶᠢ ᠨᠡᠭᠡᠭᠡᠬᠦ ᠪᠤᠶᠤ ᠬᠠᠭᠠᠬᠤ ᠳᠤ ᠪᠡᠶ᠎ᠡ ᠶᠢᠨ ᠭᠠᠷᠤᠯ ᠤᠨ ᠭᠡᠷᠡᠴᠢᠯᠡᠯ ᠬᠢᠬᠦ ᠴᠢᠬᠤᠯᠠ ᠲᠠᠶ ᠪᠠᠶᠢᠨ᠎ᠠ᠃</message>
+ 		<message xml:lang="zh_HK">開啟或關閉生物識別認證需要進行身份驗證</message>
+-		<message xml:lang="uy">بىئولوگىيەلىك پەرقلەندۈرۈش ئىسپاتىنى ئېچىش ياكى تاقاش ئۈچۈن دەلىللەش كېرەك</message>
++		<message xml:lang="ug">بىئولوگىيەلىك پەرقلەندۈرۈش ئىسپاتىنى ئېچىش ياكى تاقاش ئۈچۈن دەلىللەش كېرەك</message>
++		<message xml:lang="kk">بىئولوگىيەلىك پارىقتاندىرۋ سىپاتىن ٸشٸۋ ياكي تاقاۋ ٷشٸن دالەلدەۋ كەرەك</message>
++		<message xml:lang="ky">بىئولوگىيەلىك ايىرمالاندىرىش  دالىلىن اچۇۇ كۅرۉنۉشتۅرۉ بەكىتىش  ۉچۉن  دالىلدۅ كەرەك</message>
+ 		<icon_name>stock_person</icon_name>
+ 		<defaults>
+ 			<allow_any>no</allow_any>
+diff --git a/pam-biometric/data/org.freedesktop.plicykit.pkexec.biodrvctl.policy.in b/pam-biometric/data/org.freedesktop.plicykit.pkexec.biodrvctl.policy.in
+index 3efa12e..476cb88 100644
+--- a/pam-biometric/data/org.freedesktop.plicykit.pkexec.biodrvctl.policy.in
++++ b/pam-biometric/data/org.freedesktop.plicykit.pkexec.biodrvctl.policy.in
+@@ -10,13 +10,17 @@
+ 		<description xml:lang="bo">སྐྱ་དངོས་དབྱེ་འབྱེད་སྒྲག་ཆས་ཀྱི་ཁ་ལོ་བའི་ཚོད་འཛིན་ཡོ་བྱད་</description>
+ 		<description xml:lang="mn">ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ ᠢ ᠢᠯᠭᠠᠨ ᠲᠠᠨᠢᠬᠤ ᠲᠥᠬᠥᠭᠡᠷᠦᠮᠵᠢ ᠪᠡᠷ ᠬᠥᠳᠡᠯᠭᠡᠭᠦᠷ ᠪᠣᠯᠭᠠᠬᠤ ᠡᠵᠡᠮᠳᠡᠯ ᠦᠨ ᠪᠠᠭᠠᠵᠢ ᠶᠢ ᠠᠵᠢᠯᠯᠠᠭᠤᠯᠤᠨ᠎ᠠ ᠃</description>
+ 		<description xml:lang="zh_HK">運行生物識別設備驅動控制工具</description>
+-		<description xml:lang="uy">بىئولوگىيەلىك پەرقلەندۈرۈش ئۈسكۈنىسىنى قوزغىتىش كونترول قىلىش ئەسۋابىنى يۈرگۈزۈش</description>
++		<description xml:lang="ug">بىئولوگىيەلىك پەرقلەندۈرۈش ئۈسكۈنىسىنى قوزغىتىش كونترول قىلىش ئەسۋابىنى يۈرگۈزۈش</description>
++		<description xml:lang="kk">شايمانىن جۉرگۅزۉ</description>
++		<description xml:lang="ky">شايمانىن جۉرگۅزۉ</description>
+                 <message>Authentication is required to change the status of biometric device's driver</message>
+                 <message xml:lang="zh_CN">改变生物识别设备驱动状态需要进行身份验证</message>
+ 		<message xml:lang="bo">སྐྱ་དངོས་དབྱེ་འབྱེད་སྒྲག་ཆས་ཀྱི་ཁ་ལོ་བའི་གནས་ཚུལ་ལ་འགྱུར་ལྡོག་གཏོང་བར་བདེན་དཔང་ར་སྤྲད་བྱ་དགོས།</message>
+ 		<message xml:lang="mn">ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ ᠢ ᠢᠯᠭᠠᠨ ᠲᠠᠨᠢᠬᠤ ᠲᠥᠬᠥᠭᠡᠷᠦᠮᠵᠢ ᠶᠢᠨ ᠬᠥᠳᠡᠯᠭᠡᠭᠦᠷ ᠪᠣᠯᠭᠠᠬᠤ ᠪᠠᠶᠢᠳᠠᠯ ᠢ ᠬᠤᠪᠢᠷᠠᠭᠤᠯᠬᠤ ᠳᠤ ᠪᠡᠶ᠎ᠡ ᠶᠢᠨ ᠭᠠᠷᠤᠯ ᠤᠨ ᠭᠡᠷᠡᠴᠢᠯᠡᠯ ᠬᠢᠬᠦ ᠴᠢᠬᠤᠯᠠ ᠲᠠᠶ ᠪᠠᠶᠢᠬᠤ ᠬᠡᠷᠡᠭᠲᠡᠶ᠃</message>
+ 		<message xml:lang="zh_HK">改變生物識別設備驅動狀態需要進行身份驗證</message>
+-		<message xml:lang="uy">بىئولوگىيەلىك پەرقلەندۈرۈش ئۈسكۈنىسىنىڭ قوزغىتىش ھالىتىنى ئۆزگەرتىشتە دەلىللەش كېرەك</message>
++		<message xml:lang="ug">بىئولوگىيەلىك پەرقلەندۈرۈش ئۈسكۈنىسىنىڭ قوزغىتىش ھالىتىنى ئۆزگەرتىشتە دەلىللەش كېرەك</message>
++		<message xml:lang="kk">بىئولوگىيەلىك پارىقتاندىرۋ اسپابىنىڭ قوزعالتۋ كۇيىن وزگەتۋگە دالەلدەۋ كەرەك</message>
++                <message xml:lang="ky">بىئولوگىيەلىك ايىرمالاندىرىش  شايمانىنىن قوزعوتۇۇ  ابالىن ۅزگۅرتۉۉدۅ دالىلدۅ كەرەك</message>
+ 		<icon_name>stock_person</icon_name>
+ 		<defaults>
+ 			<allow_any>auth_admin</allow_any>
+diff --git a/pam-biometric/data/org.freedesktop.plicykit.pkexec.biorestart.policy.in b/pam-biometric/data/org.freedesktop.plicykit.pkexec.biorestart.policy.in
+index f77a55f..a5f82f3 100644
+--- a/pam-biometric/data/org.freedesktop.plicykit.pkexec.biorestart.policy.in
++++ b/pam-biometric/data/org.freedesktop.plicykit.pkexec.biorestart.policy.in
+@@ -11,12 +11,16 @@
+ 		<description xml:lang="mn">ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ ᠤᠨ ᠣᠨᠴᠠᠯᠢᠭ ᠤᠨ ᠦᠢᠯᠡᠴᠢᠯᠡᠭᠡ ᠶᠢ ᠳᠠᠬᠢᠨ ᠡᠭᠢᠯᠡᠭᠦᠯᠪᠡ᠃</description>
+                 <message>Authentication is required to restart biometric service</message>
+ 		<description xml:lang="zh_HK">重啟生物特徵服務</description>
+-		<description xml:lang="uy">بىئولوگىيەلىك ئالاھىدىلىك مۇلازىمىتىنى قايتىدىن قوزغىتىش</description>
++		<description xml:lang="ug">بىئولوگىيەلىك ئالاھىدىلىك مۇلازىمىتىنى قايتىدىن قوزغىتىش</description>
++		<description xml:lang="kk">بىئولوگىيەلىك ەرەكشەلىك قىزىمەتتى قايتادان قوزعالتۋ</description>
++		<description xml:lang="ky">بىئولوگىيەلىك ۅزگۅچۅلۉك مۇلازىمەتىردى قايتادان  قوزعوتۇۇ</description>
+                 <message xml:lang="zh_CN">重启生物特征服务需要身份验证</message>
+ 		<message xml:lang="bo">སྐྱ་དངོས་དབྱེ་འབྱེད་ཞབས་ཞུ་སླར་གསོ་བྱེད་པར་བདེན་དཔང་ར་སྤྲད་བྱ་དགོས།</message>
+ 		<message xml:lang="mn">ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ ᠤᠨ ᠣᠨᠴᠠᠯᠢᠭ ᠰᠢᠨᠵᠢ ᠲᠡᠮᠳᠡᠭ ᠦᠨ ᠦᠢᠯᠡᠴᠢᠯᠡᠭᠡ ᠶᠢ ᠳᠠᠬᠢᠨ ᠰᠡᠩᠬᠡᠷᠡᠭᠦᠯᠬᠦ ᠳᠦ ᠪᠡᠶ᠎ᠡ ᠶᠢᠨ ᠭᠠᠷᠤᠯ ᠢ ᠰᠢᠯᠭᠠᠨ ᠭᠡᠷᠡᠴᠢᠯᠡᠬᠦ ᠴᠢᠬᠤᠯᠠ ᠲᠠᠶ ᠪᠠᠶᠢᠨ᠎ᠠ ᠃</message>
+-        	<message xml:lang="uy">بىئولوگىيەلىك ئالاھىدىلىك مۇلازىمىتىنى قايتىدىن قوزغىتىش ئۈچۈن دەلىللەش كېرەك </message>
++        	<message xml:lang="ug">بىئولوگىيەلىك ئالاھىدىلىك مۇلازىمىتىنى قايتىدىن قوزغىتىش ئۈچۈن دەلىللەش كېرەك </message>
+         	<message xml:lang="zh_HK">重啟生物特徵服務需要身份驗證</message>
++                <message xml:lang="kk">بىئولوگىيەلىك ەرەكشەلىك قىزىمەتتى قايتادان قوزعالتۋ ٷشٸن دالەلدەۋ كەرەك بىئولوگىيەلىك پارىقتاندىرۋ اسبابٸن قوزعالتۋ مەڭگەرۋ ەتۋ اسپاپتى جۇرگىزۋ</message>
++                <message xml:lang="ky">بىئولوگىيەلىك ۅزگۅچۅلۉك مۇلازىمەتىردى قايتادان  قوزعوتۇۇ ۉچۉن  دالىلدۅ كەرەك بىئولوگىيەلىك ايىرمالاندىرىش  جابدۇۇسۇن قوزعوتۇۇ تىزگىندۅۅ  جاسوو ،اتقارۇۇ</message>
+ 		<icon_name>stock_person</icon_name>
+ 		<defaults>
+ 			<allow_any>auth_admin</allow_any>
+diff --git a/polkit-agent/CMakeLists.txt b/polkit-agent/CMakeLists.txt
+index cb8e3e9..2f97cad 100644
+--- a/polkit-agent/CMakeLists.txt
++++ b/polkit-agent/CMakeLists.txt
+@@ -3,7 +3,8 @@ project(ukui-polkit-agent)
+ 
+ pkg_check_modules(QGS REQUIRED gsettings-qt)
+ pkg_check_modules(KDKINFO REQUIRED kysdk-sysinfo)
+-pkg_check_modules(KYSDKWAYLANDHELPER_PKG REQUIRED kysdk-waylandhelper)
++pkg_check_modules(KDKWIDGETS REQUIRED kysdk-qtwidgets)
++pkg_check_modules(KYSDKWAYLANDHELPER REQUIRED kysdk-waylandhelper)
+ 
+ find_package(PolkitQt5-1 REQUIRED 0.103.0)
+ find_package(Qt5 COMPONENTS Core Widgets DBus X11Extras Xml Network Svg)
+@@ -23,16 +24,22 @@ configure_file(
+ include_directories(
+         ${QGS_INCLUDE_DIRS}
+         ${KDKINFO_INCLUDE_DIRS}
++        ${KDKWIDGETS_INCLUDE_DIRS}
++        ${KYSDKWAYLANDHELPER_INCLUDE_DIRS}
+         )
+ 
+ link_directories(
+     ${KDKINFO_LIBRARY_DIRS}
++    ${KDKWIDGETS_LIBRARY_DIRS}
++    ${KYSDKWAYLANDHELPER_LIBRARY_DIRS}
+     )
+ 
+ set(EXTRA_LIBS
+         ${EXTRA_LIBS}
+         ${QGS_LIBRARIES}
+         ${KDKINFO_LIBRARIES}
++        ${KDKWIDGETS_LIBRARIES}
++        ${KYSDKWAYLANDHELPER_LIBRARIES}
+         )
+ 
+ include_directories(
+@@ -58,17 +65,20 @@ set(polkit_SRCS
+     src/modeButton.cpp
+     src/kalabel.cpp
+     ../common/generic.cpp
++    src/fullscreenbackground.h
++    src/fullscreenbackground.cpp
++    src/usdblockshortcut.h
++    src/usdblockshortcut.cpp
+     )
+ 
+ add_executable(polkit-ukui-authentication-agent-1 ${polkit_SRCS})
+-target_include_directories(polkit-ukui-authentication-agent-1 PRIVATE ${KYSDKWAYLANDHELPER_PKG_INCLUDE_DIRS})
+-target_link_directories(polkit-ukui-authentication-agent-1 PRIVATE ${KYSDKWAYLANDHELPER_PKG_LIBRARY_DIRS})
++target_include_directories(polkit-ukui-authentication-agent-1 PRIVATE ${KYSDKQTWIDGETS_PKG_INCLUDE_DIRS})
++target_link_directories(polkit-ukui-authentication-agent-1 PRIVATE ${KYSDKQTWIDGETS_PKG_LIBRARY_DIRS})
+ target_link_libraries(polkit-ukui-authentication-agent-1
+-    Qt5::Core Qt5::Widgets Qt5::DBus ${EXTRA_LIBS}
++    Qt5::Core Qt5::Widgets Qt5::DBus ${EXTRA_LIBS} KF5::WindowSystem
+     ${POLKITQT-1_LIBRARIES}
+-    ${KYSDKWAYLANDHELPER_PKG_LIBRARIES}
++    ${KYSDKQTWIDGETS_PKG_LIBRARIES}
+     BioAuthWidgets
+-    KF5::WindowSystem
+     -lrt
+     -lukui-log4qt
+     )
+diff --git a/polkit-agent/assets.qrc b/polkit-agent/assets.qrc
+index 6fc96aa..2581d94 100644
+--- a/polkit-agent/assets.qrc
++++ b/polkit-agent/assets.qrc
+@@ -4,6 +4,53 @@
+         <file>assets/arrow_right.svg</file>
+         <file>assets/hide-password.png</file>
+         <file>assets/show-password.png</file>
++        <file>assets/biowaiting/fingerprint0.svg</file>
++        <file>assets/biowaiting/fingerprint1.svg</file>
++        <file>assets/biowaiting/fingerprint2.svg</file>
++        <file>assets/biowaiting/fingerprint3.svg</file>
++        <file>assets/biowaiting/fingerprint4.svg</file>
++        <file>assets/biowaiting/fingerprint5.svg</file>
++        <file>assets/biowaiting/fingerprint6.svg</file>
++        <file>assets/biowaiting/fingerprint7.svg</file>
++        <file>assets/biowaiting/fingerprint8.svg</file>
++        <file>assets/biowaiting/fingerprint9.svg</file>
++        <file>assets/biowaiting/fingerprint10.svg</file>
++        <file>assets/biowaiting/fingerprint11.svg</file>
++        <file>assets/biowaiting/fingerprint12.svg</file>
++        <file>assets/biowaiting/fingerprint13.svg</file>
++        <file>assets/biowaiting/fingerprint14.svg</file>
++        <file>assets/biowaiting/fingervein0.svg</file>
++        <file>assets/biowaiting/fingervein1.svg</file>
++        <file>assets/biowaiting/fingervein2.svg</file>
++        <file>assets/biowaiting/fingervein3.svg</file>
++        <file>assets/biowaiting/fingervein4.svg</file>
++        <file>assets/biowaiting/fingervein5.svg</file>
++        <file>assets/biowaiting/fingervein6.svg</file>
++        <file>assets/biowaiting/fingervein7.svg</file>
++        <file>assets/biowaiting/fingervein8.svg</file>
++        <file>assets/biowaiting/fingervein9.svg</file>
++        <file>assets/biowaiting/fingervein10.svg</file>
++        <file>assets/biowaiting/fingervein11.svg</file>
++        <file>assets/biowaiting/iris0.svg</file>
++        <file>assets/biowaiting/iris1.svg</file>
++        <file>assets/biowaiting/iris2.svg</file>
++        <file>assets/biowaiting/iris3.svg</file>
++        <file>assets/biowaiting/iris4.svg</file>
++        <file>assets/biowaiting/iris5.svg</file>
++        <file>assets/biowaiting/iris6.svg</file>
++        <file>assets/biowaiting/iris7.svg</file>
++        <file>assets/biowaiting/iris8.svg</file>
++        <file>assets/biowaiting/iris9.svg</file>
++        <file>assets/biowaiting/iris10.svg</file>
++        <file>assets/biowaiting/iris11.svg</file>
++        <file>assets/biowaiting/voiceprint0.svg</file>
++        <file>assets/biowaiting/voiceprint1.svg</file>
++        <file>assets/biowaiting/voiceprint2.svg</file>
++        <file>assets/biowaiting/voiceprint3.svg</file>
++        <file>assets/biowaiting/voiceprint4.svg</file>
++        <file>assets/biowaiting/voiceprint5.svg</file>
++        <file>assets/biowaiting/voiceprint6.svg</file>
++        <file>assets/biowaiting/voiceprint7.svg</file>
+     </qresource>
+     <qresource prefix="/qss">
+         <file>src/main.qss</file>
+diff --git a/polkit-agent/assets/biowaiting/fingerprint0.svg b/polkit-agent/assets/biowaiting/fingerprint0.svg
+new file mode 100644
+index 0000000..a5e84bd
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/fingerprint0.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}</style></defs><g id="文字标注"><g class="cls-1"><path d="M76.78191,140.809a3.00926,3.00926,0,0,0-4.06694,1.87157l-4.22311,10.29593a2.95177,2.95177,0,0,0,2.34693,4.2097c1.87618,0,2.81427-.62348,3.44061-2.02792q2.35321-4.96514,4.2252-10.13749a3.22339,3.22339,0,0,0-1.72269-4.21179Zm71.02958-38.52241a3.08449,3.08449,0,0,0-3.44119-2.96447,3.01947,3.01947,0,0,0-2.81653,3.276c.15559,5.14854-.15616,10.13768-.31232,15.286,0,2.33947,1.09425,3.58775,2.971,3.74391,1.87844,0,3.28728-1.24829,3.28728-3.58851,0-3.43141.46791-7.01916.31175-10.29517a31.74592,31.74592,0,0,0,0-5.46008ZM42.99058,121.93748a3.19813,3.19813,0,0,0-3.91137,2.18407c-.3125.7804-.4679,1.71618-.7825,2.49562a101.97516,101.97516,0,0,1-5.00713,12.01c-1.09424,2.34022.1554,4.67969,2.66077,4.67969,1.40828.15616,2.34636-.77963,2.97271-2.02772a81.29759,81.29759,0,0,0,6.09985-15.4437,3.0299,3.0299,0,0,0-2.03233-3.898Zm51.78525-7.17321a3.13259,3.13259,0,0,0-3.44346,2.80735,161.02757,161.02757,0,0,1-4.84945,22.9279c-1.25193,4.36718-2.81636,8.73532-4.38079,13.10328a2.97748,2.97748,0,0,0,1.25192,3.898,3.04925,3.04925,0,0,0,3.75521-.3125,5.627,5.627,0,0,0,1.25041-2.33946,128.60479,128.60479,0,0,0,4.85173-14.97123,161.52838,161.52838,0,0,0,4.37926-21.68171,3.2645,3.2645,0,0,0-2.81483-3.43159ZM11.07466,60.17791a3.31205,3.31205,0,0,0-2.19078-4.36738c-1.72059-.46865-3.285.62329-3.91137,2.49561A79.568,79.568,0,0,0,2,80.45155a66.61318,66.61318,0,0,0,.31174,7.6432A76.2778,76.2778,0,0,0,5.91136,104.626,2.67954,2.67954,0,0,0,8.57,106.6545c2.661.15558,3.91289-1.87233,3.13095-4.68045a70.50526,70.50526,0,0,1-.62633-41.79842ZM85.701,104.15584a75.8642,75.8642,0,0,0-.4679-9.98362,114.4834,114.4834,0,0,0-2.19078-14.6595,3.09174,3.09174,0,0,0-3.59962-2.49581,3.03668,3.03668,0,0,0-2.34617,3.90025,116.66849,116.66849,0,0,1,2.34617,18.24725,106.72189,106.72189,0,0,1-2.97252,31.50478c-.46789,2.02773.31174,3.74391,2.03443,4.2118,1.87694.4679,3.44137-.62405,4.06772-2.80812a109.18033,109.18033,0,0,0,3.12867-27.917Zm32.854-36.96258a3.10567,3.10567,0,0,0-3.91136-2.02773,2.97022,2.97022,0,0,0-2.03235,3.90006c2.50253,9.35957,3.44041,19.02707,4.067,28.85281a155.42236,155.42236,0,0,1-5.0079,47.25852c-.46789,2.02792.31232,3.90025,2.03519,4.2118a3.12981,3.12981,0,0,0,4.067-2.65178,158.74287,158.74287,0,0,0,5.31944-41.48688,159.06625,159.06625,0,0,0-2.03234-26.98258,60.29831,60.29831,0,0,0-2.5046-11.07422ZM15.61237,48.32272A67.883,67.883,0,0,1,27.18744,31.633C41.11155,16.81945,58.16452,9.0199,78.66305,8.39586c2.34712,0,3.75521-1.24828,3.75521-3.276C82.416,3.09194,81.00789,2,78.5046,2A77.9438,77.9438,0,0,0,10.13447,45.04442a5.77164,5.77164,0,0,0-.62406,2.18407,2.72436,2.72436,0,0,0,1.56425,2.80736c1.72077.93654,3.59676.31231,4.53771-1.71543ZM58.79086,85.753c-1.25059-7.48553-.31175-14.19161,4.85155-20.11959a2.805,2.805,0,0,0,.62425-1.40368c.15616-1.55983-.15635-2.80812-1.7206-3.43216a2.98066,2.98066,0,0,0-3.91136.93635c-5.63137,6.55146-7.66581,14.19542-6.41388,22.77308a143.77173,143.77173,0,0,1,1.87675,19.65112,84.88938,84.88938,0,0,1-1.87675,19.18379,87.66557,87.66557,0,0,1-7.822,21.36711,4.07667,4.07667,0,0,0-.7827,2.652,2.99418,2.99418,0,0,0,2.34693,2.652c1.72079.31173,2.815-.31251,3.75521-1.87234a90.13491,90.13491,0,0,0,9.69891-29.79089A108.40093,108.40093,0,0,0,58.79315,85.753ZM22.338,94.48834c-1.09423-7.01916-2.03233-13.88368-1.09423-21.05461A59.14015,59.14015,0,0,1,46.11944,31.47686a3.29673,3.29673,0,0,0,1.56444-3.90024c-.78269-2.18389-2.97348-2.65176-5.16425-1.24735A60.84871,60.84871,0,0,0,29.37822,38.49678a64.523,64.523,0,0,0-14.7068,39.7707c-.31174,7.6434,1.72287,15.12892,2.19077,22.61463.31251,4.99219.46791,9.98419-1.09424,14.97429-.4679,1.55983-.93809,3.27525-1.40827,4.52334a3.12377,3.12377,0,0,0,3.12886,3.43008c1.87693,0,2.65868-1.09195,3.285-2.652,3.285-8.57766,2.81711-17.6232,1.56442-26.66951ZM157.0425,67.03786Q147.65477,20.2483,102.12991,5.276A45.00768,45.00768,0,0,0,91.80237,3.09194c-1.87828-.15615-3.12867.78039-3.28426,2.4958a2.87607,2.87607,0,0,0,2.50252,3.58833c.62406.15558,1.2504.15558,1.72059.31175A70.72962,70.72962,0,0,1,133.1047,31.94476a69.18254,69.18254,0,0,1,13.9241,22.61539,74.061,74.061,0,0,1,4.69407,23.23944c.15538,2.33946,1.87825,3.7439,4.06674,3.11986,1.56444-.4679,2.34713-1.71618,2.19077-4.212a41.34713,41.34713,0,0,0-.93788-9.6696ZM115.74016,40.83473a46.09788,46.09788,0,0,0-10.16908-7.17379,3.002,3.002,0,0,0-4.22521,1.09194c-.93885,1.55983-.46866,3.276,1.25193,4.368a3.91752,3.91752,0,0,0,1.09424.62422c10.4837,6.3936,17.83548,15.283,21.27894,27.13666,3.12887,11.38806,3.9108,23.08329,4.22309,34.7806a167.16816,167.16816,0,0,1-2.34692,33.06462c-.31174,2.34023.624,3.7439,2.50251,4.0564,2.03521.31175,3.44347-.78039,3.755-3.11985a162.60561,162.60561,0,0,0,2.34712-27.91913,217.74083,217.74083,0,0,0-2.65869-34.62312c-2.03461-12.79173-7.51041-23.55117-17.053-32.2865ZM89.76794,53.62646a28.15742,28.15742,0,0,0-18.92915-.15615c-2.66077.78037-3.44346,3.58546-1.72059,5.30163,1.24984,1.24809,2.50253,1.09195,3.91061.62406a21.7273,21.7273,0,0,1,28.47246,16.8428,163.57907,163.57907,0,0,1,2.34693,17.31375A137.996,137.996,0,0,1,103.692,118.974a149.65135,149.65135,0,0,1-7.04022,31.97477c-.1554.62405-.4679,1.092-.31155,1.71618a3.009,3.009,0,0,0,2.81483,2.65177,3.073,3.073,0,0,0,3.4427-2.34022,143.91448,143.91448,0,0,0,8.13447-46.946,167.06448,167.06448,0,0,0-2.65867-29.6353c-2.03462-11.07347-7.97831-18.87149-18.30566-22.77079ZM46.431,72.65334C50.03005,55.02805,68.64821,42.7065,86.48292,46.294a35.29014,35.29014,0,0,1,20.18241,11.85368,8.8989,8.8989,0,0,0,1.72,1.71617,3.19219,3.19219,0,0,0,3.755-.93579c1.09424-1.40444.93885-2.80812-.31155-4.5243-7.19867-8.733-16.42891-13.87928-27.84841-14.81508-14.55046-1.2481-26.59781,3.90025-35.82653,15.283A38.57467,38.57467,0,0,0,39.861,85.4407c.7804,5.30373,1.72077,10.45208,1.72077,15.75372,0,3.74391,0,7.488-.31174,11.07347a3.00588,3.00588,0,0,0,2.81408,3.276,3.03818,3.03818,0,0,0,3.44346-2.652,100.85173,100.85173,0,0,0-.15616-20.58748c-.47018-4.21179-1.87827-8.26743-1.56443-12.16769a39.31,39.31,0,0,1,.62406-7.48342Zm97.78146,20.43132a3.18855,3.18855,0,0,0,2.97269-3.43217V88.56056c-.62425-5.92722-1.2506-11.8531-2.19077-17.77879-2.03235-13.10195-7.19563-24.64312-16.1126-34.31273C115.89557,21.96341,99.46894,14.78945,79.91136,14.63329a64.57052,64.57052,0,0,0-25.3436,5.14835,3.233,3.233,0,0,0-2.03462,4.20951,3.15932,3.15932,0,0,0,4.38154,1.56A60.10933,60.10933,0,0,1,85.54483,21.183a57.79887,57.79887,0,0,1,35.04479,15.91007c10.32431,9.82517,16.268,21.835,18.30566,36.02812q1.16919,8.42465,1.876,16.84377c.46789,1.87157,1.72058,3.11966,3.44119,3.11966ZM71.15054,82.94489a11.40154,11.40154,0,0,1,0-5.614,9.11075,9.11075,0,0,1,9.70119-6.55146c4.22292.15558,7.66638,3.2762,8.60218,7.9559a150.63857,150.63857,0,0,1,2.661,26.51468,3.1253,3.1253,0,0,0,3.12887,3.43236c1.879,0,2.97252-1.40367,3.12867-3.276V102.5981h.15635c-.3125-4.05545-.4679-8.11185-.93581-12.16521-.47018-4.05565-1.09653-8.11206-1.72287-12.16541a15.95817,15.95817,0,0,0-17.67931-13.726c-8.13448.93654-14.7068,9.04763-13.45393,17.002.62406,4.83584,1.40809,9.6696,1.876,14.50563a100.76525,100.76525,0,0,1-4.69311,39.77A111.03411,111.03411,0,0,1,55.976,149.85661a3.05946,3.05946,0,0,0,.15616,3.43236,2.84779,2.84779,0,0,0,2.97251,1.24752,3.58665,3.58665,0,0,0,2.815-2.33946C72.715,130.2034,75.21748,107.1224,71.15054,82.94717ZM34.38592,91.52482c-.7825-5.30393-1.565-10.76381-1.09634-16.06545A45.82532,45.82532,0,0,1,49.87465,44.26631a45.38948,45.38948,0,0,1,28.16-10.76171,44.31355,44.31355,0,0,1,12.82985,1.24828,3.86115,3.86115,0,0,0,1.87676.15616,2.85951,2.85951,0,0,0,2.50252-2.80814,3.03932,3.03932,0,0,0-2.34694-3.276,45.9556,45.9556,0,0,0-13.14161-1.55984,34.7057,34.7057,0,0,0-9.6989.93577c-15.801,2.96429-27.84821,11.54421-36.14113,25.42352a50.63513,50.63513,0,0,0-6.56928,32.59653C27.81379,90.589,28.754,94.80084,29.06571,99.169c.62406,10.75944-.78174,21.20867-5.63119,30.87827a3.03324,3.03324,0,0,0-.47019,2.02771,2.85292,2.85292,0,0,0,2.65868,2.652,3.38105,3.38105,0,0,0,3.4427-2.02772c6.57-12.9458,7.51023-26.98125,5.32021-41.17439Zm0,0"/></g></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/fingerprint1.svg b/polkit-agent/assets/biowaiting/fingerprint1.svg
+new file mode 100644
+index 0000000..0856372
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/fingerprint1.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}</style></defs><g id="文字标注"><g class="cls-1"><path d="M76.78191,140.809a3.00926,3.00926,0,0,0-4.06694,1.87157l-4.22311,10.29593a2.95177,2.95177,0,0,0,2.34693,4.2097c1.87618,0,2.81427-.62348,3.44061-2.02792q2.35321-4.96514,4.2252-10.13749a3.22339,3.22339,0,0,0-1.72269-4.21179Zm71.02958-38.52241a3.08449,3.08449,0,0,0-3.44119-2.96447,3.01947,3.01947,0,0,0-2.81653,3.276c.15559,5.14854-.15616,10.13768-.31232,15.286,0,2.33947,1.09425,3.58775,2.971,3.74391,1.87844,0,3.28728-1.24829,3.28728-3.58851,0-3.43141.46791-7.01916.31175-10.29517a31.74592,31.74592,0,0,0,0-5.46008ZM42.99058,121.93748a3.19813,3.19813,0,0,0-3.91137,2.18407c-.3125.7804-.4679,1.71618-.7825,2.49562a101.97516,101.97516,0,0,1-5.00713,12.01c-1.09424,2.34022.1554,4.67969,2.66077,4.67969,1.40828.15616,2.34636-.77963,2.97271-2.02772a81.29759,81.29759,0,0,0,6.09985-15.4437,3.0299,3.0299,0,0,0-2.03233-3.898Zm51.78525-7.17321a3.13259,3.13259,0,0,0-3.44346,2.80735,161.02757,161.02757,0,0,1-4.84945,22.9279c-1.25193,4.36718-2.81636,8.73532-4.38079,13.10328a2.97748,2.97748,0,0,0,1.25192,3.898,3.04925,3.04925,0,0,0,3.75521-.3125,5.627,5.627,0,0,0,1.25041-2.33946,128.60479,128.60479,0,0,0,4.85173-14.97123,161.52838,161.52838,0,0,0,4.37926-21.68171,3.2645,3.2645,0,0,0-2.81483-3.43159ZM11.07466,60.17791a3.31205,3.31205,0,0,0-2.19078-4.36738c-1.72059-.46865-3.285.62329-3.91137,2.49561A79.568,79.568,0,0,0,2,80.45155a66.61318,66.61318,0,0,0,.31174,7.6432A76.2778,76.2778,0,0,0,5.91136,104.626,2.67954,2.67954,0,0,0,8.57,106.6545c2.661.15558,3.91289-1.87233,3.13095-4.68045a70.50526,70.50526,0,0,1-.62633-41.79842ZM85.701,104.15584a75.8642,75.8642,0,0,0-.4679-9.98362,114.4834,114.4834,0,0,0-2.19078-14.6595,3.09174,3.09174,0,0,0-3.59962-2.49581,3.03668,3.03668,0,0,0-2.34617,3.90025,116.66849,116.66849,0,0,1,2.34617,18.24725,106.72189,106.72189,0,0,1-2.97252,31.50478c-.46789,2.02773.31174,3.74391,2.03443,4.2118,1.87694.4679,3.44137-.62405,4.06772-2.80812a109.18033,109.18033,0,0,0,3.12867-27.917Zm32.854-36.96258a3.10567,3.10567,0,0,0-3.91136-2.02773,2.97022,2.97022,0,0,0-2.03235,3.90006c2.50253,9.35957,3.44041,19.02707,4.067,28.85281a155.42236,155.42236,0,0,1-5.0079,47.25852c-.46789,2.02792.31232,3.90025,2.03519,4.2118a3.12981,3.12981,0,0,0,4.067-2.65178,158.74287,158.74287,0,0,0,5.31944-41.48688,159.06625,159.06625,0,0,0-2.03234-26.98258,60.29831,60.29831,0,0,0-2.5046-11.07422ZM15.61237,48.32272A67.883,67.883,0,0,1,27.18744,31.633C41.11155,16.81945,58.16452,9.0199,78.66305,8.39586c2.34712,0,3.75521-1.24828,3.75521-3.276C82.416,3.09194,81.00789,2,78.5046,2A77.9438,77.9438,0,0,0,10.13447,45.04442a5.77164,5.77164,0,0,0-.62406,2.18407,2.72436,2.72436,0,0,0,1.56425,2.80736c1.72077.93654,3.59676.31231,4.53771-1.71543ZM58.79086,85.753c-1.25059-7.48553-.31175-14.19161,4.85155-20.11959a2.805,2.805,0,0,0,.62425-1.40368c.15616-1.55983-.15635-2.80812-1.7206-3.43216a2.98066,2.98066,0,0,0-3.91136.93635c-5.63137,6.55146-7.66581,14.19542-6.41388,22.77308a143.77173,143.77173,0,0,1,1.87675,19.65112,84.88938,84.88938,0,0,1-1.87675,19.18379,87.66557,87.66557,0,0,1-7.822,21.36711,4.07667,4.07667,0,0,0-.7827,2.652,2.99418,2.99418,0,0,0,2.34693,2.652c1.72079.31173,2.815-.31251,3.75521-1.87234a90.13491,90.13491,0,0,0,9.69891-29.79089A108.40093,108.40093,0,0,0,58.79315,85.753ZM22.338,94.48834c-1.09423-7.01916-2.03233-13.88368-1.09423-21.05461A59.14015,59.14015,0,0,1,46.11944,31.47686a3.29673,3.29673,0,0,0,1.56444-3.90024c-.78269-2.18389-2.97348-2.65176-5.16425-1.24735A60.84871,60.84871,0,0,0,29.37822,38.49678a64.523,64.523,0,0,0-14.7068,39.7707c-.31174,7.6434,1.72287,15.12892,2.19077,22.61463.31251,4.99219.46791,9.98419-1.09424,14.97429-.4679,1.55983-.93809,3.27525-1.40827,4.52334a3.12377,3.12377,0,0,0,3.12886,3.43008c1.87693,0,2.65868-1.09195,3.285-2.652,3.285-8.57766,2.81711-17.6232,1.56442-26.66951ZM157.0425,67.03786Q147.65477,20.2483,102.12991,5.276A45.00768,45.00768,0,0,0,91.80237,3.09194c-1.87828-.15615-3.12867.78039-3.28426,2.4958a2.87607,2.87607,0,0,0,2.50252,3.58833c.62406.15558,1.2504.15558,1.72059.31175A70.72962,70.72962,0,0,1,133.1047,31.94476a69.18254,69.18254,0,0,1,13.9241,22.61539,74.061,74.061,0,0,1,4.69407,23.23944c.15538,2.33946,1.87825,3.7439,4.06674,3.11986,1.56444-.4679,2.34713-1.71618,2.19077-4.212a41.34713,41.34713,0,0,0-.93788-9.6696ZM115.74016,40.83473a46.09788,46.09788,0,0,0-10.16908-7.17379,3.002,3.002,0,0,0-4.22521,1.09194c-.93885,1.55983-.46866,3.276,1.25193,4.368a3.91752,3.91752,0,0,0,1.09424.62422c10.4837,6.3936,17.83548,15.283,21.27894,27.13666,3.12887,11.38806,3.9108,23.08329,4.22309,34.7806a167.16816,167.16816,0,0,1-2.34692,33.06462c-.31174,2.34023.624,3.7439,2.50251,4.0564,2.03521.31175,3.44347-.78039,3.755-3.11985a162.60561,162.60561,0,0,0,2.34712-27.91913,217.74083,217.74083,0,0,0-2.65869-34.62312c-2.03461-12.79173-7.51041-23.55117-17.053-32.2865ZM89.76794,53.62646a28.15742,28.15742,0,0,0-18.92915-.15615c-2.66077.78037-3.44346,3.58546-1.72059,5.30163,1.24984,1.24809,2.50253,1.09195,3.91061.62406a21.7273,21.7273,0,0,1,28.47246,16.8428,163.57907,163.57907,0,0,1,2.34693,17.31375A137.996,137.996,0,0,1,103.692,118.974a149.65135,149.65135,0,0,1-7.04022,31.97477c-.1554.62405-.4679,1.092-.31155,1.71618a3.009,3.009,0,0,0,2.81483,2.65177,3.073,3.073,0,0,0,3.4427-2.34022,143.91448,143.91448,0,0,0,8.13447-46.946,167.06448,167.06448,0,0,0-2.65867-29.6353c-2.03462-11.07347-7.97831-18.87149-18.30566-22.77079ZM46.431,72.65334C50.03005,55.02805,68.64821,42.7065,86.48292,46.294a35.29014,35.29014,0,0,1,20.18241,11.85368,8.8989,8.8989,0,0,0,1.72,1.71617,3.19219,3.19219,0,0,0,3.755-.93579c1.09424-1.40444.93885-2.80812-.31155-4.5243-7.19867-8.733-16.42891-13.87928-27.84841-14.81508-14.55046-1.2481-26.59781,3.90025-35.82653,15.283A38.57467,38.57467,0,0,0,39.861,85.4407c.7804,5.30373,1.72077,10.45208,1.72077,15.75372,0,3.74391,0,7.488-.31174,11.07347a3.00588,3.00588,0,0,0,2.81408,3.276,3.03818,3.03818,0,0,0,3.44346-2.652,100.85173,100.85173,0,0,0-.15616-20.58748c-.47018-4.21179-1.87827-8.26743-1.56443-12.16769a39.31,39.31,0,0,1,.62406-7.48342Zm97.78146,20.43132a3.18855,3.18855,0,0,0,2.97269-3.43217V88.56056c-.62425-5.92722-1.2506-11.8531-2.19077-17.77879-2.03235-13.10195-7.19563-24.64312-16.1126-34.31273C115.89557,21.96341,99.46894,14.78945,79.91136,14.63329a64.57052,64.57052,0,0,0-25.3436,5.14835,3.233,3.233,0,0,0-2.03462,4.20951,3.15932,3.15932,0,0,0,4.38154,1.56A60.10933,60.10933,0,0,1,85.54483,21.183a57.79887,57.79887,0,0,1,35.04479,15.91007c10.32431,9.82517,16.268,21.835,18.30566,36.02812q1.16919,8.42465,1.876,16.84377c.46789,1.87157,1.72058,3.11966,3.44119,3.11966ZM71.15054,82.94489a11.40154,11.40154,0,0,1,0-5.614,9.11075,9.11075,0,0,1,9.70119-6.55146c4.22292.15558,7.66638,3.2762,8.60218,7.9559a150.63857,150.63857,0,0,1,2.661,26.51468,3.1253,3.1253,0,0,0,3.12887,3.43236c1.879,0,2.97252-1.40367,3.12867-3.276V102.5981h.15635c-.3125-4.05545-.4679-8.11185-.93581-12.16521-.47018-4.05565-1.09653-8.11206-1.72287-12.16541a15.95817,15.95817,0,0,0-17.67931-13.726c-8.13448.93654-14.7068,9.04763-13.45393,17.002.62406,4.83584,1.40809,9.6696,1.876,14.50563a100.76525,100.76525,0,0,1-4.69311,39.77A111.03411,111.03411,0,0,1,55.976,149.85661a3.05946,3.05946,0,0,0,.15616,3.43236,2.84779,2.84779,0,0,0,2.97251,1.24752,3.58665,3.58665,0,0,0,2.815-2.33946C72.715,130.2034,75.21748,107.1224,71.15054,82.94717ZM34.38592,91.52482c-.7825-5.30393-1.565-10.76381-1.09634-16.06545A45.82532,45.82532,0,0,1,49.87465,44.26631a45.38948,45.38948,0,0,1,28.16-10.76171,44.31355,44.31355,0,0,1,12.82985,1.24828,3.86115,3.86115,0,0,0,1.87676.15616,2.85951,2.85951,0,0,0,2.50252-2.80814,3.03932,3.03932,0,0,0-2.34694-3.276,45.9556,45.9556,0,0,0-13.14161-1.55984,34.7057,34.7057,0,0,0-9.6989.93577c-15.801,2.96429-27.84821,11.54421-36.14113,25.42352a50.63513,50.63513,0,0,0-6.56928,32.59653C27.81379,90.589,28.754,94.80084,29.06571,99.169c.62406,10.75944-.78174,21.20867-5.63119,30.87827a3.03324,3.03324,0,0,0-.47019,2.02771,2.85292,2.85292,0,0,0,2.65868,2.652,3.38105,3.38105,0,0,0,3.4427-2.02772c6.57-12.9458,7.51023-26.98125,5.32021-41.17439Zm0,0"/></g><path class="cls-2" d="M91.80237,3.09192c-1.8783-.15613-3.12866.78039-3.28424,2.49579A2.876,2.876,0,0,0,91.02063,9.176c.62408.15564,1.25043.15564,1.72058.31176A76.03029,76.03029,0,0,1,102.56085,12h15.351a96.77876,96.77876,0,0,0-15.782-6.724A45.00584,45.00584,0,0,0,91.80237,3.09192Z"/><path class="cls-2" d="M41.63989,12H57.42126A75.41744,75.41744,0,0,1,78.663,8.39581c2.34717,0,3.75525-1.24823,3.75525-3.276C82.416,3.09192,81.00787,2,78.50458,2a77.85348,77.85348,0,0,0-36.29651,9.67188C42.01575,11.77832,41.83093,11.89227,41.63989,12Z"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/fingerprint10.svg b/polkit-agent/assets/biowaiting/fingerprint10.svg
+new file mode 100644
+index 0000000..315aaf0
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/fingerprint10.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}</style></defs><g id="文字标注"><g class="cls-1"><path d="M76.78191,140.809a3.00927,3.00927,0,0,0-4.06695,1.87157l-4.2231,10.29593a2.95177,2.95177,0,0,0,2.34692,4.2097c1.87618,0,2.81427-.62348,3.44061-2.02792q2.35322-4.96514,4.2252-10.13749a3.22338,3.22338,0,0,0-1.72268-4.21179Zm71.02957-38.52241a3.08449,3.08449,0,0,0-3.44119-2.96447,3.01947,3.01947,0,0,0-2.81653,3.276c.15559,5.14854-.15616,10.13768-.31232,15.286,0,2.33947,1.09425,3.58775,2.971,3.74391,1.87844,0,3.28729-1.24829,3.28729-3.58851,0-3.43141.4679-7.01916.31174-10.29517a31.74592,31.74592,0,0,0,0-5.46008ZM42.99057,121.93748a3.19812,3.19812,0,0,0-3.91136,2.18407c-.31251.7804-.4679,1.71618-.7825,2.49562a101.9769,101.9769,0,0,1-5.00714,12.01c-1.09424,2.34022.1554,4.67969,2.66078,4.67969,1.40827.15616,2.34636-.77963,2.9727-2.02772a81.29627,81.29627,0,0,0,6.09985-15.4437,3.02989,3.02989,0,0,0-2.03233-3.898Zm51.78526-7.17321a3.1326,3.1326,0,0,0-3.44347,2.80735,161.02757,161.02757,0,0,1-4.84945,22.9279c-1.25192,4.36718-2.81636,8.73532-4.38079,13.10328a2.97748,2.97748,0,0,0,1.25192,3.898,3.04925,3.04925,0,0,0,3.75521-.3125,5.62684,5.62684,0,0,0,1.25041-2.33946,128.60675,128.60675,0,0,0,4.85174-14.97123,161.5315,161.5315,0,0,0,4.37926-21.68171,3.2645,3.2645,0,0,0-2.81483-3.43159ZM11.07465,60.17791a3.312,3.312,0,0,0-2.19078-4.36738c-1.72059-.46865-3.285.62329-3.91137,2.49561A79.568,79.568,0,0,0,2,80.45155a66.61318,66.61318,0,0,0,.31174,7.6432A76.2778,76.2778,0,0,0,5.91135,104.626,2.67954,2.67954,0,0,0,8.57,106.6545c2.661.15558,3.91289-1.87233,3.131-4.68045a70.50518,70.50518,0,0,1-.62634-41.79842ZM85.701,104.15584a75.86247,75.86247,0,0,0-.4679-9.98362,114.4834,114.4834,0,0,0-2.19078-14.6595,3.09173,3.09173,0,0,0-3.59961-2.49581,3.03667,3.03667,0,0,0-2.34618,3.90025,116.66849,116.66849,0,0,1,2.34618,18.24725,106.72223,106.72223,0,0,1-2.97253,31.50478c-.46789,2.02773.31175,3.74391,2.03443,4.2118,1.87694.4679,3.44137-.62405,4.06772-2.80812a109.17988,109.17988,0,0,0,3.12867-27.917Zm32.854-36.96258a3.10567,3.10567,0,0,0-3.91136-2.02773,2.97022,2.97022,0,0,0-2.03235,3.90006c2.50253,9.35957,3.44042,19.02707,4.067,28.85281a155.422,155.422,0,0,1-5.0079,47.25852c-.46789,2.02792.31232,3.90025,2.0352,4.2118a3.1298,3.1298,0,0,0,4.06695-2.65178,158.74245,158.74245,0,0,0,5.31944-41.48688,159.06625,159.06625,0,0,0-2.03234-26.98258,60.29831,60.29831,0,0,0-2.5046-11.07422ZM15.61236,48.32272A67.88326,67.88326,0,0,1,27.18743,31.633C41.11154,16.81945,58.16451,9.0199,78.663,8.39586c2.34712,0,3.75521-1.24828,3.75521-3.276C82.416,3.09194,81.00788,2,78.50459,2A77.9438,77.9438,0,0,0,10.13446,45.04442a5.77164,5.77164,0,0,0-.62406,2.18407,2.72437,2.72437,0,0,0,1.56425,2.80736c1.72077.93654,3.59676.31231,4.53771-1.71543ZM58.79085,85.753c-1.25058-7.48553-.31174-14.19161,4.85155-20.11959a2.80489,2.80489,0,0,0,.62425-1.40368c.15616-1.55983-.15634-2.80812-1.72059-3.43216a2.98066,2.98066,0,0,0-3.91136.93635c-5.63138,6.55146-7.66581,14.19542-6.41389,22.77308a143.77173,143.77173,0,0,1,1.87675,19.65112,84.8888,84.8888,0,0,1-1.87675,19.18379,87.66557,87.66557,0,0,1-7.822,21.36711,4.07666,4.07666,0,0,0-.78269,2.652,2.99416,2.99416,0,0,0,2.34693,2.652c1.72078.31173,2.815-.31251,3.75521-1.87234a90.1349,90.1349,0,0,0,9.6989-29.79089A108.40061,108.40061,0,0,0,58.79314,85.753ZM22.338,94.48834c-1.09424-7.01916-2.03234-13.88368-1.09424-21.05461A59.14015,59.14015,0,0,1,46.11943,31.47686a3.29673,3.29673,0,0,0,1.56444-3.90024c-.78269-2.18389-2.97347-2.65176-5.16425-1.24735A60.84871,60.84871,0,0,0,29.37821,38.49678a64.52309,64.52309,0,0,0-14.7068,39.7707c-.31174,7.6434,1.72288,15.12892,2.19078,22.61463.3125,4.99219.4679,9.98419-1.09425,14.97429-.4679,1.55983-.93809,3.27525-1.40827,4.52334a3.12377,3.12377,0,0,0,3.12886,3.43008c1.87694,0,2.65868-1.09195,3.285-2.652,3.285-8.57766,2.81712-17.6232,1.56443-26.66951ZM157.04249,67.03786Q147.65476,20.2483,102.1299,5.276A45.00768,45.00768,0,0,0,91.80236,3.09194c-1.87827-.15615-3.12867.78039-3.28426,2.4958a2.87607,2.87607,0,0,0,2.50252,3.58833c.62406.15558,1.25041.15558,1.72059.31175a70.72962,70.72962,0,0,1,40.36348,22.45694A69.18273,69.18273,0,0,1,147.0288,54.56015a74.061,74.061,0,0,1,4.69406,23.23944c.15538,2.33946,1.87825,3.7439,4.06675,3.11986,1.56443-.4679,2.34712-1.71618,2.19076-4.212a41.34713,41.34713,0,0,0-.93788-9.6696ZM115.74016,40.83473a46.09794,46.09794,0,0,0-10.16909-7.17379,3.002,3.002,0,0,0-4.22521,1.09194c-.93885,1.55983-.46866,3.276,1.25194,4.368a3.91739,3.91739,0,0,0,1.09424.62422c10.48369,6.3936,17.83547,15.283,21.27894,27.13666,3.12886,11.38806,3.91079,23.08329,4.22309,34.7806a167.16817,167.16817,0,0,1-2.34693,33.06462c-.31174,2.34023.62405,3.7439,2.50252,4.0564,2.0352.31175,3.44347-.78039,3.755-3.11985a162.60561,162.60561,0,0,0,2.34712-27.91913,217.742,217.742,0,0,0-2.65868-34.62312c-2.03462-12.79173-7.51042-23.55117-17.053-32.2865ZM89.76793,53.62646a28.15742,28.15742,0,0,0-18.92915-.15615c-2.66076.78037-3.44345,3.58546-1.72059,5.30163C70.368,60.02,71.62072,59.86389,73.0288,59.396a21.72731,21.72731,0,0,1,28.47247,16.8428,163.579,163.579,0,0,1,2.34692,17.31375A137.99692,137.99692,0,0,1,103.692,118.974a149.65137,149.65137,0,0,1-7.04023,31.97477c-.1554.62405-.4679,1.092-.31155,1.71618a3.009,3.009,0,0,0,2.81483,2.65177,3.073,3.073,0,0,0,3.44271-2.34022,143.91473,143.91473,0,0,0,8.13446-46.946,167.06542,167.06542,0,0,0-2.65866-29.6353c-2.03463-11.07347-7.97832-18.87149-18.30567-22.77079ZM46.431,72.65334C50.03,55.02805,68.6482,42.7065,86.48291,46.294a35.29014,35.29014,0,0,1,20.18241,11.85368,8.8989,8.8989,0,0,0,1.72,1.71617,3.19219,3.19219,0,0,0,3.755-.93579c1.09424-1.40444.93885-2.80812-.31155-4.5243-7.19867-8.733-16.42891-13.87928-27.84841-14.81508-14.55045-1.2481-26.59781,3.90025-35.82653,15.283A38.57474,38.57474,0,0,0,39.861,85.4407c.7804,5.30373,1.72078,10.45208,1.72078,15.75372,0,3.74391,0,7.488-.31175,11.07347a3.00588,3.00588,0,0,0,2.81408,3.276,3.03818,3.03818,0,0,0,3.44346-2.652,100.85173,100.85173,0,0,0-.15616-20.58748c-.47018-4.21179-1.87827-8.26743-1.56443-12.16769a39.31083,39.31083,0,0,1,.62406-7.48342Zm97.78146,20.43132a3.18855,3.18855,0,0,0,2.97269-3.43217V88.56056c-.62425-5.92722-1.2506-11.8531-2.19077-17.77879-2.03234-13.10195-7.19563-24.64312-16.1126-34.31273C115.89556,21.96341,99.46893,14.78945,79.91135,14.63329a64.57055,64.57055,0,0,0-25.3436,5.14835,3.23306,3.23306,0,0,0-2.03462,4.20951,3.15933,3.15933,0,0,0,4.38155,1.56A60.10931,60.10931,0,0,1,85.54483,21.183a57.79887,57.79887,0,0,1,35.04478,15.91007c10.32431,9.82517,16.268,21.835,18.30566,36.02812q1.16919,8.42465,1.876,16.84377c.46789,1.87157,1.72058,3.11966,3.44119,3.11966ZM71.15053,82.94489a11.40154,11.40154,0,0,1,0-5.614,9.11075,9.11075,0,0,1,9.70119-6.55146c4.22292.15558,7.66638,3.2762,8.60218,7.9559a150.63952,150.63952,0,0,1,2.661,26.51468,3.1253,3.1253,0,0,0,3.12886,3.43236c1.879,0,2.97252-1.40367,3.12867-3.276V102.5981h.15635c-.3125-4.05545-.4679-8.11185-.9358-12.16521-.47019-4.05565-1.09654-8.11206-1.72288-12.16541a15.95817,15.95817,0,0,0-17.67931-13.726c-8.13447.93654-14.7068,9.04763-13.45392,17.002.624,4.83584,1.40808,9.6696,1.876,14.50563a100.76542,100.76542,0,0,1-4.6931,39.77,111.03563,111.03563,0,0,1-5.9437,14.03754,3.0595,3.0595,0,0,0,.15616,3.43236,2.8478,2.8478,0,0,0,2.97252,1.24752,3.58665,3.58665,0,0,0,2.815-2.33946C72.715,130.2034,75.21748,107.1224,71.15053,82.94717ZM34.38591,91.52482c-.7825-5.30393-1.565-10.76381-1.09634-16.06545A45.82536,45.82536,0,0,1,49.87464,44.26631a45.38952,45.38952,0,0,1,28.16-10.76171,44.31362,44.31362,0,0,1,12.82986,1.24828,3.86111,3.86111,0,0,0,1.87675.15616,2.85951,2.85951,0,0,0,2.50252-2.80814,3.03932,3.03932,0,0,0-2.34694-3.276,45.95556,45.95556,0,0,0-13.14161-1.55984,34.70559,34.70559,0,0,0-9.69889.93577C54.25524,31.16513,42.20807,39.74505,33.91516,53.62436a50.635,50.635,0,0,0-6.56928,32.59653c.4679,4.36814,1.40808,8.57995,1.71983,12.94809.62405,10.75944-.78175,21.20867-5.6312,30.87827a3.03318,3.03318,0,0,0-.47018,2.02771,2.8529,2.8529,0,0,0,2.65867,2.652,3.38107,3.38107,0,0,0,3.44271-2.02772c6.57-12.9458,7.51022-26.98125,5.3202-41.17439Zm0,0"/></g><path class="cls-2" d="M33.93249,119a74.46006,74.46006,0,0,0,.45343-27.4751c-.78253-5.304-1.565-10.76391-1.09638-16.06543A45.82521,45.82521,0,0,1,49.87463,44.26636a45.3888,45.3888,0,0,1,28.16-10.76172,44.30565,44.30565,0,0,1,12.82983,1.24829,3.86367,3.86367,0,0,0,1.87677.156,2.85936,2.85936,0,0,0,2.50251-2.80811A3.0391,3.0391,0,0,0,92.89678,28.825a45.94687,45.94687,0,0,0-13.1416-1.55981,34.707,34.707,0,0,0-9.69891.93554C54.25524,31.165,42.20806,39.74512,33.91515,53.62427A50.63525,50.63525,0,0,0,27.34588,86.221c.46789,4.36792,1.40808,8.57983,1.71985,12.948A66.87594,66.87594,0,0,1,27.47662,119Z"/><path class="cls-2" d="M46.431,72.65332C50.03,55.02808,68.64819,42.70654,86.4829,46.294a35.29073,35.29073,0,0,1,20.18244,11.85376,8.89448,8.89448,0,0,0,1.72,1.71606,3.1923,3.1923,0,0,0,3.75506-.93555c1.09424-1.40454.93885-2.80835-.31158-4.52441-7.19867-8.73316-16.4289-13.8794-27.84839-14.81519-14.55048-1.248-26.59784,3.90039-35.82654,15.283A38.57484,38.57484,0,0,0,39.861,85.44067c.7804,5.30371,1.72077,10.45215,1.72077,15.75367,0,3.74389,0,7.488-.31171,11.07348a3.006,3.006,0,0,0,2.814,3.27613,3.03829,3.03829,0,0,0,3.44348-2.6521,100.85037,100.85037,0,0,0-.15613-20.58741c-.47021-4.21167-1.87829-8.26733-1.56445-12.16772A39.31056,39.31056,0,0,1,46.431,72.65332Z"/><path class="cls-2" d="M58.79314,85.75293h-.00232c-1.25054-7.48535-.3117-14.19141,4.85157-20.11963a2.80362,2.80362,0,0,0,.62426-1.40356c.15613-1.55982-.15637-2.80811-1.72058-3.43213a2.98078,2.98078,0,0,0-3.91137.93628c-5.63141,6.55151-7.66584,14.19531-6.41388,22.77319a143.776,143.776,0,0,1,1.87677,19.65112A94.35,94.35,0,0,1,53.06023,119h6.25434c.03076-.218.07361-.43164.10266-.65039A108.40174,108.40174,0,0,0,58.79314,85.75293Z"/><path class="cls-2" d="M78.50457,2A77.94379,77.94379,0,0,0,10.13445,45.04443a5.77193,5.77193,0,0,0-.624,2.18409,2.72441,2.72441,0,0,0,1.56421,2.80737c1.72076.93652,3.5968.31225,4.53772-1.71558v.00244A67.88222,67.88222,0,0,1,27.18743,31.63306C41.11156,16.81934,58.16448,9.02,78.663,8.39575c2.34717,0,3.75525-1.24829,3.75525-3.27588C82.416,3.0918,81.00787,2,78.50457,2Z"/><path class="cls-2" d="M71.15051,82.94727v-.00245a11.40165,11.40165,0,0,1,0-5.61377,9.11078,9.11078,0,0,1,9.70123-6.55151c4.2229.15552,7.66638,3.27612,8.60217,7.95581A150.64126,150.64126,0,0,1,92.11486,105.25a3.12524,3.12524,0,0,0,3.12885,3.43237c1.879,0,2.97253-1.40356,3.12872-3.27612v-2.80811h.15631c-.3125-4.05542-.4679-8.11181-.93579-12.16528-.47022-4.05566-1.09656-8.11206-1.7229-12.16528A15.95811,15.95811,0,0,0,78.19079,64.5415c-8.13452.93653-14.70685,9.04761-13.454,17.002.62408,4.83593,1.40814,9.66967,1.876,14.50561A109.31694,109.31694,0,0,1,65.899,119h6.11938A120.607,120.607,0,0,0,71.15051,82.94727Z"/><path class="cls-2" d="M4.97253,58.30615A79.56579,79.56579,0,0,0,2,80.45166a66.6041,66.6041,0,0,0,.31177,7.64307A76.27289,76.27289,0,0,0,5.91137,104.626a2.67956,2.67956,0,0,0,2.65869,2.02856c2.66095.15552,3.91284-1.87231,3.13092-4.68042a70.50594,70.50594,0,0,1-.62634-41.79858V60.178A3.312,3.312,0,0,0,8.8839,55.81055C7.16326,55.3418,5.59887,56.43384,4.97253,58.30615Z"/><path class="cls-2" d="M54.56774,19.78174a3.233,3.233,0,0,0-2.03461,4.20947,3.15955,3.15955,0,0,0,4.38154,1.56006,60.109,60.109,0,0,1,28.63018-4.36816A57.799,57.799,0,0,1,120.58959,37.093c10.32434,9.82519,16.268,21.8352,18.30567,36.02807q1.16922,8.42505,1.876,16.84375c.4679,1.87159,1.72058,3.11988,3.44123,3.11988a3.18857,3.18857,0,0,0,2.97265-3.43238V88.56055c-.6242-5.92725-1.25055-11.853-2.19073-17.77881-2.03235-13.102-7.19562-24.64307-16.11261-34.31275C115.89556,21.96338,99.46893,14.78955,79.91137,14.6333A64.56588,64.56588,0,0,0,54.56774,19.78174Z"/><path class="cls-2" d="M14.82623,119h6.68389c2.45581-7.93066,1.976-16.22021.82789-24.51172-1.09424-7.019-2.03235-13.88354-1.09424-21.05469A59.14042,59.14042,0,0,1,46.11944,31.47681a3.29665,3.29665,0,0,0,1.56445-3.90015c-.78271-2.18408-2.97351-2.65186-5.16424-1.24731A60.84242,60.84242,0,0,0,29.37823,38.49683,64.52224,64.52224,0,0,0,14.67144,78.26758c-.31177,7.64331,1.72284,15.1289,2.19073,22.6145.3125,4.99219.4679,9.98413-1.09423,14.97437C15.45483,116.90015,15.14068,118.00366,14.82623,119Z"/><path class="cls-2" d="M84.93749,119a109.15166,109.15166,0,0,0,.76349-14.84424,75.85951,75.85951,0,0,0-.46789-9.98364,114.49913,114.49913,0,0,0-2.1908-14.65942,3.09175,3.09175,0,0,0-3.59961-2.49585A3.03673,3.03673,0,0,0,77.09649,80.917a116.673,116.673,0,0,1,2.34619,18.24732A115.89424,115.89424,0,0,1,78.6997,119Z"/><path class="cls-2" d="M147.49975,118.03955c0-3.4314.46789-7.01929.3117-10.29517a31.74131,31.74131,0,0,0,0-5.4602v.00244a3.08448,3.08448,0,0,0-3.44116-2.9646,3.01965,3.01965,0,0,0-2.81653,3.27612c.15558,5.14844-.15618,10.1377-.31231,15.28589A5.85688,5.85688,0,0,0,141.352,119h6.049A4.8957,4.8957,0,0,0,147.49975,118.03955Z"/><path class="cls-2" d="M157.04247,67.03784q-9.38772-46.78967-54.91259-61.762A45.02188,45.02188,0,0,0,91.80236,3.0918c-1.8783-.156-3.12866.78051-3.28424,2.49585A2.8761,2.8761,0,0,0,91.02062,9.176c.62409.15551,1.25043.15551,1.72058.31176a70.72924,70.72924,0,0,1,40.36347,22.457A69.1805,69.1805,0,0,1,147.0288,54.56006a74.06052,74.06052,0,0,1,4.694,23.2395c.1554,2.3396,1.8783,3.7439,4.06677,3.11987,1.56446-.46777,2.34711-1.71631,2.1908-4.21191A41.34673,41.34673,0,0,0,157.04247,67.03784Z"/><path class="cls-2" d="M135.09362,119c.28638-3.91992.42383-7.71533.35822-11.25562a217.74443,217.74443,0,0,0-2.6587-34.62329c-2.0346-12.7915-7.51043-23.551-17.053-32.28637A46.09888,46.09888,0,0,0,105.571,33.66089a3.002,3.002,0,0,0-4.22516,1.092c-.93884,1.55981-.46869,3.27588,1.25189,4.36792a3.92179,3.92179,0,0,0,1.09424.62427c10.4837,6.39355,17.83551,15.283,21.279,27.13672,3.12885,11.38794,3.91077,23.083,4.22308,34.78051A167.89466,167.89466,0,0,1,128.7799,119Z"/><path class="cls-2" d="M97.59063,118.1958a3.26475,3.26475,0,0,0-2.81482-3.43164,3.13267,3.13267,0,0,0-3.44342,2.80737c-.067.4773-.1413.9524-.21179,1.42847H97.481C97.51641,118.73145,97.55682,118.46533,97.59063,118.1958Z"/><path class="cls-2" d="M122.5595,119c.38214-4.52686.58307-9.10278.53247-13.75a159.06937,159.06937,0,0,0-2.03235-26.98242A60.29143,60.29143,0,0,0,118.555,67.19336a3.10573,3.10573,0,0,0-3.91138-2.02783,2.97009,2.97009,0,0,0-2.03229,3.8999c2.5025,9.35986,3.44037,19.02734,4.067,28.853A153.35944,153.35944,0,0,1,116.25793,119Z"/><path class="cls-2" d="M103.689,119h6.40527q.62714-6.47863.638-12.96948A167.06829,167.06829,0,0,0,108.0736,76.395c-2.03461-11.07324-7.97833-18.87134-18.30566-22.77075v.00219a28.15763,28.15763,0,0,0-18.92914-.15625c-2.66077.78052-3.44348,3.58545-1.72058,5.30176,1.24981,1.248,2.5025,1.0918,3.91058.624a21.72717,21.72717,0,0,1,28.47247,16.84277,163.58646,163.58646,0,0,1,2.34693,17.31372,137.99558,137.99558,0,0,1-.15619,25.42139Z"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/fingerprint11.svg b/polkit-agent/assets/biowaiting/fingerprint11.svg
+new file mode 100644
+index 0000000..73ab76d
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/fingerprint11.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}</style></defs><g id="文字标注"><g class="cls-1"><path d="M76.78191,140.809a3.00927,3.00927,0,0,0-4.06695,1.87157l-4.2231,10.29593a2.95177,2.95177,0,0,0,2.34692,4.2097c1.87618,0,2.81427-.62348,3.44061-2.02792q2.35322-4.96514,4.2252-10.13749a3.22338,3.22338,0,0,0-1.72268-4.21179Zm71.02957-38.52241a3.08449,3.08449,0,0,0-3.44119-2.96447,3.01947,3.01947,0,0,0-2.81653,3.276c.15559,5.14854-.15616,10.13768-.31232,15.286,0,2.33947,1.09425,3.58775,2.971,3.74391,1.87844,0,3.28729-1.24829,3.28729-3.58851,0-3.43141.4679-7.01916.31174-10.29517a31.74592,31.74592,0,0,0,0-5.46008ZM42.99057,121.93748a3.19812,3.19812,0,0,0-3.91136,2.18407c-.31251.7804-.4679,1.71618-.7825,2.49562a101.9769,101.9769,0,0,1-5.00714,12.01c-1.09424,2.34022.1554,4.67969,2.66078,4.67969,1.40827.15616,2.34636-.77963,2.9727-2.02772a81.29627,81.29627,0,0,0,6.09985-15.4437,3.02989,3.02989,0,0,0-2.03233-3.898Zm51.78526-7.17321a3.1326,3.1326,0,0,0-3.44347,2.80735,161.02757,161.02757,0,0,1-4.84945,22.9279c-1.25192,4.36718-2.81636,8.73532-4.38079,13.10328a2.97748,2.97748,0,0,0,1.25192,3.898,3.04925,3.04925,0,0,0,3.75521-.3125,5.62684,5.62684,0,0,0,1.25041-2.33946,128.60675,128.60675,0,0,0,4.85174-14.97123,161.5315,161.5315,0,0,0,4.37926-21.68171,3.2645,3.2645,0,0,0-2.81483-3.43159ZM11.07465,60.17791a3.312,3.312,0,0,0-2.19078-4.36738c-1.72059-.46865-3.285.62329-3.91137,2.49561A79.568,79.568,0,0,0,2,80.45155a66.61318,66.61318,0,0,0,.31174,7.6432A76.2778,76.2778,0,0,0,5.91135,104.626,2.67954,2.67954,0,0,0,8.57,106.6545c2.661.15558,3.91289-1.87233,3.131-4.68045a70.50518,70.50518,0,0,1-.62634-41.79842ZM85.701,104.15584a75.86247,75.86247,0,0,0-.4679-9.98362,114.4834,114.4834,0,0,0-2.19078-14.6595,3.09173,3.09173,0,0,0-3.59961-2.49581,3.03667,3.03667,0,0,0-2.34618,3.90025,116.66849,116.66849,0,0,1,2.34618,18.24725,106.72223,106.72223,0,0,1-2.97253,31.50478c-.46789,2.02773.31175,3.74391,2.03443,4.2118,1.87694.4679,3.44137-.62405,4.06772-2.80812a109.17988,109.17988,0,0,0,3.12867-27.917Zm32.854-36.96258a3.10567,3.10567,0,0,0-3.91136-2.02773,2.97022,2.97022,0,0,0-2.03235,3.90006c2.50253,9.35957,3.44042,19.02707,4.067,28.85281a155.422,155.422,0,0,1-5.0079,47.25852c-.46789,2.02792.31232,3.90025,2.0352,4.2118a3.1298,3.1298,0,0,0,4.06695-2.65178,158.74245,158.74245,0,0,0,5.31944-41.48688,159.06625,159.06625,0,0,0-2.03234-26.98258,60.29831,60.29831,0,0,0-2.5046-11.07422ZM15.61236,48.32272A67.88326,67.88326,0,0,1,27.18743,31.633C41.11154,16.81945,58.16451,9.0199,78.663,8.39586c2.34712,0,3.75521-1.24828,3.75521-3.276C82.416,3.09194,81.00788,2,78.50459,2A77.9438,77.9438,0,0,0,10.13446,45.04442a5.77164,5.77164,0,0,0-.62406,2.18407,2.72437,2.72437,0,0,0,1.56425,2.80736c1.72077.93654,3.59676.31231,4.53771-1.71543ZM58.79085,85.753c-1.25058-7.48553-.31174-14.19161,4.85155-20.11959a2.80489,2.80489,0,0,0,.62425-1.40368c.15616-1.55983-.15634-2.80812-1.72059-3.43216a2.98066,2.98066,0,0,0-3.91136.93635c-5.63138,6.55146-7.66581,14.19542-6.41389,22.77308a143.77173,143.77173,0,0,1,1.87675,19.65112,84.8888,84.8888,0,0,1-1.87675,19.18379,87.66557,87.66557,0,0,1-7.822,21.36711,4.07666,4.07666,0,0,0-.78269,2.652,2.99416,2.99416,0,0,0,2.34693,2.652c1.72078.31173,2.815-.31251,3.75521-1.87234a90.1349,90.1349,0,0,0,9.6989-29.79089A108.40061,108.40061,0,0,0,58.79314,85.753ZM22.338,94.48834c-1.09424-7.01916-2.03234-13.88368-1.09424-21.05461A59.14015,59.14015,0,0,1,46.11943,31.47686a3.29673,3.29673,0,0,0,1.56444-3.90024c-.78269-2.18389-2.97347-2.65176-5.16425-1.24735A60.84871,60.84871,0,0,0,29.37821,38.49678a64.52309,64.52309,0,0,0-14.7068,39.7707c-.31174,7.6434,1.72288,15.12892,2.19078,22.61463.3125,4.99219.4679,9.98419-1.09425,14.97429-.4679,1.55983-.93809,3.27525-1.40827,4.52334a3.12377,3.12377,0,0,0,3.12886,3.43008c1.87694,0,2.65868-1.09195,3.285-2.652,3.285-8.57766,2.81712-17.6232,1.56443-26.66951ZM157.04249,67.03786Q147.65476,20.2483,102.1299,5.276A45.00768,45.00768,0,0,0,91.80236,3.09194c-1.87827-.15615-3.12867.78039-3.28426,2.4958a2.87607,2.87607,0,0,0,2.50252,3.58833c.62406.15558,1.25041.15558,1.72059.31175a70.72962,70.72962,0,0,1,40.36348,22.45694A69.18273,69.18273,0,0,1,147.0288,54.56015a74.061,74.061,0,0,1,4.69406,23.23944c.15538,2.33946,1.87825,3.7439,4.06675,3.11986,1.56443-.4679,2.34712-1.71618,2.19076-4.212a41.34713,41.34713,0,0,0-.93788-9.6696ZM115.74016,40.83473a46.09794,46.09794,0,0,0-10.16909-7.17379,3.002,3.002,0,0,0-4.22521,1.09194c-.93885,1.55983-.46866,3.276,1.25194,4.368a3.91739,3.91739,0,0,0,1.09424.62422c10.48369,6.3936,17.83547,15.283,21.27894,27.13666,3.12886,11.38806,3.91079,23.08329,4.22309,34.7806a167.16817,167.16817,0,0,1-2.34693,33.06462c-.31174,2.34023.62405,3.7439,2.50252,4.0564,2.0352.31175,3.44347-.78039,3.755-3.11985a162.60561,162.60561,0,0,0,2.34712-27.91913,217.742,217.742,0,0,0-2.65868-34.62312c-2.03462-12.79173-7.51042-23.55117-17.053-32.2865ZM89.76793,53.62646a28.15742,28.15742,0,0,0-18.92915-.15615c-2.66076.78037-3.44345,3.58546-1.72059,5.30163C70.368,60.02,71.62072,59.86389,73.0288,59.396a21.72731,21.72731,0,0,1,28.47247,16.8428,163.579,163.579,0,0,1,2.34692,17.31375A137.99692,137.99692,0,0,1,103.692,118.974a149.65137,149.65137,0,0,1-7.04023,31.97477c-.1554.62405-.4679,1.092-.31155,1.71618a3.009,3.009,0,0,0,2.81483,2.65177,3.073,3.073,0,0,0,3.44271-2.34022,143.91473,143.91473,0,0,0,8.13446-46.946,167.06542,167.06542,0,0,0-2.65866-29.6353c-2.03463-11.07347-7.97832-18.87149-18.30567-22.77079ZM46.431,72.65334C50.03,55.02805,68.6482,42.7065,86.48291,46.294a35.29014,35.29014,0,0,1,20.18241,11.85368,8.8989,8.8989,0,0,0,1.72,1.71617,3.19219,3.19219,0,0,0,3.755-.93579c1.09424-1.40444.93885-2.80812-.31155-4.5243-7.19867-8.733-16.42891-13.87928-27.84841-14.81508-14.55045-1.2481-26.59781,3.90025-35.82653,15.283A38.57474,38.57474,0,0,0,39.861,85.4407c.7804,5.30373,1.72078,10.45208,1.72078,15.75372,0,3.74391,0,7.488-.31175,11.07347a3.00588,3.00588,0,0,0,2.81408,3.276,3.03818,3.03818,0,0,0,3.44346-2.652,100.85173,100.85173,0,0,0-.15616-20.58748c-.47018-4.21179-1.87827-8.26743-1.56443-12.16769a39.31083,39.31083,0,0,1,.62406-7.48342Zm97.78146,20.43132a3.18855,3.18855,0,0,0,2.97269-3.43217V88.56056c-.62425-5.92722-1.2506-11.8531-2.19077-17.77879-2.03234-13.10195-7.19563-24.64312-16.1126-34.31273C115.89556,21.96341,99.46893,14.78945,79.91135,14.63329a64.57055,64.57055,0,0,0-25.3436,5.14835,3.23306,3.23306,0,0,0-2.03462,4.20951,3.15933,3.15933,0,0,0,4.38155,1.56A60.10931,60.10931,0,0,1,85.54483,21.183a57.79887,57.79887,0,0,1,35.04478,15.91007c10.32431,9.82517,16.268,21.835,18.30566,36.02812q1.16919,8.42465,1.876,16.84377c.46789,1.87157,1.72058,3.11966,3.44119,3.11966ZM71.15053,82.94489a11.40154,11.40154,0,0,1,0-5.614,9.11075,9.11075,0,0,1,9.70119-6.55146c4.22292.15558,7.66638,3.2762,8.60218,7.9559a150.63952,150.63952,0,0,1,2.661,26.51468,3.1253,3.1253,0,0,0,3.12886,3.43236c1.879,0,2.97252-1.40367,3.12867-3.276V102.5981h.15635c-.3125-4.05545-.4679-8.11185-.9358-12.16521-.47019-4.05565-1.09654-8.11206-1.72288-12.16541a15.95817,15.95817,0,0,0-17.67931-13.726c-8.13447.93654-14.7068,9.04763-13.45392,17.002.624,4.83584,1.40808,9.6696,1.876,14.50563a100.76542,100.76542,0,0,1-4.6931,39.77,111.03563,111.03563,0,0,1-5.9437,14.03754,3.0595,3.0595,0,0,0,.15616,3.43236,2.8478,2.8478,0,0,0,2.97252,1.24752,3.58665,3.58665,0,0,0,2.815-2.33946C72.715,130.2034,75.21748,107.1224,71.15053,82.94717ZM34.38591,91.52482c-.7825-5.30393-1.565-10.76381-1.09634-16.06545A45.82536,45.82536,0,0,1,49.87464,44.26631a45.38952,45.38952,0,0,1,28.16-10.76171,44.31362,44.31362,0,0,1,12.82986,1.24828,3.86111,3.86111,0,0,0,1.87675.15616,2.85951,2.85951,0,0,0,2.50252-2.80814,3.03932,3.03932,0,0,0-2.34694-3.276,45.95556,45.95556,0,0,0-13.14161-1.55984,34.70559,34.70559,0,0,0-9.69889.93577C54.25524,31.16513,42.20807,39.74505,33.91516,53.62436a50.635,50.635,0,0,0-6.56928,32.59653c.4679,4.36814,1.40808,8.57995,1.71983,12.94809.62405,10.75944-.78175,21.20867-5.6312,30.87827a3.03318,3.03318,0,0,0-.47018,2.02771,2.8529,2.8529,0,0,0,2.65867,2.652,3.38107,3.38107,0,0,0,3.44271-2.02772c6.57-12.9458,7.51022-26.98125,5.3202-41.17439Zm0,0"/></g><path class="cls-2" d="M4.97253,58.30615A79.56579,79.56579,0,0,0,2,80.45166a66.6041,66.6041,0,0,0,.31177,7.64307A76.27289,76.27289,0,0,0,5.91137,104.626a2.67956,2.67956,0,0,0,2.65869,2.02856c2.66095.15552,3.91284-1.87231,3.13092-4.68042a70.50594,70.50594,0,0,1-.62634-41.79858V60.178A3.312,3.312,0,0,0,8.8839,55.81055C7.16326,55.3418,5.59887,56.43384,4.97253,58.30615Z"/><path class="cls-2" d="M30.34148,130c5.40314-12.1875,6.08313-25.26245,4.04444-38.4751-.78253-5.304-1.565-10.76391-1.09638-16.06543A45.82521,45.82521,0,0,1,49.87463,44.26636a45.3888,45.3888,0,0,1,28.16-10.76172,44.30565,44.30565,0,0,1,12.82983,1.24829,3.86367,3.86367,0,0,0,1.87677.156,2.85936,2.85936,0,0,0,2.50251-2.80811A3.0391,3.0391,0,0,0,92.89678,28.825a45.94687,45.94687,0,0,0-13.1416-1.55981,34.707,34.707,0,0,0-9.69891.93554C54.25524,31.165,42.20806,39.74512,33.91515,53.62427A50.63525,50.63525,0,0,0,27.34588,86.221c.46789,4.36792,1.40808,8.57983,1.71985,12.948.623,10.74194-.77826,21.1748-5.60871,30.83105Z"/><path class="cls-2" d="M45.02288,125.83545a3.02982,3.02982,0,0,0-2.03229-3.89795,3.19793,3.19793,0,0,0-3.91137,2.18408c-.3125.78028-.4679,1.71607-.78254,2.49561-.38446,1.1499-.79632,2.27343-1.22418,3.38281h6.6789C44.223,128.62256,44.65173,127.23486,45.02288,125.83545Z"/><path class="cls-2" d="M46.431,72.65332C50.03,55.02808,68.64819,42.70654,86.4829,46.294a35.29073,35.29073,0,0,1,20.18244,11.85376,8.89448,8.89448,0,0,0,1.72,1.71606,3.1923,3.1923,0,0,0,3.75506-.93555c1.09424-1.40454.93885-2.80835-.31158-4.52441-7.19867-8.73316-16.4289-13.8794-27.84839-14.81519-14.55048-1.248-26.59784,3.90039-35.82654,15.283A38.57484,38.57484,0,0,0,39.861,85.44067c.7804,5.30371,1.72077,10.45215,1.72077,15.75367,0,3.74389,0,7.488-.31171,11.07348a3.006,3.006,0,0,0,2.814,3.27613,3.03829,3.03829,0,0,0,3.44348-2.6521,100.85037,100.85037,0,0,0-.15613-20.58741c-.47021-4.21167-1.87829-8.26733-1.56445-12.16772A39.31056,39.31056,0,0,1,46.431,72.65332Z"/><path class="cls-2" d="M29.84612,48.63428A58.71554,58.71554,0,0,1,46.11944,31.47681a3.29665,3.29665,0,0,0,1.56445-3.90015c-.78271-2.18408-2.97351-2.65186-5.16424-1.24731A60.84242,60.84242,0,0,0,29.37823,38.49683,64.52224,64.52224,0,0,0,14.67144,78.26758c-.31177,7.64331,1.72284,15.1289,2.19073,22.6145.3125,4.99219.4679,9.98413-1.09423,14.97437-.4679,1.55981-.93811,3.27514-1.40827,4.52319a3.12376,3.12376,0,0,0,3.12885,3.43017c1.87695,0,2.65869-1.092,3.285-2.6521,3.285-8.57763,2.81714-17.623,1.56446-26.66943-1.09424-7.019-2.03235-13.88354-1.09424-21.05469A58.80522,58.80522,0,0,1,29.84612,48.63428Z"/><path class="cls-2" d="M147.81145,102.28418v.00244a3.08448,3.08448,0,0,0-3.44116-2.9646,3.01965,3.01965,0,0,0-2.81653,3.27612c.15558,5.14844-.15618,10.1377-.31231,15.28589,0,2.3396,1.09424,3.58789,2.971,3.7439,1.87841,0,3.28729-1.24829,3.28729-3.58838,0-3.4314.46789-7.01929.3117-10.29517A31.74131,31.74131,0,0,0,147.81145,102.28418Z"/><path class="cls-2" d="M78.50457,2A77.94379,77.94379,0,0,0,10.13445,45.04443a5.77193,5.77193,0,0,0-.624,2.18409,2.72441,2.72441,0,0,0,1.56421,2.80737c1.72076.93652,3.5968.31225,4.53772-1.71558v.00244A67.88222,67.88222,0,0,1,27.18743,31.63306C41.11156,16.81934,58.16448,9.02,78.663,8.39575c2.34717,0,3.75525-1.24829,3.75525-3.27588C82.416,3.0918,81.00787,2,78.50457,2Z"/><path class="cls-2" d="M128.88177,36.469C115.89556,21.96338,99.46893,14.78955,79.91137,14.6333a64.56588,64.56588,0,0,0-25.34363,5.14844,3.233,3.233,0,0,0-2.03461,4.20947,3.15955,3.15955,0,0,0,4.38154,1.56006,60.109,60.109,0,0,1,28.63018-4.36816A57.799,57.799,0,0,1,120.58959,37.093c10.32434,9.82519,16.268,21.8352,18.30567,36.02807q1.16922,8.42505,1.876,16.84375c.4679,1.87159,1.72058,3.11988,3.44123,3.11988a3.18857,3.18857,0,0,0,2.97265-3.43238V88.56055c-.6242-5.92725-1.25055-11.853-2.19073-17.77881C142.962,57.67969,137.79876,46.13867,128.88177,36.469Z"/><path class="cls-2" d="M50.46655,130h6.53192a82.66267,82.66267,0,0,0,2.41876-11.65039,108.40174,108.40174,0,0,0-.62409-32.59668h-.00232c-1.25054-7.48535-.3117-14.19141,4.85157-20.11963a2.80362,2.80362,0,0,0,.62426-1.40356c.15613-1.55982-.15637-2.80811-1.72058-3.43213a2.98078,2.98078,0,0,0-3.91137.93628c-5.63141,6.55151-7.66584,14.19531-6.41388,22.77319a143.776,143.776,0,0,1,1.87677,19.65112,84.89,84.89,0,0,1-1.87677,19.1836C51.74847,125.60254,51.14989,127.81641,50.46655,130Z"/><path class="cls-2" d="M133.93694,130a150.35686,150.35686,0,0,0,1.5149-22.25562,217.74443,217.74443,0,0,0-2.6587-34.62329c-2.0346-12.7915-7.51043-23.551-17.053-32.28637A46.09888,46.09888,0,0,0,105.571,33.66089a3.002,3.002,0,0,0-4.22516,1.092c-.93884,1.55981-.46869,3.27588,1.25189,4.36792a3.92179,3.92179,0,0,0,1.09424.62427c10.4837,6.39355,17.83551,15.283,21.279,27.13672,3.12885,11.38794,3.91077,23.083,4.22308,34.78051A167.37135,167.37135,0,0,1,127.584,130Z"/><path class="cls-2" d="M157.04247,67.03784q-9.38772-46.78967-54.91259-61.762A45.02188,45.02188,0,0,0,91.80236,3.0918c-1.8783-.156-3.12866.78051-3.28424,2.49585A2.8761,2.8761,0,0,0,91.02062,9.176c.62409.15551,1.25043.15551,1.72058.31176a70.72924,70.72924,0,0,1,40.36347,22.457A69.1805,69.1805,0,0,1,147.0288,54.56006a74.06052,74.06052,0,0,1,4.694,23.2395c.1554,2.3396,1.8783,3.7439,4.06677,3.11987,1.56446-.46777,2.34711-1.71631,2.1908-4.21191A41.34673,41.34673,0,0,0,157.04247,67.03784Z"/><path class="cls-2" d="M121.23455,130a148.83457,148.83457,0,0,0,1.85742-24.75,159.06937,159.06937,0,0,0-2.03235-26.98242A60.29143,60.29143,0,0,0,118.555,67.19336a3.10573,3.10573,0,0,0-3.91138-2.02783,2.97009,2.97009,0,0,0-2.03229,3.8999c2.5025,9.35986,3.44037,19.02734,4.067,28.853A153.35038,153.35038,0,0,1,114.87652,130Z"/><path class="cls-2" d="M97.59063,118.1958a3.26475,3.26475,0,0,0-2.81482-3.43164,3.13267,3.13267,0,0,0-3.44342,2.80737Q90.451,123.85461,89.13329,130h6.44983C96.39861,126.1377,97.08685,122.2124,97.59063,118.1958Z"/><path class="cls-2" d="M85.701,104.15576a75.85951,75.85951,0,0,0-.46789-9.98364,114.49913,114.49913,0,0,0-2.1908-14.65942,3.09175,3.09175,0,0,0-3.59961-2.49585A3.03673,3.03673,0,0,0,77.09649,80.917a116.673,116.673,0,0,1,2.34619,18.24732A107.19115,107.19115,0,0,1,76.62749,130h6.4181A109.166,109.166,0,0,0,85.701,104.15576Z"/><path class="cls-2" d="M102.09509,130h6.49407a137.10134,137.10134,0,0,0,2.14307-23.96948A167.06829,167.06829,0,0,0,108.0736,76.395c-2.03461-11.07324-7.97833-18.87134-18.30566-22.77075v.00219a28.15763,28.15763,0,0,0-18.92914-.15625c-2.66077.78052-3.44348,3.58545-1.72058,5.30176,1.24981,1.248,2.5025,1.0918,3.91058.624a21.72717,21.72717,0,0,1,28.47247,16.84277,163.58646,163.58646,0,0,1,2.34693,17.31372,137.99558,137.99558,0,0,1-.15619,25.42139C103.32018,122.68433,102.7738,126.356,102.09509,130Z"/><path class="cls-2" d="M71.15051,82.94727v-.00245a11.40165,11.40165,0,0,1,0-5.61377,9.11078,9.11078,0,0,1,9.70123-6.55151c4.2229.15552,7.66638,3.27612,8.60217,7.95581A150.64126,150.64126,0,0,1,92.11486,105.25a3.12524,3.12524,0,0,0,3.12885,3.43237c1.879,0,2.97253-1.40356,3.12872-3.27612v-2.80811h.15631c-.3125-4.05542-.4679-8.11181-.93579-12.16528-.47022-4.05566-1.09656-8.11206-1.7229-12.16528A15.95811,15.95811,0,0,0,78.19079,64.5415c-8.13452.93653-14.70685,9.04761-13.454,17.002.62408,4.83593,1.40814,9.66967,1.876,14.50561A103.2327,103.2327,0,0,1,63.66741,130h6.28925C73.633,114.80322,73.87145,99.12134,71.15051,82.94727Z"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/fingerprint12.svg b/polkit-agent/assets/biowaiting/fingerprint12.svg
+new file mode 100644
+index 0000000..2b0c41e
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/fingerprint12.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}</style></defs><g id="文字标注"><g class="cls-1"><path d="M76.78191,140.809a3.00927,3.00927,0,0,0-4.06695,1.87157l-4.2231,10.29593a2.95177,2.95177,0,0,0,2.34692,4.2097c1.87618,0,2.81427-.62348,3.44061-2.02792q2.35322-4.96514,4.2252-10.13749a3.22338,3.22338,0,0,0-1.72268-4.21179Zm71.02957-38.52241a3.08449,3.08449,0,0,0-3.44119-2.96447,3.01947,3.01947,0,0,0-2.81653,3.276c.15559,5.14854-.15616,10.13768-.31232,15.286,0,2.33947,1.09425,3.58775,2.971,3.74391,1.87844,0,3.28729-1.24829,3.28729-3.58851,0-3.43141.4679-7.01916.31174-10.29517a31.74592,31.74592,0,0,0,0-5.46008ZM42.99057,121.93748a3.19812,3.19812,0,0,0-3.91136,2.18407c-.31251.7804-.4679,1.71618-.7825,2.49562a101.9769,101.9769,0,0,1-5.00714,12.01c-1.09424,2.34022.1554,4.67969,2.66078,4.67969,1.40827.15616,2.34636-.77963,2.9727-2.02772a81.29627,81.29627,0,0,0,6.09985-15.4437,3.02989,3.02989,0,0,0-2.03233-3.898Zm51.78526-7.17321a3.1326,3.1326,0,0,0-3.44347,2.80735,161.02757,161.02757,0,0,1-4.84945,22.9279c-1.25192,4.36718-2.81636,8.73532-4.38079,13.10328a2.97748,2.97748,0,0,0,1.25192,3.898,3.04925,3.04925,0,0,0,3.75521-.3125,5.62684,5.62684,0,0,0,1.25041-2.33946,128.60675,128.60675,0,0,0,4.85174-14.97123,161.5315,161.5315,0,0,0,4.37926-21.68171,3.2645,3.2645,0,0,0-2.81483-3.43159ZM11.07465,60.17791a3.312,3.312,0,0,0-2.19078-4.36738c-1.72059-.46865-3.285.62329-3.91137,2.49561A79.568,79.568,0,0,0,2,80.45155a66.61318,66.61318,0,0,0,.31174,7.6432A76.2778,76.2778,0,0,0,5.91135,104.626,2.67954,2.67954,0,0,0,8.57,106.6545c2.661.15558,3.91289-1.87233,3.131-4.68045a70.50518,70.50518,0,0,1-.62634-41.79842ZM85.701,104.15584a75.86247,75.86247,0,0,0-.4679-9.98362,114.4834,114.4834,0,0,0-2.19078-14.6595,3.09173,3.09173,0,0,0-3.59961-2.49581,3.03667,3.03667,0,0,0-2.34618,3.90025,116.66849,116.66849,0,0,1,2.34618,18.24725,106.72223,106.72223,0,0,1-2.97253,31.50478c-.46789,2.02773.31175,3.74391,2.03443,4.2118,1.87694.4679,3.44137-.62405,4.06772-2.80812a109.17988,109.17988,0,0,0,3.12867-27.917Zm32.854-36.96258a3.10567,3.10567,0,0,0-3.91136-2.02773,2.97022,2.97022,0,0,0-2.03235,3.90006c2.50253,9.35957,3.44042,19.02707,4.067,28.85281a155.422,155.422,0,0,1-5.0079,47.25852c-.46789,2.02792.31232,3.90025,2.0352,4.2118a3.1298,3.1298,0,0,0,4.06695-2.65178,158.74245,158.74245,0,0,0,5.31944-41.48688,159.06625,159.06625,0,0,0-2.03234-26.98258,60.29831,60.29831,0,0,0-2.5046-11.07422ZM15.61236,48.32272A67.88326,67.88326,0,0,1,27.18743,31.633C41.11154,16.81945,58.16451,9.0199,78.663,8.39586c2.34712,0,3.75521-1.24828,3.75521-3.276C82.416,3.09194,81.00788,2,78.50459,2A77.9438,77.9438,0,0,0,10.13446,45.04442a5.77164,5.77164,0,0,0-.62406,2.18407,2.72437,2.72437,0,0,0,1.56425,2.80736c1.72077.93654,3.59676.31231,4.53771-1.71543ZM58.79085,85.753c-1.25058-7.48553-.31174-14.19161,4.85155-20.11959a2.80489,2.80489,0,0,0,.62425-1.40368c.15616-1.55983-.15634-2.80812-1.72059-3.43216a2.98066,2.98066,0,0,0-3.91136.93635c-5.63138,6.55146-7.66581,14.19542-6.41389,22.77308a143.77173,143.77173,0,0,1,1.87675,19.65112,84.8888,84.8888,0,0,1-1.87675,19.18379,87.66557,87.66557,0,0,1-7.822,21.36711,4.07666,4.07666,0,0,0-.78269,2.652,2.99416,2.99416,0,0,0,2.34693,2.652c1.72078.31173,2.815-.31251,3.75521-1.87234a90.1349,90.1349,0,0,0,9.6989-29.79089A108.40061,108.40061,0,0,0,58.79314,85.753ZM22.338,94.48834c-1.09424-7.01916-2.03234-13.88368-1.09424-21.05461A59.14015,59.14015,0,0,1,46.11943,31.47686a3.29673,3.29673,0,0,0,1.56444-3.90024c-.78269-2.18389-2.97347-2.65176-5.16425-1.24735A60.84871,60.84871,0,0,0,29.37821,38.49678a64.52309,64.52309,0,0,0-14.7068,39.7707c-.31174,7.6434,1.72288,15.12892,2.19078,22.61463.3125,4.99219.4679,9.98419-1.09425,14.97429-.4679,1.55983-.93809,3.27525-1.40827,4.52334a3.12377,3.12377,0,0,0,3.12886,3.43008c1.87694,0,2.65868-1.09195,3.285-2.652,3.285-8.57766,2.81712-17.6232,1.56443-26.66951ZM157.04249,67.03786Q147.65476,20.2483,102.1299,5.276A45.00768,45.00768,0,0,0,91.80236,3.09194c-1.87827-.15615-3.12867.78039-3.28426,2.4958a2.87607,2.87607,0,0,0,2.50252,3.58833c.62406.15558,1.25041.15558,1.72059.31175a70.72962,70.72962,0,0,1,40.36348,22.45694A69.18273,69.18273,0,0,1,147.0288,54.56015a74.061,74.061,0,0,1,4.69406,23.23944c.15538,2.33946,1.87825,3.7439,4.06675,3.11986,1.56443-.4679,2.34712-1.71618,2.19076-4.212a41.34713,41.34713,0,0,0-.93788-9.6696ZM115.74016,40.83473a46.09794,46.09794,0,0,0-10.16909-7.17379,3.002,3.002,0,0,0-4.22521,1.09194c-.93885,1.55983-.46866,3.276,1.25194,4.368a3.91739,3.91739,0,0,0,1.09424.62422c10.48369,6.3936,17.83547,15.283,21.27894,27.13666,3.12886,11.38806,3.91079,23.08329,4.22309,34.7806a167.16817,167.16817,0,0,1-2.34693,33.06462c-.31174,2.34023.62405,3.7439,2.50252,4.0564,2.0352.31175,3.44347-.78039,3.755-3.11985a162.60561,162.60561,0,0,0,2.34712-27.91913,217.742,217.742,0,0,0-2.65868-34.62312c-2.03462-12.79173-7.51042-23.55117-17.053-32.2865ZM89.76793,53.62646a28.15742,28.15742,0,0,0-18.92915-.15615c-2.66076.78037-3.44345,3.58546-1.72059,5.30163C70.368,60.02,71.62072,59.86389,73.0288,59.396a21.72731,21.72731,0,0,1,28.47247,16.8428,163.579,163.579,0,0,1,2.34692,17.31375A137.99692,137.99692,0,0,1,103.692,118.974a149.65137,149.65137,0,0,1-7.04023,31.97477c-.1554.62405-.4679,1.092-.31155,1.71618a3.009,3.009,0,0,0,2.81483,2.65177,3.073,3.073,0,0,0,3.44271-2.34022,143.91473,143.91473,0,0,0,8.13446-46.946,167.06542,167.06542,0,0,0-2.65866-29.6353c-2.03463-11.07347-7.97832-18.87149-18.30567-22.77079ZM46.431,72.65334C50.03,55.02805,68.6482,42.7065,86.48291,46.294a35.29014,35.29014,0,0,1,20.18241,11.85368,8.8989,8.8989,0,0,0,1.72,1.71617,3.19219,3.19219,0,0,0,3.755-.93579c1.09424-1.40444.93885-2.80812-.31155-4.5243-7.19867-8.733-16.42891-13.87928-27.84841-14.81508-14.55045-1.2481-26.59781,3.90025-35.82653,15.283A38.57474,38.57474,0,0,0,39.861,85.4407c.7804,5.30373,1.72078,10.45208,1.72078,15.75372,0,3.74391,0,7.488-.31175,11.07347a3.00588,3.00588,0,0,0,2.81408,3.276,3.03818,3.03818,0,0,0,3.44346-2.652,100.85173,100.85173,0,0,0-.15616-20.58748c-.47018-4.21179-1.87827-8.26743-1.56443-12.16769a39.31083,39.31083,0,0,1,.62406-7.48342Zm97.78146,20.43132a3.18855,3.18855,0,0,0,2.97269-3.43217V88.56056c-.62425-5.92722-1.2506-11.8531-2.19077-17.77879-2.03234-13.10195-7.19563-24.64312-16.1126-34.31273C115.89556,21.96341,99.46893,14.78945,79.91135,14.63329a64.57055,64.57055,0,0,0-25.3436,5.14835,3.23306,3.23306,0,0,0-2.03462,4.20951,3.15933,3.15933,0,0,0,4.38155,1.56A60.10931,60.10931,0,0,1,85.54483,21.183a57.79887,57.79887,0,0,1,35.04478,15.91007c10.32431,9.82517,16.268,21.835,18.30566,36.02812q1.16919,8.42465,1.876,16.84377c.46789,1.87157,1.72058,3.11966,3.44119,3.11966ZM71.15053,82.94489a11.40154,11.40154,0,0,1,0-5.614,9.11075,9.11075,0,0,1,9.70119-6.55146c4.22292.15558,7.66638,3.2762,8.60218,7.9559a150.63952,150.63952,0,0,1,2.661,26.51468,3.1253,3.1253,0,0,0,3.12886,3.43236c1.879,0,2.97252-1.40367,3.12867-3.276V102.5981h.15635c-.3125-4.05545-.4679-8.11185-.9358-12.16521-.47019-4.05565-1.09654-8.11206-1.72288-12.16541a15.95817,15.95817,0,0,0-17.67931-13.726c-8.13447.93654-14.7068,9.04763-13.45392,17.002.624,4.83584,1.40808,9.6696,1.876,14.50563a100.76542,100.76542,0,0,1-4.6931,39.77,111.03563,111.03563,0,0,1-5.9437,14.03754,3.0595,3.0595,0,0,0,.15616,3.43236,2.8478,2.8478,0,0,0,2.97252,1.24752,3.58665,3.58665,0,0,0,2.815-2.33946C72.715,130.2034,75.21748,107.1224,71.15053,82.94717ZM34.38591,91.52482c-.7825-5.30393-1.565-10.76381-1.09634-16.06545A45.82536,45.82536,0,0,1,49.87464,44.26631a45.38952,45.38952,0,0,1,28.16-10.76171,44.31362,44.31362,0,0,1,12.82986,1.24828,3.86111,3.86111,0,0,0,1.87675.15616,2.85951,2.85951,0,0,0,2.50252-2.80814,3.03932,3.03932,0,0,0-2.34694-3.276,45.95556,45.95556,0,0,0-13.14161-1.55984,34.70559,34.70559,0,0,0-9.69889.93577C54.25524,31.16513,42.20807,39.74505,33.91516,53.62436a50.635,50.635,0,0,0-6.56928,32.59653c.4679,4.36814,1.40808,8.57995,1.71983,12.94809.62405,10.75944-.78175,21.20867-5.6312,30.87827a3.03318,3.03318,0,0,0-.47018,2.02771,2.8529,2.8529,0,0,0,2.65867,2.652,3.38107,3.38107,0,0,0,3.44271-2.02772c6.57-12.9458,7.51022-26.98125,5.3202-41.17439Zm0,0"/></g><path class="cls-2" d="M14.35967,120.37964a3.12376,3.12376,0,0,0,3.12885,3.43017c1.87695,0,2.65869-1.092,3.285-2.6521,3.285-8.57763,2.81714-17.623,1.56446-26.66943-1.09424-7.019-2.03235-13.88354-1.09424-21.05469A59.14042,59.14042,0,0,1,46.11944,31.47681a3.29665,3.29665,0,0,0,1.56445-3.90015c-.78271-2.18408-2.97351-2.65186-5.16424-1.24731A60.84242,60.84242,0,0,0,29.37823,38.49683,64.52224,64.52224,0,0,0,14.67144,78.26758c-.31177,7.64331,1.72284,15.1289,2.19073,22.6145.3125,4.99219.4679,9.98413-1.09423,14.97437C15.3,117.41626,14.82983,119.13159,14.35967,120.37964Z"/><path class="cls-2" d="M49.87463,44.26636a45.3888,45.3888,0,0,1,28.16-10.76172,44.30565,44.30565,0,0,1,12.82983,1.24829,3.86367,3.86367,0,0,0,1.87677.156,2.85936,2.85936,0,0,0,2.50251-2.80811A3.0391,3.0391,0,0,0,92.89678,28.825a45.94687,45.94687,0,0,0-13.1416-1.55981,34.707,34.707,0,0,0-9.69891.93554C54.25524,31.165,42.20806,39.74512,33.91515,53.62427A50.63525,50.63525,0,0,0,27.34588,86.221c.46789,4.36792,1.40808,8.57983,1.71985,12.948.624,10.75952-.78174,21.20874-5.63123,30.87841a3.0328,3.0328,0,0,0-.47015,2.02759,2.85307,2.85307,0,0,0,2.65863,2.6521,3.38147,3.38147,0,0,0,3.44275-2.02783c6.57-12.9458,7.51019-26.9812,5.32019-41.17432-.78253-5.304-1.565-10.76391-1.09638-16.06543A45.82521,45.82521,0,0,1,49.87463,44.26636Z"/><path class="cls-2" d="M78.50457,2A77.94379,77.94379,0,0,0,10.13445,45.04443a5.77193,5.77193,0,0,0-.624,2.18409,2.72441,2.72441,0,0,0,1.56421,2.80737c1.72076.93652,3.5968.31225,4.53772-1.71558v.00244A67.88222,67.88222,0,0,1,27.18743,31.63306C41.11156,16.81934,58.16448,9.02,78.663,8.39575c2.34717,0,3.75525-1.24829,3.75525-3.27588C82.416,3.0918,81.00787,2,78.50457,2Z"/><path class="cls-2" d="M147.81145,102.28418v.00244a3.08448,3.08448,0,0,0-3.44116-2.9646,3.01965,3.01965,0,0,0-2.81653,3.27612c.15558,5.14844-.15618,10.1377-.31231,15.28589,0,2.3396,1.09424,3.58789,2.971,3.7439,1.87841,0,3.28729-1.24829,3.28729-3.58838,0-3.4314.46789-7.01929.3117-10.29517A31.74131,31.74131,0,0,0,147.81145,102.28418Z"/><path class="cls-2" d="M4.97253,58.30615A79.56579,79.56579,0,0,0,2,80.45166a66.6041,66.6041,0,0,0,.31177,7.64307A76.27289,76.27289,0,0,0,5.91137,104.626a2.67956,2.67956,0,0,0,2.65869,2.02856c2.66095.15552,3.91284-1.87231,3.13092-4.68042a70.50594,70.50594,0,0,1-.62634-41.79858V60.178A3.312,3.312,0,0,0,8.8839,55.81055C7.16326,55.3418,5.59887,56.43384,4.97253,58.30615Z"/><path class="cls-2" d="M129.34966,138.7832c2.03522.31177,3.44348-.78027,3.755-3.11963a162.6075,162.6075,0,0,0,2.34717-27.91919,217.74443,217.74443,0,0,0-2.6587-34.62329c-2.0346-12.7915-7.51043-23.551-17.053-32.28637A46.09888,46.09888,0,0,0,105.571,33.66089a3.002,3.002,0,0,0-4.22516,1.092c-.93884,1.55981-.46869,3.27588,1.25189,4.36792a3.92179,3.92179,0,0,0,1.09424.62427c10.4837,6.39355,17.83551,15.283,21.279,27.13672,3.12885,11.38794,3.91077,23.083,4.22308,34.78051a167.16955,167.16955,0,0,1-2.34692,33.0647C126.53539,137.06714,127.47118,138.4707,129.34966,138.7832Z"/><path class="cls-2" d="M128.88177,36.469C115.89556,21.96338,99.46893,14.78955,79.91137,14.6333a64.56588,64.56588,0,0,0-25.34363,5.14844,3.233,3.233,0,0,0-2.03461,4.20947,3.15955,3.15955,0,0,0,4.38154,1.56006,60.109,60.109,0,0,1,28.63018-4.36816A57.799,57.799,0,0,1,120.58959,37.093c10.32434,9.82519,16.268,21.8352,18.30567,36.02807q1.16922,8.42505,1.876,16.84375c.4679,1.87159,1.72058,3.11988,3.44123,3.11988a3.18857,3.18857,0,0,0,2.97265-3.43238V88.56055c-.6242-5.92725-1.25055-11.853-2.19073-17.77881C142.962,57.67969,137.79876,46.13867,128.88177,36.469Z"/><path class="cls-2" d="M46.431,72.65332C50.03,55.02808,68.64819,42.70654,86.4829,46.294a35.29073,35.29073,0,0,1,20.18244,11.85376,8.89448,8.89448,0,0,0,1.72,1.71606,3.1923,3.1923,0,0,0,3.75506-.93555c1.09424-1.40454.93885-2.80835-.31158-4.52441-7.19867-8.73316-16.4289-13.8794-27.84839-14.81519-14.55048-1.248-26.59784,3.90039-35.82654,15.283A38.57484,38.57484,0,0,0,39.861,85.44067c.7804,5.30371,1.72077,10.45215,1.72077,15.75367,0,3.74389,0,7.488-.31171,11.07348a3.006,3.006,0,0,0,2.814,3.27613,3.03829,3.03829,0,0,0,3.44348-2.6521,100.85037,100.85037,0,0,0-.15613-20.58741c-.47021-4.21167-1.87829-8.26733-1.56445-12.16772A39.31056,39.31056,0,0,1,46.431,72.65332Z"/><path class="cls-2" d="M119.35662,140a154.2285,154.2285,0,0,0,3.73535-34.75,159.06937,159.06937,0,0,0-2.03235-26.98242A60.29143,60.29143,0,0,0,118.555,67.19336a3.10573,3.10573,0,0,0-3.91138-2.02783,2.97009,2.97009,0,0,0-2.03229,3.8999c2.5025,9.35986,3.44037,19.02734,4.067,28.853A154.445,154.445,0,0,1,112.9295,140Z"/><path class="cls-2" d="M99.86944,140h6.57776a139.82764,139.82764,0,0,0,4.285-33.96948A167.06829,167.06829,0,0,0,108.0736,76.395c-2.03461-11.07324-7.97833-18.87134-18.30566-22.77075v.00219a28.15763,28.15763,0,0,0-18.92914-.15625c-2.66077.78052-3.44348,3.58545-1.72058,5.30176,1.24981,1.248,2.5025,1.0918,3.91058.624a21.72717,21.72717,0,0,1,28.47247,16.84277,163.58646,163.58646,0,0,1,2.34693,17.31372,137.99558,137.99558,0,0,1-.15619,25.42139A139.47424,139.47424,0,0,1,99.86944,140Z"/><path class="cls-2" d="M157.04247,67.03784q-9.38772-46.78967-54.91259-61.762A45.02188,45.02188,0,0,0,91.80236,3.0918c-1.8783-.156-3.12866.78051-3.28424,2.49585A2.8761,2.8761,0,0,0,91.02062,9.176c.62409.15551,1.25043.15551,1.72058.31176a70.72924,70.72924,0,0,1,40.36347,22.457A69.1805,69.1805,0,0,1,147.0288,54.56006a74.06052,74.06052,0,0,1,4.694,23.2395c.1554,2.3396,1.8783,3.7439,4.06677,3.11987,1.56446-.46777,2.34711-1.71631,2.1908-4.21191A41.34673,41.34673,0,0,0,157.04247,67.03784Z"/><path class="cls-2" d="M45.02288,125.83545a3.02982,3.02982,0,0,0-2.03229-3.89795,3.19793,3.19793,0,0,0-3.91137,2.18408c-.3125.78028-.4679,1.71607-.78254,2.49561a101.972,101.972,0,0,1-5.00714,12.01A4.05833,4.05833,0,0,0,32.93041,140h6.62073A78.5383,78.5383,0,0,0,45.02288,125.83545Z"/><path class="cls-2" d="M93.21142,139.87744a161.52283,161.52283,0,0,0,4.37921-21.68164,3.26475,3.26475,0,0,0-2.81482-3.43164,3.13267,3.13267,0,0,0-3.44342,2.80737A161.54006,161.54006,0,0,1,86.62359,140h6.55493C93.18865,139.95874,93.20135,139.919,93.21142,139.87744Z"/><path class="cls-2" d="M59.41723,118.34961a108.40174,108.40174,0,0,0-.62409-32.59668h-.00232c-1.25054-7.48535-.3117-14.19141,4.85157-20.11963a2.80362,2.80362,0,0,0,.62426-1.40356c.15613-1.55982-.15637-2.80811-1.72058-3.43213a2.98078,2.98078,0,0,0-3.91137.93628c-5.63141,6.55151-7.66584,14.19531-6.41388,22.77319a143.776,143.776,0,0,1,1.87677,19.65112,84.89,84.89,0,0,1-1.87677,19.1836A80.92519,80.92519,0,0,1,46.636,140h6.86078A85.938,85.938,0,0,0,59.41723,118.34961Z"/><path class="cls-2" d="M71.15051,82.94727v-.00245a11.40165,11.40165,0,0,1,0-5.61377,9.11078,9.11078,0,0,1,9.70123-6.55151c4.2229.15552,7.66638,3.27612,8.60217,7.95581A150.64126,150.64126,0,0,1,92.11486,105.25a3.12524,3.12524,0,0,0,3.12885,3.43237c1.879,0,2.97253-1.40356,3.12872-3.27612v-2.80811h.15631c-.3125-4.05542-.4679-8.11181-.93579-12.16528-.47022-4.05566-1.09656-8.11206-1.7229-12.16528A15.95811,15.95811,0,0,0,78.19079,64.5415c-8.13452.93653-14.70685,9.04761-13.454,17.002.62408,4.83593,1.40814,9.66967,1.876,14.50561a100.7663,100.7663,0,0,1-4.69312,39.77Q61.168,137.93139,60.36217,140H67.022C73.40533,121.70972,74.47247,102.69385,71.15051,82.94727Z"/><path class="cls-2" d="M85.23309,94.17212a114.49913,114.49913,0,0,0-2.1908-14.65942,3.09175,3.09175,0,0,0-3.59961-2.49585A3.03673,3.03673,0,0,0,77.09649,80.917a116.673,116.673,0,0,1,2.34619,18.24732,106.72018,106.72018,0,0,1-2.97253,31.50488c-.4679,2.02759.31176,3.7439,2.03442,4.21167,1.87695.468,3.44141-.624,4.06775-2.80811a109.18045,109.18045,0,0,0,3.12866-27.917A75.85951,75.85951,0,0,0,85.23309,94.17212Z"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/fingerprint13.svg b/polkit-agent/assets/biowaiting/fingerprint13.svg
+new file mode 100644
+index 0000000..9f37f06
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/fingerprint13.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}</style></defs><g id="文字标注"><g class="cls-1"><path d="M76.78191,140.809a3.00927,3.00927,0,0,0-4.06695,1.87157l-4.2231,10.29593a2.95177,2.95177,0,0,0,2.34692,4.2097c1.87618,0,2.81427-.62348,3.44061-2.02792q2.35322-4.96514,4.2252-10.13749a3.22338,3.22338,0,0,0-1.72268-4.21179Zm71.02957-38.52241a3.08449,3.08449,0,0,0-3.44119-2.96447,3.01947,3.01947,0,0,0-2.81653,3.276c.15559,5.14854-.15616,10.13768-.31232,15.286,0,2.33947,1.09425,3.58775,2.971,3.74391,1.87844,0,3.28729-1.24829,3.28729-3.58851,0-3.43141.4679-7.01916.31174-10.29517a31.74592,31.74592,0,0,0,0-5.46008ZM42.99057,121.93748a3.19812,3.19812,0,0,0-3.91136,2.18407c-.31251.7804-.4679,1.71618-.7825,2.49562a101.9769,101.9769,0,0,1-5.00714,12.01c-1.09424,2.34022.1554,4.67969,2.66078,4.67969,1.40827.15616,2.34636-.77963,2.9727-2.02772a81.29627,81.29627,0,0,0,6.09985-15.4437,3.02989,3.02989,0,0,0-2.03233-3.898Zm51.78526-7.17321a3.1326,3.1326,0,0,0-3.44347,2.80735,161.02757,161.02757,0,0,1-4.84945,22.9279c-1.25192,4.36718-2.81636,8.73532-4.38079,13.10328a2.97748,2.97748,0,0,0,1.25192,3.898,3.04925,3.04925,0,0,0,3.75521-.3125,5.62684,5.62684,0,0,0,1.25041-2.33946,128.60675,128.60675,0,0,0,4.85174-14.97123,161.5315,161.5315,0,0,0,4.37926-21.68171,3.2645,3.2645,0,0,0-2.81483-3.43159ZM11.07465,60.17791a3.312,3.312,0,0,0-2.19078-4.36738c-1.72059-.46865-3.285.62329-3.91137,2.49561A79.568,79.568,0,0,0,2,80.45155a66.61318,66.61318,0,0,0,.31174,7.6432A76.2778,76.2778,0,0,0,5.91135,104.626,2.67954,2.67954,0,0,0,8.57,106.6545c2.661.15558,3.91289-1.87233,3.131-4.68045a70.50518,70.50518,0,0,1-.62634-41.79842ZM85.701,104.15584a75.86247,75.86247,0,0,0-.4679-9.98362,114.4834,114.4834,0,0,0-2.19078-14.6595,3.09173,3.09173,0,0,0-3.59961-2.49581,3.03667,3.03667,0,0,0-2.34618,3.90025,116.66849,116.66849,0,0,1,2.34618,18.24725,106.72223,106.72223,0,0,1-2.97253,31.50478c-.46789,2.02773.31175,3.74391,2.03443,4.2118,1.87694.4679,3.44137-.62405,4.06772-2.80812a109.17988,109.17988,0,0,0,3.12867-27.917Zm32.854-36.96258a3.10567,3.10567,0,0,0-3.91136-2.02773,2.97022,2.97022,0,0,0-2.03235,3.90006c2.50253,9.35957,3.44042,19.02707,4.067,28.85281a155.422,155.422,0,0,1-5.0079,47.25852c-.46789,2.02792.31232,3.90025,2.0352,4.2118a3.1298,3.1298,0,0,0,4.06695-2.65178,158.74245,158.74245,0,0,0,5.31944-41.48688,159.06625,159.06625,0,0,0-2.03234-26.98258,60.29831,60.29831,0,0,0-2.5046-11.07422ZM15.61236,48.32272A67.88326,67.88326,0,0,1,27.18743,31.633C41.11154,16.81945,58.16451,9.0199,78.663,8.39586c2.34712,0,3.75521-1.24828,3.75521-3.276C82.416,3.09194,81.00788,2,78.50459,2A77.9438,77.9438,0,0,0,10.13446,45.04442a5.77164,5.77164,0,0,0-.62406,2.18407,2.72437,2.72437,0,0,0,1.56425,2.80736c1.72077.93654,3.59676.31231,4.53771-1.71543ZM58.79085,85.753c-1.25058-7.48553-.31174-14.19161,4.85155-20.11959a2.80489,2.80489,0,0,0,.62425-1.40368c.15616-1.55983-.15634-2.80812-1.72059-3.43216a2.98066,2.98066,0,0,0-3.91136.93635c-5.63138,6.55146-7.66581,14.19542-6.41389,22.77308a143.77173,143.77173,0,0,1,1.87675,19.65112,84.8888,84.8888,0,0,1-1.87675,19.18379,87.66557,87.66557,0,0,1-7.822,21.36711,4.07666,4.07666,0,0,0-.78269,2.652,2.99416,2.99416,0,0,0,2.34693,2.652c1.72078.31173,2.815-.31251,3.75521-1.87234a90.1349,90.1349,0,0,0,9.6989-29.79089A108.40061,108.40061,0,0,0,58.79314,85.753ZM22.338,94.48834c-1.09424-7.01916-2.03234-13.88368-1.09424-21.05461A59.14015,59.14015,0,0,1,46.11943,31.47686a3.29673,3.29673,0,0,0,1.56444-3.90024c-.78269-2.18389-2.97347-2.65176-5.16425-1.24735A60.84871,60.84871,0,0,0,29.37821,38.49678a64.52309,64.52309,0,0,0-14.7068,39.7707c-.31174,7.6434,1.72288,15.12892,2.19078,22.61463.3125,4.99219.4679,9.98419-1.09425,14.97429-.4679,1.55983-.93809,3.27525-1.40827,4.52334a3.12377,3.12377,0,0,0,3.12886,3.43008c1.87694,0,2.65868-1.09195,3.285-2.652,3.285-8.57766,2.81712-17.6232,1.56443-26.66951ZM157.04249,67.03786Q147.65476,20.2483,102.1299,5.276A45.00768,45.00768,0,0,0,91.80236,3.09194c-1.87827-.15615-3.12867.78039-3.28426,2.4958a2.87607,2.87607,0,0,0,2.50252,3.58833c.62406.15558,1.25041.15558,1.72059.31175a70.72962,70.72962,0,0,1,40.36348,22.45694A69.18273,69.18273,0,0,1,147.0288,54.56015a74.061,74.061,0,0,1,4.69406,23.23944c.15538,2.33946,1.87825,3.7439,4.06675,3.11986,1.56443-.4679,2.34712-1.71618,2.19076-4.212a41.34713,41.34713,0,0,0-.93788-9.6696ZM115.74016,40.83473a46.09794,46.09794,0,0,0-10.16909-7.17379,3.002,3.002,0,0,0-4.22521,1.09194c-.93885,1.55983-.46866,3.276,1.25194,4.368a3.91739,3.91739,0,0,0,1.09424.62422c10.48369,6.3936,17.83547,15.283,21.27894,27.13666,3.12886,11.38806,3.91079,23.08329,4.22309,34.7806a167.16817,167.16817,0,0,1-2.34693,33.06462c-.31174,2.34023.62405,3.7439,2.50252,4.0564,2.0352.31175,3.44347-.78039,3.755-3.11985a162.60561,162.60561,0,0,0,2.34712-27.91913,217.742,217.742,0,0,0-2.65868-34.62312c-2.03462-12.79173-7.51042-23.55117-17.053-32.2865ZM89.76793,53.62646a28.15742,28.15742,0,0,0-18.92915-.15615c-2.66076.78037-3.44345,3.58546-1.72059,5.30163C70.368,60.02,71.62072,59.86389,73.0288,59.396a21.72731,21.72731,0,0,1,28.47247,16.8428,163.579,163.579,0,0,1,2.34692,17.31375A137.99692,137.99692,0,0,1,103.692,118.974a149.65137,149.65137,0,0,1-7.04023,31.97477c-.1554.62405-.4679,1.092-.31155,1.71618a3.009,3.009,0,0,0,2.81483,2.65177,3.073,3.073,0,0,0,3.44271-2.34022,143.91473,143.91473,0,0,0,8.13446-46.946,167.06542,167.06542,0,0,0-2.65866-29.6353c-2.03463-11.07347-7.97832-18.87149-18.30567-22.77079ZM46.431,72.65334C50.03,55.02805,68.6482,42.7065,86.48291,46.294a35.29014,35.29014,0,0,1,20.18241,11.85368,8.8989,8.8989,0,0,0,1.72,1.71617,3.19219,3.19219,0,0,0,3.755-.93579c1.09424-1.40444.93885-2.80812-.31155-4.5243-7.19867-8.733-16.42891-13.87928-27.84841-14.81508-14.55045-1.2481-26.59781,3.90025-35.82653,15.283A38.57474,38.57474,0,0,0,39.861,85.4407c.7804,5.30373,1.72078,10.45208,1.72078,15.75372,0,3.74391,0,7.488-.31175,11.07347a3.00588,3.00588,0,0,0,2.81408,3.276,3.03818,3.03818,0,0,0,3.44346-2.652,100.85173,100.85173,0,0,0-.15616-20.58748c-.47018-4.21179-1.87827-8.26743-1.56443-12.16769a39.31083,39.31083,0,0,1,.62406-7.48342Zm97.78146,20.43132a3.18855,3.18855,0,0,0,2.97269-3.43217V88.56056c-.62425-5.92722-1.2506-11.8531-2.19077-17.77879-2.03234-13.10195-7.19563-24.64312-16.1126-34.31273C115.89556,21.96341,99.46893,14.78945,79.91135,14.63329a64.57055,64.57055,0,0,0-25.3436,5.14835,3.23306,3.23306,0,0,0-2.03462,4.20951,3.15933,3.15933,0,0,0,4.38155,1.56A60.10931,60.10931,0,0,1,85.54483,21.183a57.79887,57.79887,0,0,1,35.04478,15.91007c10.32431,9.82517,16.268,21.835,18.30566,36.02812q1.16919,8.42465,1.876,16.84377c.46789,1.87157,1.72058,3.11966,3.44119,3.11966ZM71.15053,82.94489a11.40154,11.40154,0,0,1,0-5.614,9.11075,9.11075,0,0,1,9.70119-6.55146c4.22292.15558,7.66638,3.2762,8.60218,7.9559a150.63952,150.63952,0,0,1,2.661,26.51468,3.1253,3.1253,0,0,0,3.12886,3.43236c1.879,0,2.97252-1.40367,3.12867-3.276V102.5981h.15635c-.3125-4.05545-.4679-8.11185-.9358-12.16521-.47019-4.05565-1.09654-8.11206-1.72288-12.16541a15.95817,15.95817,0,0,0-17.67931-13.726c-8.13447.93654-14.7068,9.04763-13.45392,17.002.624,4.83584,1.40808,9.6696,1.876,14.50563a100.76542,100.76542,0,0,1-4.6931,39.77,111.03563,111.03563,0,0,1-5.9437,14.03754,3.0595,3.0595,0,0,0,.15616,3.43236,2.8478,2.8478,0,0,0,2.97252,1.24752,3.58665,3.58665,0,0,0,2.815-2.33946C72.715,130.2034,75.21748,107.1224,71.15053,82.94717ZM34.38591,91.52482c-.7825-5.30393-1.565-10.76381-1.09634-16.06545A45.82536,45.82536,0,0,1,49.87464,44.26631a45.38952,45.38952,0,0,1,28.16-10.76171,44.31362,44.31362,0,0,1,12.82986,1.24828,3.86111,3.86111,0,0,0,1.87675.15616,2.85951,2.85951,0,0,0,2.50252-2.80814,3.03932,3.03932,0,0,0-2.34694-3.276,45.95556,45.95556,0,0,0-13.14161-1.55984,34.70559,34.70559,0,0,0-9.69889.93577C54.25524,31.16513,42.20807,39.74505,33.91516,53.62436a50.635,50.635,0,0,0-6.56928,32.59653c.4679,4.36814,1.40808,8.57995,1.71983,12.94809.62405,10.75944-.78175,21.20867-5.6312,30.87827a3.03318,3.03318,0,0,0-.47018,2.02771,2.8529,2.8529,0,0,0,2.65867,2.652,3.38107,3.38107,0,0,0,3.44271-2.02772c6.57-12.9458,7.51022-26.98125,5.3202-41.17439Zm0,0"/></g><path class="cls-2" d="M25.623,134.72705a3.38147,3.38147,0,0,0,3.44275-2.02783c6.57-12.9458,7.51019-26.9812,5.32019-41.17432-.78253-5.304-1.565-10.76391-1.09638-16.06543A45.82521,45.82521,0,0,1,49.87463,44.26636a45.3888,45.3888,0,0,1,28.16-10.76172,44.30565,44.30565,0,0,1,12.82983,1.24829,3.86367,3.86367,0,0,0,1.87677.156,2.85936,2.85936,0,0,0,2.50251-2.80811A3.0391,3.0391,0,0,0,92.89678,28.825a45.94687,45.94687,0,0,0-13.1416-1.55981,34.707,34.707,0,0,0-9.69891.93554C54.25524,31.165,42.20806,39.74512,33.91515,53.62427A50.63525,50.63525,0,0,0,27.34588,86.221c.46789,4.36792,1.40808,8.57983,1.71985,12.948.624,10.75952-.78174,21.20874-5.63123,30.87841a3.0328,3.0328,0,0,0-.47015,2.02759A2.85307,2.85307,0,0,0,25.623,134.72705Z"/><path class="cls-2" d="M113.70556,149.38867a3.12978,3.12978,0,0,0,4.06695-2.65185A158.74374,158.74374,0,0,0,123.092,105.25a159.06937,159.06937,0,0,0-2.03235-26.98242A60.29143,60.29143,0,0,0,118.555,67.19336a3.10573,3.10573,0,0,0-3.91138-2.02783,2.97009,2.97009,0,0,0-2.03229,3.8999c2.5025,9.35986,3.44037,19.02734,4.067,28.853a155.41963,155.41963,0,0,1-5.00794,47.2583C111.20245,147.20483,111.98266,149.07715,113.70556,149.38867Z"/><path class="cls-2" d="M35.95037,143.30688c1.40826.156,2.34631-.77954,2.97266-2.02783a81.2963,81.2963,0,0,0,6.09985-15.4436,3.02982,3.02982,0,0,0-2.03229-3.89795,3.19793,3.19793,0,0,0-3.91137,2.18408c-.3125.78028-.4679,1.71607-.78254,2.49561a101.972,101.972,0,0,1-5.00714,12.01C32.1953,140.96729,33.445,143.30688,35.95037,143.30688Z"/><path class="cls-2" d="M46.431,72.65332C50.03,55.02808,68.64819,42.70654,86.4829,46.294a35.29073,35.29073,0,0,1,20.18244,11.85376,8.89448,8.89448,0,0,0,1.72,1.71606,3.1923,3.1923,0,0,0,3.75506-.93555c1.09424-1.40454.93885-2.80835-.31158-4.52441-7.19867-8.73316-16.4289-13.8794-27.84839-14.81519-14.55048-1.248-26.59784,3.90039-35.82654,15.283A38.57484,38.57484,0,0,0,39.861,85.44067c.7804,5.30371,1.72077,10.45215,1.72077,15.75367,0,3.74389,0,7.488-.31171,11.07348a3.006,3.006,0,0,0,2.814,3.27613,3.03829,3.03829,0,0,0,3.44348-2.6521,100.85037,100.85037,0,0,0-.15613-20.58741c-.47021-4.21167-1.87829-8.26733-1.56445-12.16772A39.31056,39.31056,0,0,1,46.431,72.65332Z"/><path class="cls-2" d="M14.35967,120.37964a3.12376,3.12376,0,0,0,3.12885,3.43017c1.87695,0,2.65869-1.092,3.285-2.6521,3.285-8.57763,2.81714-17.623,1.56446-26.66943-1.09424-7.019-2.03235-13.88354-1.09424-21.05469A59.14042,59.14042,0,0,1,46.11944,31.47681a3.29665,3.29665,0,0,0,1.56445-3.90015c-.78271-2.18408-2.97351-2.65186-5.16424-1.24731A60.84242,60.84242,0,0,0,29.37823,38.49683,64.52224,64.52224,0,0,0,14.67144,78.26758c-.31177,7.64331,1.72284,15.1289,2.19073,22.6145.3125,4.99219.4679,9.98413-1.09423,14.97437C15.3,117.41626,14.82983,119.13159,14.35967,120.37964Z"/><path class="cls-2" d="M147.81145,102.28418v.00244a3.08448,3.08448,0,0,0-3.44116-2.9646,3.01965,3.01965,0,0,0-2.81653,3.27612c.15558,5.14844-.15618,10.1377-.31231,15.28589,0,2.3396,1.09424,3.58789,2.971,3.7439,1.87841,0,3.28729-1.24829,3.28729-3.58838,0-3.4314.46789-7.01929.3117-10.29517A31.74131,31.74131,0,0,0,147.81145,102.28418Z"/><path class="cls-2" d="M129.34966,138.7832c2.03522.31177,3.44348-.78027,3.755-3.11963a162.6075,162.6075,0,0,0,2.34717-27.91919,217.74443,217.74443,0,0,0-2.6587-34.62329c-2.0346-12.7915-7.51043-23.551-17.053-32.28637A46.09888,46.09888,0,0,0,105.571,33.66089a3.002,3.002,0,0,0-4.22516,1.092c-.93884,1.55981-.46869,3.27588,1.25189,4.36792a3.92179,3.92179,0,0,0,1.09424.62427c10.4837,6.39355,17.83551,15.283,21.279,27.13672,3.12885,11.38794,3.91077,23.083,4.22308,34.78051a167.16955,167.16955,0,0,1-2.34692,33.0647C126.53539,137.06714,127.47118,138.4707,129.34966,138.7832Z"/><path class="cls-2" d="M128.88177,36.469C115.89556,21.96338,99.46893,14.78955,79.91137,14.6333a64.56588,64.56588,0,0,0-25.34363,5.14844,3.233,3.233,0,0,0-2.03461,4.20947,3.15955,3.15955,0,0,0,4.38154,1.56006,60.109,60.109,0,0,1,28.63018-4.36816A57.799,57.799,0,0,1,120.58959,37.093c10.32434,9.82519,16.268,21.8352,18.30567,36.02807q1.16922,8.42505,1.876,16.84375c.4679,1.87159,1.72058,3.11988,3.44123,3.11988a3.18857,3.18857,0,0,0,2.97265-3.43238V88.56055c-.6242-5.92725-1.25055-11.853-2.19073-17.77881C142.962,57.67969,137.79876,46.13867,128.88177,36.469Z"/><path class="cls-2" d="M157.04247,67.03784q-9.38772-46.78967-54.91259-61.762A45.02188,45.02188,0,0,0,91.80236,3.0918c-1.8783-.156-3.12866.78051-3.28424,2.49585A2.8761,2.8761,0,0,0,91.02062,9.176c.62409.15551,1.25043.15551,1.72058.31176a70.72924,70.72924,0,0,1,40.36347,22.457A69.1805,69.1805,0,0,1,147.0288,54.56006a74.06052,74.06052,0,0,1,4.694,23.2395c.1554,2.3396,1.8783,3.7439,4.06677,3.11987,1.56446-.46777,2.34711-1.71631,2.1908-4.21191A41.34673,41.34673,0,0,0,157.04247,67.03784Z"/><path class="cls-2" d="M78.50457,145.02075a3.22325,3.22325,0,0,0-1.72266-4.21167,3.00909,3.00909,0,0,0-4.06695,1.87158L69.7127,150h6.85645Q77.59344,147.53321,78.50457,145.02075Z"/><path class="cls-2" d="M93.21142,139.87744a161.52283,161.52283,0,0,0,4.37921-21.68164,3.26475,3.26475,0,0,0-2.81482-3.43164,3.13267,3.13267,0,0,0-3.44342,2.80737,161.03368,161.03368,0,0,1-4.84949,22.928C85.57519,143.666,84.5014,146.833,83.38421,150h6.7409A104.796,104.796,0,0,0,93.21142,139.87744Z"/><path class="cls-2" d="M110.73223,106.03052A167.06829,167.06829,0,0,0,108.0736,76.395c-2.03461-11.07324-7.97833-18.87134-18.30566-22.77075v.00219a28.15763,28.15763,0,0,0-18.92914-.15625c-2.66077.78052-3.44348,3.58545-1.72058,5.30176,1.24981,1.248,2.5025,1.0918,3.91058.624a21.72717,21.72717,0,0,1,28.47247,16.84277,163.58646,163.58646,0,0,1,2.34693,17.31372,137.99558,137.99558,0,0,1-.15619,25.42139A148.68041,148.68041,0,0,1,96.95287,150H103.59A142.91971,142.91971,0,0,0,110.73223,106.03052Z"/><path class="cls-2" d="M85.23309,94.17212a114.49913,114.49913,0,0,0-2.1908-14.65942,3.09175,3.09175,0,0,0-3.59961-2.49585A3.03673,3.03673,0,0,0,77.09649,80.917a116.673,116.673,0,0,1,2.34619,18.24732,106.72018,106.72018,0,0,1-2.97253,31.50488c-.4679,2.02759.31176,3.7439,2.03442,4.21167,1.87695.468,3.44141-.624,4.06775-2.80811a109.18045,109.18045,0,0,0,3.12866-27.917A75.85951,75.85951,0,0,0,85.23309,94.17212Z"/><path class="cls-2" d="M78.50457,2A77.94379,77.94379,0,0,0,10.13445,45.04443a5.77193,5.77193,0,0,0-.624,2.18409,2.72441,2.72441,0,0,0,1.56421,2.80737c1.72076.93652,3.5968.31225,4.53772-1.71558v.00244A67.88222,67.88222,0,0,1,27.18743,31.63306C41.11156,16.81934,58.16448,9.02,78.663,8.39575c2.34717,0,3.75525-1.24829,3.75525-3.27588C82.416,3.0918,81.00787,2,78.50457,2Z"/><path class="cls-2" d="M4.97253,58.30615A79.56579,79.56579,0,0,0,2,80.45166a66.6041,66.6041,0,0,0,.31177,7.64307A76.27289,76.27289,0,0,0,5.91137,104.626a2.67956,2.67956,0,0,0,2.65869,2.02856c2.66095.15552,3.91284-1.87231,3.13092-4.68042a70.50594,70.50594,0,0,1-.62634-41.79858V60.178A3.312,3.312,0,0,0,8.8839,55.81055C7.16326,55.3418,5.59887,56.43384,4.97253,58.30615Z"/><path class="cls-2" d="M49.71832,148.14062a90.13545,90.13545,0,0,0,9.69891-29.791,108.40174,108.40174,0,0,0-.62409-32.59668h-.00232c-1.25054-7.48535-.3117-14.19141,4.85157-20.11963a2.80362,2.80362,0,0,0,.62426-1.40356c.15613-1.55982-.15637-2.80811-1.72058-3.43213a2.98078,2.98078,0,0,0-3.91137.93628c-5.63141,6.55151-7.66584,14.19531-6.41388,22.77319a143.776,143.776,0,0,1,1.87677,19.65112,84.89,84.89,0,0,1-1.87677,19.1836,87.66422,87.66422,0,0,1-7.822,21.36718,4.07726,4.07726,0,0,0-.78272,2.65186A2.99783,2.99783,0,0,0,45.91943,150h1.58313A3.59038,3.59038,0,0,0,49.71832,148.14062Z"/><path class="cls-2" d="M71.15051,82.94727v-.00245a11.40165,11.40165,0,0,1,0-5.61377,9.11078,9.11078,0,0,1,9.70123-6.55151c4.2229.15552,7.66638,3.27612,8.60217,7.95581A150.64126,150.64126,0,0,1,92.11486,105.25a3.12524,3.12524,0,0,0,3.12885,3.43237c1.879,0,2.97253-1.40356,3.12872-3.27612v-2.80811h.15631c-.3125-4.05542-.4679-8.11181-.93579-12.16528-.47022-4.05566-1.09656-8.11206-1.7229-12.16528A15.95811,15.95811,0,0,0,78.19079,64.5415c-8.13452.93653-14.70685,9.04761-13.454,17.002.62408,4.83593,1.40814,9.66967,1.876,14.50561a100.7663,100.7663,0,0,1-4.69312,39.77A111.03121,111.03121,0,0,1,55.976,149.85645c-.027.04711-.046.09594-.07068.14355h7.03808C72.84978,128.6665,75.08245,106.31982,71.15051,82.94727Z"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/fingerprint14.svg b/polkit-agent/assets/biowaiting/fingerprint14.svg
+new file mode 100644
+index 0000000..c3c6675
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/fingerprint14.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160"><defs><style>.cls-1{fill:#3790fa;}</style></defs><g id="文字标注"><path class="cls-1" d="M76.78191,140.809a3.00926,3.00926,0,0,0-4.06694,1.87157l-4.22311,10.29593a2.95177,2.95177,0,0,0,2.34693,4.2097c1.87618,0,2.81427-.62348,3.44061-2.02792q2.35321-4.96514,4.2252-10.13749a3.22339,3.22339,0,0,0-1.72269-4.21179Zm71.02958-38.52241a3.08449,3.08449,0,0,0-3.44119-2.96447,3.01947,3.01947,0,0,0-2.81653,3.276c.15559,5.14854-.15616,10.13768-.31232,15.286,0,2.33947,1.09425,3.58775,2.971,3.74391,1.87844,0,3.28728-1.24829,3.28728-3.58851,0-3.43141.46791-7.01916.31175-10.29517a31.74592,31.74592,0,0,0,0-5.46008ZM42.99058,121.93748a3.19813,3.19813,0,0,0-3.91137,2.18407c-.3125.7804-.4679,1.71618-.7825,2.49562a101.97516,101.97516,0,0,1-5.00713,12.01c-1.09424,2.34022.1554,4.67969,2.66077,4.67969,1.40828.15616,2.34636-.77963,2.97271-2.02772a81.29759,81.29759,0,0,0,6.09985-15.4437,3.0299,3.0299,0,0,0-2.03233-3.898Zm51.78525-7.17321a3.13259,3.13259,0,0,0-3.44346,2.80735,161.02757,161.02757,0,0,1-4.84945,22.9279c-1.25193,4.36718-2.81636,8.73532-4.38079,13.10328a2.97748,2.97748,0,0,0,1.25192,3.898,3.04925,3.04925,0,0,0,3.75521-.3125,5.627,5.627,0,0,0,1.25041-2.33946,128.60479,128.60479,0,0,0,4.85173-14.97123,161.52838,161.52838,0,0,0,4.37926-21.68171,3.2645,3.2645,0,0,0-2.81483-3.43159ZM11.07466,60.17791a3.31205,3.31205,0,0,0-2.19078-4.36738c-1.72059-.46865-3.285.62329-3.91137,2.49561A79.568,79.568,0,0,0,2,80.45155a66.61318,66.61318,0,0,0,.31174,7.6432A76.2778,76.2778,0,0,0,5.91136,104.626,2.67954,2.67954,0,0,0,8.57,106.6545c2.661.15558,3.91289-1.87233,3.13095-4.68045a70.50526,70.50526,0,0,1-.62633-41.79842ZM85.701,104.15584a75.8642,75.8642,0,0,0-.4679-9.98362,114.4834,114.4834,0,0,0-2.19078-14.6595,3.09174,3.09174,0,0,0-3.59962-2.49581,3.03668,3.03668,0,0,0-2.34617,3.90025,116.66849,116.66849,0,0,1,2.34617,18.24725,106.72189,106.72189,0,0,1-2.97252,31.50478c-.46789,2.02773.31174,3.74391,2.03443,4.2118,1.87694.4679,3.44137-.62405,4.06772-2.80812a109.18033,109.18033,0,0,0,3.12867-27.917Zm32.854-36.96258a3.10567,3.10567,0,0,0-3.91136-2.02773,2.97022,2.97022,0,0,0-2.03235,3.90006c2.50253,9.35957,3.44041,19.02707,4.067,28.85281a155.42236,155.42236,0,0,1-5.0079,47.25852c-.46789,2.02792.31232,3.90025,2.03519,4.2118a3.12981,3.12981,0,0,0,4.067-2.65178,158.74287,158.74287,0,0,0,5.31944-41.48688,159.06625,159.06625,0,0,0-2.03234-26.98258,60.29831,60.29831,0,0,0-2.5046-11.07422ZM15.61237,48.32272A67.883,67.883,0,0,1,27.18744,31.633C41.11155,16.81945,58.16452,9.0199,78.66305,8.39586c2.34712,0,3.75521-1.24828,3.75521-3.276C82.416,3.09194,81.00789,2,78.5046,2A77.9438,77.9438,0,0,0,10.13447,45.04442a5.77164,5.77164,0,0,0-.62406,2.18407,2.72436,2.72436,0,0,0,1.56425,2.80736c1.72077.93654,3.59676.31231,4.53771-1.71543ZM58.79086,85.753c-1.25059-7.48553-.31175-14.19161,4.85155-20.11959a2.805,2.805,0,0,0,.62425-1.40368c.15616-1.55983-.15635-2.80812-1.7206-3.43216a2.98066,2.98066,0,0,0-3.91136.93635c-5.63137,6.55146-7.66581,14.19542-6.41388,22.77308a143.77173,143.77173,0,0,1,1.87675,19.65112,84.88938,84.88938,0,0,1-1.87675,19.18379,87.66557,87.66557,0,0,1-7.822,21.36711,4.07667,4.07667,0,0,0-.7827,2.652,2.99418,2.99418,0,0,0,2.34693,2.652c1.72079.31173,2.815-.31251,3.75521-1.87234a90.13491,90.13491,0,0,0,9.69891-29.79089A108.40093,108.40093,0,0,0,58.79315,85.753ZM22.338,94.48834c-1.09423-7.01916-2.03233-13.88368-1.09423-21.05461A59.14015,59.14015,0,0,1,46.11944,31.47686a3.29673,3.29673,0,0,0,1.56444-3.90024c-.78269-2.18389-2.97348-2.65176-5.16425-1.24735A60.84871,60.84871,0,0,0,29.37822,38.49678a64.523,64.523,0,0,0-14.7068,39.7707c-.31174,7.6434,1.72287,15.12892,2.19077,22.61463.31251,4.99219.46791,9.98419-1.09424,14.97429-.4679,1.55983-.93809,3.27525-1.40827,4.52334a3.12377,3.12377,0,0,0,3.12886,3.43008c1.87693,0,2.65868-1.09195,3.285-2.652,3.285-8.57766,2.81711-17.6232,1.56442-26.66951ZM157.0425,67.03786Q147.65477,20.2483,102.12991,5.276A45.00768,45.00768,0,0,0,91.80237,3.09194c-1.87828-.15615-3.12867.78039-3.28426,2.4958a2.87607,2.87607,0,0,0,2.50252,3.58833c.62406.15558,1.2504.15558,1.72059.31175A70.72962,70.72962,0,0,1,133.1047,31.94476a69.18254,69.18254,0,0,1,13.9241,22.61539,74.061,74.061,0,0,1,4.69407,23.23944c.15538,2.33946,1.87825,3.7439,4.06674,3.11986,1.56444-.4679,2.34713-1.71618,2.19077-4.212a41.34713,41.34713,0,0,0-.93788-9.6696ZM115.74016,40.83473a46.09788,46.09788,0,0,0-10.16908-7.17379,3.002,3.002,0,0,0-4.22521,1.09194c-.93885,1.55983-.46866,3.276,1.25193,4.368a3.91752,3.91752,0,0,0,1.09424.62422c10.4837,6.3936,17.83548,15.283,21.27894,27.13666,3.12887,11.38806,3.9108,23.08329,4.22309,34.7806a167.16816,167.16816,0,0,1-2.34692,33.06462c-.31174,2.34023.624,3.7439,2.50251,4.0564,2.03521.31175,3.44347-.78039,3.755-3.11985a162.60561,162.60561,0,0,0,2.34712-27.91913,217.74083,217.74083,0,0,0-2.65869-34.62312c-2.03461-12.79173-7.51041-23.55117-17.053-32.2865ZM89.76794,53.62646a28.15742,28.15742,0,0,0-18.92915-.15615c-2.66077.78037-3.44346,3.58546-1.72059,5.30163,1.24984,1.24809,2.50253,1.09195,3.91061.62406a21.7273,21.7273,0,0,1,28.47246,16.8428,163.57907,163.57907,0,0,1,2.34693,17.31375A137.996,137.996,0,0,1,103.692,118.974a149.65135,149.65135,0,0,1-7.04022,31.97477c-.1554.62405-.4679,1.092-.31155,1.71618a3.009,3.009,0,0,0,2.81483,2.65177,3.073,3.073,0,0,0,3.4427-2.34022,143.91448,143.91448,0,0,0,8.13447-46.946,167.06448,167.06448,0,0,0-2.65867-29.6353c-2.03462-11.07347-7.97831-18.87149-18.30566-22.77079ZM46.431,72.65334C50.03005,55.02805,68.64821,42.7065,86.48292,46.294a35.29014,35.29014,0,0,1,20.18241,11.85368,8.8989,8.8989,0,0,0,1.72,1.71617,3.19219,3.19219,0,0,0,3.755-.93579c1.09424-1.40444.93885-2.80812-.31155-4.5243-7.19867-8.733-16.42891-13.87928-27.84841-14.81508-14.55046-1.2481-26.59781,3.90025-35.82653,15.283A38.57467,38.57467,0,0,0,39.861,85.4407c.7804,5.30373,1.72077,10.45208,1.72077,15.75372,0,3.74391,0,7.488-.31174,11.07347a3.00588,3.00588,0,0,0,2.81408,3.276,3.03818,3.03818,0,0,0,3.44346-2.652,100.85173,100.85173,0,0,0-.15616-20.58748c-.47018-4.21179-1.87827-8.26743-1.56443-12.16769a39.31,39.31,0,0,1,.62406-7.48342Zm97.78146,20.43132a3.18855,3.18855,0,0,0,2.97269-3.43217V88.56056c-.62425-5.92722-1.2506-11.8531-2.19077-17.77879-2.03235-13.10195-7.19563-24.64312-16.1126-34.31273C115.89557,21.96341,99.46894,14.78945,79.91136,14.63329a64.57052,64.57052,0,0,0-25.3436,5.14835,3.233,3.233,0,0,0-2.03462,4.20951,3.15932,3.15932,0,0,0,4.38154,1.56A60.10933,60.10933,0,0,1,85.54483,21.183a57.79887,57.79887,0,0,1,35.04479,15.91007c10.32431,9.82517,16.268,21.835,18.30566,36.02812q1.16919,8.42465,1.876,16.84377c.46789,1.87157,1.72058,3.11966,3.44119,3.11966ZM71.15054,82.94489a11.40154,11.40154,0,0,1,0-5.614,9.11075,9.11075,0,0,1,9.70119-6.55146c4.22292.15558,7.66638,3.2762,8.60218,7.9559a150.63857,150.63857,0,0,1,2.661,26.51468,3.1253,3.1253,0,0,0,3.12887,3.43236c1.879,0,2.97252-1.40367,3.12867-3.276V102.5981h.15635c-.3125-4.05545-.4679-8.11185-.93581-12.16521-.47018-4.05565-1.09653-8.11206-1.72287-12.16541a15.95817,15.95817,0,0,0-17.67931-13.726c-8.13448.93654-14.7068,9.04763-13.45393,17.002.62406,4.83584,1.40809,9.6696,1.876,14.50563a100.76525,100.76525,0,0,1-4.69311,39.77A111.03411,111.03411,0,0,1,55.976,149.85661a3.05946,3.05946,0,0,0,.15616,3.43236,2.84779,2.84779,0,0,0,2.97251,1.24752,3.58665,3.58665,0,0,0,2.815-2.33946C72.715,130.2034,75.21748,107.1224,71.15054,82.94717ZM34.38592,91.52482c-.7825-5.30393-1.565-10.76381-1.09634-16.06545A45.82532,45.82532,0,0,1,49.87465,44.26631a45.38948,45.38948,0,0,1,28.16-10.76171,44.31355,44.31355,0,0,1,12.82985,1.24828,3.86115,3.86115,0,0,0,1.87676.15616,2.85951,2.85951,0,0,0,2.50252-2.80814,3.03932,3.03932,0,0,0-2.34694-3.276,45.9556,45.9556,0,0,0-13.14161-1.55984,34.7057,34.7057,0,0,0-9.6989.93577c-15.801,2.96429-27.84821,11.54421-36.14113,25.42352a50.63513,50.63513,0,0,0-6.56928,32.59653C27.81379,90.589,28.754,94.80084,29.06571,99.169c.62406,10.75944-.78174,21.20867-5.63119,30.87827a3.03324,3.03324,0,0,0-.47019,2.02771,2.85292,2.85292,0,0,0,2.65868,2.652,3.38105,3.38105,0,0,0,3.4427-2.02772c6.57-12.9458,7.51023-26.98125,5.32021-41.17439Zm0,0"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/fingerprint2.svg b/polkit-agent/assets/biowaiting/fingerprint2.svg
+new file mode 100644
+index 0000000..ce0a21b
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/fingerprint2.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}</style></defs><g id="文字标注"><g class="cls-1"><path d="M76.78191,140.809a3.00926,3.00926,0,0,0-4.06694,1.87157l-4.22311,10.29593a2.95177,2.95177,0,0,0,2.34693,4.2097c1.87618,0,2.81427-.62348,3.44061-2.02792q2.35321-4.96514,4.2252-10.13749a3.22339,3.22339,0,0,0-1.72269-4.21179Zm71.02958-38.52241a3.08449,3.08449,0,0,0-3.44119-2.96447,3.01947,3.01947,0,0,0-2.81653,3.276c.15559,5.14854-.15616,10.13768-.31232,15.286,0,2.33947,1.09425,3.58775,2.971,3.74391,1.87844,0,3.28728-1.24829,3.28728-3.58851,0-3.43141.46791-7.01916.31175-10.29517a31.74592,31.74592,0,0,0,0-5.46008ZM42.99058,121.93748a3.19813,3.19813,0,0,0-3.91137,2.18407c-.3125.7804-.4679,1.71618-.7825,2.49562a101.97516,101.97516,0,0,1-5.00713,12.01c-1.09424,2.34022.1554,4.67969,2.66077,4.67969,1.40828.15616,2.34636-.77963,2.97271-2.02772a81.29759,81.29759,0,0,0,6.09985-15.4437,3.0299,3.0299,0,0,0-2.03233-3.898Zm51.78525-7.17321a3.13259,3.13259,0,0,0-3.44346,2.80735,161.02757,161.02757,0,0,1-4.84945,22.9279c-1.25193,4.36718-2.81636,8.73532-4.38079,13.10328a2.97748,2.97748,0,0,0,1.25192,3.898,3.04925,3.04925,0,0,0,3.75521-.3125,5.627,5.627,0,0,0,1.25041-2.33946,128.60479,128.60479,0,0,0,4.85173-14.97123,161.52838,161.52838,0,0,0,4.37926-21.68171,3.2645,3.2645,0,0,0-2.81483-3.43159ZM11.07466,60.17791a3.31205,3.31205,0,0,0-2.19078-4.36738c-1.72059-.46865-3.285.62329-3.91137,2.49561A79.568,79.568,0,0,0,2,80.45155a66.61318,66.61318,0,0,0,.31174,7.6432A76.2778,76.2778,0,0,0,5.91136,104.626,2.67954,2.67954,0,0,0,8.57,106.6545c2.661.15558,3.91289-1.87233,3.13095-4.68045a70.50526,70.50526,0,0,1-.62633-41.79842ZM85.701,104.15584a75.8642,75.8642,0,0,0-.4679-9.98362,114.4834,114.4834,0,0,0-2.19078-14.6595,3.09174,3.09174,0,0,0-3.59962-2.49581,3.03668,3.03668,0,0,0-2.34617,3.90025,116.66849,116.66849,0,0,1,2.34617,18.24725,106.72189,106.72189,0,0,1-2.97252,31.50478c-.46789,2.02773.31174,3.74391,2.03443,4.2118,1.87694.4679,3.44137-.62405,4.06772-2.80812a109.18033,109.18033,0,0,0,3.12867-27.917Zm32.854-36.96258a3.10567,3.10567,0,0,0-3.91136-2.02773,2.97022,2.97022,0,0,0-2.03235,3.90006c2.50253,9.35957,3.44041,19.02707,4.067,28.85281a155.42236,155.42236,0,0,1-5.0079,47.25852c-.46789,2.02792.31232,3.90025,2.03519,4.2118a3.12981,3.12981,0,0,0,4.067-2.65178,158.74287,158.74287,0,0,0,5.31944-41.48688,159.06625,159.06625,0,0,0-2.03234-26.98258,60.29831,60.29831,0,0,0-2.5046-11.07422ZM15.61237,48.32272A67.883,67.883,0,0,1,27.18744,31.633C41.11155,16.81945,58.16452,9.0199,78.66305,8.39586c2.34712,0,3.75521-1.24828,3.75521-3.276C82.416,3.09194,81.00789,2,78.5046,2A77.9438,77.9438,0,0,0,10.13447,45.04442a5.77164,5.77164,0,0,0-.62406,2.18407,2.72436,2.72436,0,0,0,1.56425,2.80736c1.72077.93654,3.59676.31231,4.53771-1.71543ZM58.79086,85.753c-1.25059-7.48553-.31175-14.19161,4.85155-20.11959a2.805,2.805,0,0,0,.62425-1.40368c.15616-1.55983-.15635-2.80812-1.7206-3.43216a2.98066,2.98066,0,0,0-3.91136.93635c-5.63137,6.55146-7.66581,14.19542-6.41388,22.77308a143.77173,143.77173,0,0,1,1.87675,19.65112,84.88938,84.88938,0,0,1-1.87675,19.18379,87.66557,87.66557,0,0,1-7.822,21.36711,4.07667,4.07667,0,0,0-.7827,2.652,2.99418,2.99418,0,0,0,2.34693,2.652c1.72079.31173,2.815-.31251,3.75521-1.87234a90.13491,90.13491,0,0,0,9.69891-29.79089A108.40093,108.40093,0,0,0,58.79315,85.753ZM22.338,94.48834c-1.09423-7.01916-2.03233-13.88368-1.09423-21.05461A59.14015,59.14015,0,0,1,46.11944,31.47686a3.29673,3.29673,0,0,0,1.56444-3.90024c-.78269-2.18389-2.97348-2.65176-5.16425-1.24735A60.84871,60.84871,0,0,0,29.37822,38.49678a64.523,64.523,0,0,0-14.7068,39.7707c-.31174,7.6434,1.72287,15.12892,2.19077,22.61463.31251,4.99219.46791,9.98419-1.09424,14.97429-.4679,1.55983-.93809,3.27525-1.40827,4.52334a3.12377,3.12377,0,0,0,3.12886,3.43008c1.87693,0,2.65868-1.09195,3.285-2.652,3.285-8.57766,2.81711-17.6232,1.56442-26.66951ZM157.0425,67.03786Q147.65477,20.2483,102.12991,5.276A45.00768,45.00768,0,0,0,91.80237,3.09194c-1.87828-.15615-3.12867.78039-3.28426,2.4958a2.87607,2.87607,0,0,0,2.50252,3.58833c.62406.15558,1.2504.15558,1.72059.31175A70.72962,70.72962,0,0,1,133.1047,31.94476a69.18254,69.18254,0,0,1,13.9241,22.61539,74.061,74.061,0,0,1,4.69407,23.23944c.15538,2.33946,1.87825,3.7439,4.06674,3.11986,1.56444-.4679,2.34713-1.71618,2.19077-4.212a41.34713,41.34713,0,0,0-.93788-9.6696ZM115.74016,40.83473a46.09788,46.09788,0,0,0-10.16908-7.17379,3.002,3.002,0,0,0-4.22521,1.09194c-.93885,1.55983-.46866,3.276,1.25193,4.368a3.91752,3.91752,0,0,0,1.09424.62422c10.4837,6.3936,17.83548,15.283,21.27894,27.13666,3.12887,11.38806,3.9108,23.08329,4.22309,34.7806a167.16816,167.16816,0,0,1-2.34692,33.06462c-.31174,2.34023.624,3.7439,2.50251,4.0564,2.03521.31175,3.44347-.78039,3.755-3.11985a162.60561,162.60561,0,0,0,2.34712-27.91913,217.74083,217.74083,0,0,0-2.65869-34.62312c-2.03461-12.79173-7.51041-23.55117-17.053-32.2865ZM89.76794,53.62646a28.15742,28.15742,0,0,0-18.92915-.15615c-2.66077.78037-3.44346,3.58546-1.72059,5.30163,1.24984,1.24809,2.50253,1.09195,3.91061.62406a21.7273,21.7273,0,0,1,28.47246,16.8428,163.57907,163.57907,0,0,1,2.34693,17.31375A137.996,137.996,0,0,1,103.692,118.974a149.65135,149.65135,0,0,1-7.04022,31.97477c-.1554.62405-.4679,1.092-.31155,1.71618a3.009,3.009,0,0,0,2.81483,2.65177,3.073,3.073,0,0,0,3.4427-2.34022,143.91448,143.91448,0,0,0,8.13447-46.946,167.06448,167.06448,0,0,0-2.65867-29.6353c-2.03462-11.07347-7.97831-18.87149-18.30566-22.77079ZM46.431,72.65334C50.03005,55.02805,68.64821,42.7065,86.48292,46.294a35.29014,35.29014,0,0,1,20.18241,11.85368,8.8989,8.8989,0,0,0,1.72,1.71617,3.19219,3.19219,0,0,0,3.755-.93579c1.09424-1.40444.93885-2.80812-.31155-4.5243-7.19867-8.733-16.42891-13.87928-27.84841-14.81508-14.55046-1.2481-26.59781,3.90025-35.82653,15.283A38.57467,38.57467,0,0,0,39.861,85.4407c.7804,5.30373,1.72077,10.45208,1.72077,15.75372,0,3.74391,0,7.488-.31174,11.07347a3.00588,3.00588,0,0,0,2.81408,3.276,3.03818,3.03818,0,0,0,3.44346-2.652,100.85173,100.85173,0,0,0-.15616-20.58748c-.47018-4.21179-1.87827-8.26743-1.56443-12.16769a39.31,39.31,0,0,1,.62406-7.48342Zm97.78146,20.43132a3.18855,3.18855,0,0,0,2.97269-3.43217V88.56056c-.62425-5.92722-1.2506-11.8531-2.19077-17.77879-2.03235-13.10195-7.19563-24.64312-16.1126-34.31273C115.89557,21.96341,99.46894,14.78945,79.91136,14.63329a64.57052,64.57052,0,0,0-25.3436,5.14835,3.233,3.233,0,0,0-2.03462,4.20951,3.15932,3.15932,0,0,0,4.38154,1.56A60.10933,60.10933,0,0,1,85.54483,21.183a57.79887,57.79887,0,0,1,35.04479,15.91007c10.32431,9.82517,16.268,21.835,18.30566,36.02812q1.16919,8.42465,1.876,16.84377c.46789,1.87157,1.72058,3.11966,3.44119,3.11966ZM71.15054,82.94489a11.40154,11.40154,0,0,1,0-5.614,9.11075,9.11075,0,0,1,9.70119-6.55146c4.22292.15558,7.66638,3.2762,8.60218,7.9559a150.63857,150.63857,0,0,1,2.661,26.51468,3.1253,3.1253,0,0,0,3.12887,3.43236c1.879,0,2.97252-1.40367,3.12867-3.276V102.5981h.15635c-.3125-4.05545-.4679-8.11185-.93581-12.16521-.47018-4.05565-1.09653-8.11206-1.72287-12.16541a15.95817,15.95817,0,0,0-17.67931-13.726c-8.13448.93654-14.7068,9.04763-13.45393,17.002.62406,4.83584,1.40809,9.6696,1.876,14.50563a100.76525,100.76525,0,0,1-4.69311,39.77A111.03411,111.03411,0,0,1,55.976,149.85661a3.05946,3.05946,0,0,0,.15616,3.43236,2.84779,2.84779,0,0,0,2.97251,1.24752,3.58665,3.58665,0,0,0,2.815-2.33946C72.715,130.2034,75.21748,107.1224,71.15054,82.94717ZM34.38592,91.52482c-.7825-5.30393-1.565-10.76381-1.09634-16.06545A45.82532,45.82532,0,0,1,49.87465,44.26631a45.38948,45.38948,0,0,1,28.16-10.76171,44.31355,44.31355,0,0,1,12.82985,1.24828,3.86115,3.86115,0,0,0,1.87676.15616,2.85951,2.85951,0,0,0,2.50252-2.80814,3.03932,3.03932,0,0,0-2.34694-3.276,45.9556,45.9556,0,0,0-13.14161-1.55984,34.7057,34.7057,0,0,0-9.6989.93577c-15.801,2.96429-27.84821,11.54421-36.14113,25.42352a50.63513,50.63513,0,0,0-6.56928,32.59653C27.81379,90.589,28.754,94.80084,29.06571,99.169c.62406,10.75944-.78174,21.20867-5.63119,30.87827a3.03324,3.03324,0,0,0-.47019,2.02771,2.85292,2.85292,0,0,0,2.65868,2.652,3.38105,3.38105,0,0,0,3.4427-2.02772c6.57-12.9458,7.51023-26.98125,5.32021-41.17439Zm0,0"/></g><path class="cls-2" d="M54.56775,19.78162A4.3956,4.3956,0,0,0,54.14148,20H106.447a67.23276,67.23276,0,0,0-26.53558-5.3667A64.57,64.57,0,0,0,54.56775,19.78162Z"/><path class="cls-2" d="M78.50458,2a77.85348,77.85348,0,0,0-36.29651,9.67188A78.8284,78.8284,0,0,0,29.98193,20H40.88556C51.89252,12.71936,64.44763,8.82861,78.663,8.39581c2.34717,0,3.75525-1.24823,3.75525-3.276C82.416,3.09192,81.00787,2,78.50458,2Z"/><path class="cls-2" d="M91.80237,3.09192c-1.8783-.15613-3.12866.78039-3.28424,2.49579A2.876,2.876,0,0,0,91.02063,9.176c.62408.15564,1.25043.15564,1.72058.31176A71.20917,71.20917,0,0,1,119.1936,20h10.78968a87.41029,87.41029,0,0,0-27.8534-14.724A45.00584,45.00584,0,0,0,91.80237,3.09192Z"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/fingerprint3.svg b/polkit-agent/assets/biowaiting/fingerprint3.svg
+new file mode 100644
+index 0000000..3ff19ba
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/fingerprint3.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}</style></defs><g id="文字标注"><g class="cls-1"><path d="M76.78191,140.809a3.00926,3.00926,0,0,0-4.06694,1.87157l-4.22311,10.29593a2.95177,2.95177,0,0,0,2.34693,4.2097c1.87618,0,2.81427-.62348,3.44061-2.02792q2.35321-4.96514,4.2252-10.13749a3.22339,3.22339,0,0,0-1.72269-4.21179Zm71.02958-38.52241a3.08449,3.08449,0,0,0-3.44119-2.96447,3.01947,3.01947,0,0,0-2.81653,3.276c.15559,5.14854-.15616,10.13768-.31232,15.286,0,2.33947,1.09425,3.58775,2.971,3.74391,1.87844,0,3.28728-1.24829,3.28728-3.58851,0-3.43141.46791-7.01916.31175-10.29517a31.74592,31.74592,0,0,0,0-5.46008ZM42.99058,121.93748a3.19813,3.19813,0,0,0-3.91137,2.18407c-.3125.7804-.4679,1.71618-.7825,2.49562a101.97516,101.97516,0,0,1-5.00713,12.01c-1.09424,2.34022.1554,4.67969,2.66077,4.67969,1.40828.15616,2.34636-.77963,2.97271-2.02772a81.29759,81.29759,0,0,0,6.09985-15.4437,3.0299,3.0299,0,0,0-2.03233-3.898Zm51.78525-7.17321a3.13259,3.13259,0,0,0-3.44346,2.80735,161.02757,161.02757,0,0,1-4.84945,22.9279c-1.25193,4.36718-2.81636,8.73532-4.38079,13.10328a2.97748,2.97748,0,0,0,1.25192,3.898,3.04925,3.04925,0,0,0,3.75521-.3125,5.627,5.627,0,0,0,1.25041-2.33946,128.60479,128.60479,0,0,0,4.85173-14.97123,161.52838,161.52838,0,0,0,4.37926-21.68171,3.2645,3.2645,0,0,0-2.81483-3.43159ZM11.07466,60.17791a3.31205,3.31205,0,0,0-2.19078-4.36738c-1.72059-.46865-3.285.62329-3.91137,2.49561A79.568,79.568,0,0,0,2,80.45155a66.61318,66.61318,0,0,0,.31174,7.6432A76.2778,76.2778,0,0,0,5.91136,104.626,2.67954,2.67954,0,0,0,8.57,106.6545c2.661.15558,3.91289-1.87233,3.13095-4.68045a70.50526,70.50526,0,0,1-.62633-41.79842ZM85.701,104.15584a75.8642,75.8642,0,0,0-.4679-9.98362,114.4834,114.4834,0,0,0-2.19078-14.6595,3.09174,3.09174,0,0,0-3.59962-2.49581,3.03668,3.03668,0,0,0-2.34617,3.90025,116.66849,116.66849,0,0,1,2.34617,18.24725,106.72189,106.72189,0,0,1-2.97252,31.50478c-.46789,2.02773.31174,3.74391,2.03443,4.2118,1.87694.4679,3.44137-.62405,4.06772-2.80812a109.18033,109.18033,0,0,0,3.12867-27.917Zm32.854-36.96258a3.10567,3.10567,0,0,0-3.91136-2.02773,2.97022,2.97022,0,0,0-2.03235,3.90006c2.50253,9.35957,3.44041,19.02707,4.067,28.85281a155.42236,155.42236,0,0,1-5.0079,47.25852c-.46789,2.02792.31232,3.90025,2.03519,4.2118a3.12981,3.12981,0,0,0,4.067-2.65178,158.74287,158.74287,0,0,0,5.31944-41.48688,159.06625,159.06625,0,0,0-2.03234-26.98258,60.29831,60.29831,0,0,0-2.5046-11.07422ZM15.61237,48.32272A67.883,67.883,0,0,1,27.18744,31.633C41.11155,16.81945,58.16452,9.0199,78.66305,8.39586c2.34712,0,3.75521-1.24828,3.75521-3.276C82.416,3.09194,81.00789,2,78.5046,2A77.9438,77.9438,0,0,0,10.13447,45.04442a5.77164,5.77164,0,0,0-.62406,2.18407,2.72436,2.72436,0,0,0,1.56425,2.80736c1.72077.93654,3.59676.31231,4.53771-1.71543ZM58.79086,85.753c-1.25059-7.48553-.31175-14.19161,4.85155-20.11959a2.805,2.805,0,0,0,.62425-1.40368c.15616-1.55983-.15635-2.80812-1.7206-3.43216a2.98066,2.98066,0,0,0-3.91136.93635c-5.63137,6.55146-7.66581,14.19542-6.41388,22.77308a143.77173,143.77173,0,0,1,1.87675,19.65112,84.88938,84.88938,0,0,1-1.87675,19.18379,87.66557,87.66557,0,0,1-7.822,21.36711,4.07667,4.07667,0,0,0-.7827,2.652,2.99418,2.99418,0,0,0,2.34693,2.652c1.72079.31173,2.815-.31251,3.75521-1.87234a90.13491,90.13491,0,0,0,9.69891-29.79089A108.40093,108.40093,0,0,0,58.79315,85.753ZM22.338,94.48834c-1.09423-7.01916-2.03233-13.88368-1.09423-21.05461A59.14015,59.14015,0,0,1,46.11944,31.47686a3.29673,3.29673,0,0,0,1.56444-3.90024c-.78269-2.18389-2.97348-2.65176-5.16425-1.24735A60.84871,60.84871,0,0,0,29.37822,38.49678a64.523,64.523,0,0,0-14.7068,39.7707c-.31174,7.6434,1.72287,15.12892,2.19077,22.61463.31251,4.99219.46791,9.98419-1.09424,14.97429-.4679,1.55983-.93809,3.27525-1.40827,4.52334a3.12377,3.12377,0,0,0,3.12886,3.43008c1.87693,0,2.65868-1.09195,3.285-2.652,3.285-8.57766,2.81711-17.6232,1.56442-26.66951ZM157.0425,67.03786Q147.65477,20.2483,102.12991,5.276A45.00768,45.00768,0,0,0,91.80237,3.09194c-1.87828-.15615-3.12867.78039-3.28426,2.4958a2.87607,2.87607,0,0,0,2.50252,3.58833c.62406.15558,1.2504.15558,1.72059.31175A70.72962,70.72962,0,0,1,133.1047,31.94476a69.18254,69.18254,0,0,1,13.9241,22.61539,74.061,74.061,0,0,1,4.69407,23.23944c.15538,2.33946,1.87825,3.7439,4.06674,3.11986,1.56444-.4679,2.34713-1.71618,2.19077-4.212a41.34713,41.34713,0,0,0-.93788-9.6696ZM115.74016,40.83473a46.09788,46.09788,0,0,0-10.16908-7.17379,3.002,3.002,0,0,0-4.22521,1.09194c-.93885,1.55983-.46866,3.276,1.25193,4.368a3.91752,3.91752,0,0,0,1.09424.62422c10.4837,6.3936,17.83548,15.283,21.27894,27.13666,3.12887,11.38806,3.9108,23.08329,4.22309,34.7806a167.16816,167.16816,0,0,1-2.34692,33.06462c-.31174,2.34023.624,3.7439,2.50251,4.0564,2.03521.31175,3.44347-.78039,3.755-3.11985a162.60561,162.60561,0,0,0,2.34712-27.91913,217.74083,217.74083,0,0,0-2.65869-34.62312c-2.03461-12.79173-7.51041-23.55117-17.053-32.2865ZM89.76794,53.62646a28.15742,28.15742,0,0,0-18.92915-.15615c-2.66077.78037-3.44346,3.58546-1.72059,5.30163,1.24984,1.24809,2.50253,1.09195,3.91061.62406a21.7273,21.7273,0,0,1,28.47246,16.8428,163.57907,163.57907,0,0,1,2.34693,17.31375A137.996,137.996,0,0,1,103.692,118.974a149.65135,149.65135,0,0,1-7.04022,31.97477c-.1554.62405-.4679,1.092-.31155,1.71618a3.009,3.009,0,0,0,2.81483,2.65177,3.073,3.073,0,0,0,3.4427-2.34022,143.91448,143.91448,0,0,0,8.13447-46.946,167.06448,167.06448,0,0,0-2.65867-29.6353c-2.03462-11.07347-7.97831-18.87149-18.30566-22.77079ZM46.431,72.65334C50.03005,55.02805,68.64821,42.7065,86.48292,46.294a35.29014,35.29014,0,0,1,20.18241,11.85368,8.8989,8.8989,0,0,0,1.72,1.71617,3.19219,3.19219,0,0,0,3.755-.93579c1.09424-1.40444.93885-2.80812-.31155-4.5243-7.19867-8.733-16.42891-13.87928-27.84841-14.81508-14.55046-1.2481-26.59781,3.90025-35.82653,15.283A38.57467,38.57467,0,0,0,39.861,85.4407c.7804,5.30373,1.72077,10.45208,1.72077,15.75372,0,3.74391,0,7.488-.31174,11.07347a3.00588,3.00588,0,0,0,2.81408,3.276,3.03818,3.03818,0,0,0,3.44346-2.652,100.85173,100.85173,0,0,0-.15616-20.58748c-.47018-4.21179-1.87827-8.26743-1.56443-12.16769a39.31,39.31,0,0,1,.62406-7.48342Zm97.78146,20.43132a3.18855,3.18855,0,0,0,2.97269-3.43217V88.56056c-.62425-5.92722-1.2506-11.8531-2.19077-17.77879-2.03235-13.10195-7.19563-24.64312-16.1126-34.31273C115.89557,21.96341,99.46894,14.78945,79.91136,14.63329a64.57052,64.57052,0,0,0-25.3436,5.14835,3.233,3.233,0,0,0-2.03462,4.20951,3.15932,3.15932,0,0,0,4.38154,1.56A60.10933,60.10933,0,0,1,85.54483,21.183a57.79887,57.79887,0,0,1,35.04479,15.91007c10.32431,9.82517,16.268,21.835,18.30566,36.02812q1.16919,8.42465,1.876,16.84377c.46789,1.87157,1.72058,3.11966,3.44119,3.11966ZM71.15054,82.94489a11.40154,11.40154,0,0,1,0-5.614,9.11075,9.11075,0,0,1,9.70119-6.55146c4.22292.15558,7.66638,3.2762,8.60218,7.9559a150.63857,150.63857,0,0,1,2.661,26.51468,3.1253,3.1253,0,0,0,3.12887,3.43236c1.879,0,2.97252-1.40367,3.12867-3.276V102.5981h.15635c-.3125-4.05545-.4679-8.11185-.93581-12.16521-.47018-4.05565-1.09653-8.11206-1.72287-12.16541a15.95817,15.95817,0,0,0-17.67931-13.726c-8.13448.93654-14.7068,9.04763-13.45393,17.002.62406,4.83584,1.40809,9.6696,1.876,14.50563a100.76525,100.76525,0,0,1-4.69311,39.77A111.03411,111.03411,0,0,1,55.976,149.85661a3.05946,3.05946,0,0,0,.15616,3.43236,2.84779,2.84779,0,0,0,2.97251,1.24752,3.58665,3.58665,0,0,0,2.815-2.33946C72.715,130.2034,75.21748,107.1224,71.15054,82.94717ZM34.38592,91.52482c-.7825-5.30393-1.565-10.76381-1.09634-16.06545A45.82532,45.82532,0,0,1,49.87465,44.26631a45.38948,45.38948,0,0,1,28.16-10.76171,44.31355,44.31355,0,0,1,12.82985,1.24828,3.86115,3.86115,0,0,0,1.87676.15616,2.85951,2.85951,0,0,0,2.50252-2.80814,3.03932,3.03932,0,0,0-2.34694-3.276,45.9556,45.9556,0,0,0-13.14161-1.55984,34.7057,34.7057,0,0,0-9.6989.93577c-15.801,2.96429-27.84821,11.54421-36.14113,25.42352a50.63513,50.63513,0,0,0-6.56928,32.59653C27.81379,90.589,28.754,94.80084,29.06571,99.169c.62406,10.75944-.78174,21.20867-5.63119,30.87827a3.03324,3.03324,0,0,0-.47019,2.02771,2.85292,2.85292,0,0,0,2.65868,2.652,3.38105,3.38105,0,0,0,3.4427-2.02772c6.57-12.9458,7.51023-26.98125,5.32021-41.17439Zm0,0"/></g><path class="cls-2" d="M42.51965,26.32928C40.848,27.471,39.24213,28.70074,37.69611,30h9.79473a2.9788,2.9788,0,0,0,.19306-2.4234C46.90118,25.3927,44.71039,24.92487,42.51965,26.32928Z"/><path class="cls-2" d="M92.89679,28.82489a45.9554,45.9554,0,0,0-13.1416-1.55981,34.70686,34.70686,0,0,0-9.69892.93573A58.17287,58.17287,0,0,0,62.98737,30H94.66962A3.4225,3.4225,0,0,0,92.89679,28.82489Z"/><path class="cls-2" d="M78.50458,2a77.85348,77.85348,0,0,0-36.29651,9.67188A76.9855,76.9855,0,0,0,20.00146,30h8.79C42.41681,16.25873,58.94067,8.99628,78.663,8.39581c2.34717,0,3.75525-1.24823,3.75525-3.276C82.416,3.09192,81.00787,2,78.50458,2Z"/><path class="cls-2" d="M79.91138,14.6333a64.57,64.57,0,0,0-25.34363,5.14832,3.23308,3.23308,0,0,0-2.03461,4.20953,3.15929,3.15929,0,0,0,4.38153,1.56A60.10983,60.10983,0,0,1,85.54486,21.183,57.00643,57.00643,0,0,1,111.48492,30h10.78821C110.467,19.8385,96.29218,14.7641,79.91138,14.6333Z"/><path class="cls-2" d="M102.12988,5.276A45.00584,45.00584,0,0,0,91.80237,3.09192c-1.8783-.15613-3.12866.78039-3.28424,2.49579A2.876,2.876,0,0,0,91.02063,9.176c.62408.15564,1.25043.15564,1.72058.31176A70.54954,70.54954,0,0,1,131.26257,30H140.16Q126.19251,13.19439,102.12988,5.276Z"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/fingerprint4.svg b/polkit-agent/assets/biowaiting/fingerprint4.svg
+new file mode 100644
+index 0000000..c3c80d4
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/fingerprint4.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}</style></defs><g id="文字标注"><g class="cls-1"><path d="M76.78191,140.809a3.00926,3.00926,0,0,0-4.06694,1.87157l-4.22311,10.29593a2.95177,2.95177,0,0,0,2.34693,4.2097c1.87618,0,2.81427-.62348,3.44061-2.02792q2.35321-4.96514,4.2252-10.13749a3.22339,3.22339,0,0,0-1.72269-4.21179Zm71.02958-38.52241a3.08449,3.08449,0,0,0-3.44119-2.96447,3.01947,3.01947,0,0,0-2.81653,3.276c.15559,5.14854-.15616,10.13768-.31232,15.286,0,2.33947,1.09425,3.58775,2.971,3.74391,1.87844,0,3.28728-1.24829,3.28728-3.58851,0-3.43141.46791-7.01916.31175-10.29517a31.74592,31.74592,0,0,0,0-5.46008ZM42.99058,121.93748a3.19813,3.19813,0,0,0-3.91137,2.18407c-.3125.7804-.4679,1.71618-.7825,2.49562a101.97516,101.97516,0,0,1-5.00713,12.01c-1.09424,2.34022.1554,4.67969,2.66077,4.67969,1.40828.15616,2.34636-.77963,2.97271-2.02772a81.29759,81.29759,0,0,0,6.09985-15.4437,3.0299,3.0299,0,0,0-2.03233-3.898Zm51.78525-7.17321a3.13259,3.13259,0,0,0-3.44346,2.80735,161.02757,161.02757,0,0,1-4.84945,22.9279c-1.25193,4.36718-2.81636,8.73532-4.38079,13.10328a2.97748,2.97748,0,0,0,1.25192,3.898,3.04925,3.04925,0,0,0,3.75521-.3125,5.627,5.627,0,0,0,1.25041-2.33946,128.60479,128.60479,0,0,0,4.85173-14.97123,161.52838,161.52838,0,0,0,4.37926-21.68171,3.2645,3.2645,0,0,0-2.81483-3.43159ZM11.07466,60.17791a3.31205,3.31205,0,0,0-2.19078-4.36738c-1.72059-.46865-3.285.62329-3.91137,2.49561A79.568,79.568,0,0,0,2,80.45155a66.61318,66.61318,0,0,0,.31174,7.6432A76.2778,76.2778,0,0,0,5.91136,104.626,2.67954,2.67954,0,0,0,8.57,106.6545c2.661.15558,3.91289-1.87233,3.13095-4.68045a70.50526,70.50526,0,0,1-.62633-41.79842ZM85.701,104.15584a75.8642,75.8642,0,0,0-.4679-9.98362,114.4834,114.4834,0,0,0-2.19078-14.6595,3.09174,3.09174,0,0,0-3.59962-2.49581,3.03668,3.03668,0,0,0-2.34617,3.90025,116.66849,116.66849,0,0,1,2.34617,18.24725,106.72189,106.72189,0,0,1-2.97252,31.50478c-.46789,2.02773.31174,3.74391,2.03443,4.2118,1.87694.4679,3.44137-.62405,4.06772-2.80812a109.18033,109.18033,0,0,0,3.12867-27.917Zm32.854-36.96258a3.10567,3.10567,0,0,0-3.91136-2.02773,2.97022,2.97022,0,0,0-2.03235,3.90006c2.50253,9.35957,3.44041,19.02707,4.067,28.85281a155.42236,155.42236,0,0,1-5.0079,47.25852c-.46789,2.02792.31232,3.90025,2.03519,4.2118a3.12981,3.12981,0,0,0,4.067-2.65178,158.74287,158.74287,0,0,0,5.31944-41.48688,159.06625,159.06625,0,0,0-2.03234-26.98258,60.29831,60.29831,0,0,0-2.5046-11.07422ZM15.61237,48.32272A67.883,67.883,0,0,1,27.18744,31.633C41.11155,16.81945,58.16452,9.0199,78.66305,8.39586c2.34712,0,3.75521-1.24828,3.75521-3.276C82.416,3.09194,81.00789,2,78.5046,2A77.9438,77.9438,0,0,0,10.13447,45.04442a5.77164,5.77164,0,0,0-.62406,2.18407,2.72436,2.72436,0,0,0,1.56425,2.80736c1.72077.93654,3.59676.31231,4.53771-1.71543ZM58.79086,85.753c-1.25059-7.48553-.31175-14.19161,4.85155-20.11959a2.805,2.805,0,0,0,.62425-1.40368c.15616-1.55983-.15635-2.80812-1.7206-3.43216a2.98066,2.98066,0,0,0-3.91136.93635c-5.63137,6.55146-7.66581,14.19542-6.41388,22.77308a143.77173,143.77173,0,0,1,1.87675,19.65112,84.88938,84.88938,0,0,1-1.87675,19.18379,87.66557,87.66557,0,0,1-7.822,21.36711,4.07667,4.07667,0,0,0-.7827,2.652,2.99418,2.99418,0,0,0,2.34693,2.652c1.72079.31173,2.815-.31251,3.75521-1.87234a90.13491,90.13491,0,0,0,9.69891-29.79089A108.40093,108.40093,0,0,0,58.79315,85.753ZM22.338,94.48834c-1.09423-7.01916-2.03233-13.88368-1.09423-21.05461A59.14015,59.14015,0,0,1,46.11944,31.47686a3.29673,3.29673,0,0,0,1.56444-3.90024c-.78269-2.18389-2.97348-2.65176-5.16425-1.24735A60.84871,60.84871,0,0,0,29.37822,38.49678a64.523,64.523,0,0,0-14.7068,39.7707c-.31174,7.6434,1.72287,15.12892,2.19077,22.61463.31251,4.99219.46791,9.98419-1.09424,14.97429-.4679,1.55983-.93809,3.27525-1.40827,4.52334a3.12377,3.12377,0,0,0,3.12886,3.43008c1.87693,0,2.65868-1.09195,3.285-2.652,3.285-8.57766,2.81711-17.6232,1.56442-26.66951ZM157.0425,67.03786Q147.65477,20.2483,102.12991,5.276A45.00768,45.00768,0,0,0,91.80237,3.09194c-1.87828-.15615-3.12867.78039-3.28426,2.4958a2.87607,2.87607,0,0,0,2.50252,3.58833c.62406.15558,1.2504.15558,1.72059.31175A70.72962,70.72962,0,0,1,133.1047,31.94476a69.18254,69.18254,0,0,1,13.9241,22.61539,74.061,74.061,0,0,1,4.69407,23.23944c.15538,2.33946,1.87825,3.7439,4.06674,3.11986,1.56444-.4679,2.34713-1.71618,2.19077-4.212a41.34713,41.34713,0,0,0-.93788-9.6696ZM115.74016,40.83473a46.09788,46.09788,0,0,0-10.16908-7.17379,3.002,3.002,0,0,0-4.22521,1.09194c-.93885,1.55983-.46866,3.276,1.25193,4.368a3.91752,3.91752,0,0,0,1.09424.62422c10.4837,6.3936,17.83548,15.283,21.27894,27.13666,3.12887,11.38806,3.9108,23.08329,4.22309,34.7806a167.16816,167.16816,0,0,1-2.34692,33.06462c-.31174,2.34023.624,3.7439,2.50251,4.0564,2.03521.31175,3.44347-.78039,3.755-3.11985a162.60561,162.60561,0,0,0,2.34712-27.91913,217.74083,217.74083,0,0,0-2.65869-34.62312c-2.03461-12.79173-7.51041-23.55117-17.053-32.2865ZM89.76794,53.62646a28.15742,28.15742,0,0,0-18.92915-.15615c-2.66077.78037-3.44346,3.58546-1.72059,5.30163,1.24984,1.24809,2.50253,1.09195,3.91061.62406a21.7273,21.7273,0,0,1,28.47246,16.8428,163.57907,163.57907,0,0,1,2.34693,17.31375A137.996,137.996,0,0,1,103.692,118.974a149.65135,149.65135,0,0,1-7.04022,31.97477c-.1554.62405-.4679,1.092-.31155,1.71618a3.009,3.009,0,0,0,2.81483,2.65177,3.073,3.073,0,0,0,3.4427-2.34022,143.91448,143.91448,0,0,0,8.13447-46.946,167.06448,167.06448,0,0,0-2.65867-29.6353c-2.03462-11.07347-7.97831-18.87149-18.30566-22.77079ZM46.431,72.65334C50.03005,55.02805,68.64821,42.7065,86.48292,46.294a35.29014,35.29014,0,0,1,20.18241,11.85368,8.8989,8.8989,0,0,0,1.72,1.71617,3.19219,3.19219,0,0,0,3.755-.93579c1.09424-1.40444.93885-2.80812-.31155-4.5243-7.19867-8.733-16.42891-13.87928-27.84841-14.81508-14.55046-1.2481-26.59781,3.90025-35.82653,15.283A38.57467,38.57467,0,0,0,39.861,85.4407c.7804,5.30373,1.72077,10.45208,1.72077,15.75372,0,3.74391,0,7.488-.31174,11.07347a3.00588,3.00588,0,0,0,2.81408,3.276,3.03818,3.03818,0,0,0,3.44346-2.652,100.85173,100.85173,0,0,0-.15616-20.58748c-.47018-4.21179-1.87827-8.26743-1.56443-12.16769a39.31,39.31,0,0,1,.62406-7.48342Zm97.78146,20.43132a3.18855,3.18855,0,0,0,2.97269-3.43217V88.56056c-.62425-5.92722-1.2506-11.8531-2.19077-17.77879-2.03235-13.10195-7.19563-24.64312-16.1126-34.31273C115.89557,21.96341,99.46894,14.78945,79.91136,14.63329a64.57052,64.57052,0,0,0-25.3436,5.14835,3.233,3.233,0,0,0-2.03462,4.20951,3.15932,3.15932,0,0,0,4.38154,1.56A60.10933,60.10933,0,0,1,85.54483,21.183a57.79887,57.79887,0,0,1,35.04479,15.91007c10.32431,9.82517,16.268,21.835,18.30566,36.02812q1.16919,8.42465,1.876,16.84377c.46789,1.87157,1.72058,3.11966,3.44119,3.11966ZM71.15054,82.94489a11.40154,11.40154,0,0,1,0-5.614,9.11075,9.11075,0,0,1,9.70119-6.55146c4.22292.15558,7.66638,3.2762,8.60218,7.9559a150.63857,150.63857,0,0,1,2.661,26.51468,3.1253,3.1253,0,0,0,3.12887,3.43236c1.879,0,2.97252-1.40367,3.12867-3.276V102.5981h.15635c-.3125-4.05545-.4679-8.11185-.93581-12.16521-.47018-4.05565-1.09653-8.11206-1.72287-12.16541a15.95817,15.95817,0,0,0-17.67931-13.726c-8.13448.93654-14.7068,9.04763-13.45393,17.002.62406,4.83584,1.40809,9.6696,1.876,14.50563a100.76525,100.76525,0,0,1-4.69311,39.77A111.03411,111.03411,0,0,1,55.976,149.85661a3.05946,3.05946,0,0,0,.15616,3.43236,2.84779,2.84779,0,0,0,2.97251,1.24752,3.58665,3.58665,0,0,0,2.815-2.33946C72.715,130.2034,75.21748,107.1224,71.15054,82.94717ZM34.38592,91.52482c-.7825-5.30393-1.565-10.76381-1.09634-16.06545A45.82532,45.82532,0,0,1,49.87465,44.26631a45.38948,45.38948,0,0,1,28.16-10.76171,44.31355,44.31355,0,0,1,12.82985,1.24828,3.86115,3.86115,0,0,0,1.87676.15616,2.85951,2.85951,0,0,0,2.50252-2.80814,3.03932,3.03932,0,0,0-2.34694-3.276,45.9556,45.9556,0,0,0-13.14161-1.55984,34.7057,34.7057,0,0,0-9.6989.93577c-15.801,2.96429-27.84821,11.54421-36.14113,25.42352a50.63513,50.63513,0,0,0-6.56928,32.59653C27.81379,90.589,28.754,94.80084,29.06571,99.169c.62406,10.75944-.78174,21.20867-5.63119,30.87827a3.03324,3.03324,0,0,0-.47019,2.02771,2.85292,2.85292,0,0,0,2.65868,2.652,3.38105,3.38105,0,0,0,3.4427-2.02772c6.57-12.9458,7.51023-26.98125,5.32021-41.17439Zm0,0"/></g><path class="cls-2" d="M105.571,33.661a3.00191,3.00191,0,0,0-4.22515,1.09192c-.93885,1.55981-.46869,3.276,1.25189,4.368a3.91989,3.91989,0,0,0,1.09424.62421c.136.08294.26544.17114.40039.25494h10.69751A44.31528,44.31528,0,0,0,105.571,33.661Z"/><path class="cls-2" d="M46.11945,31.47687A3.29681,3.29681,0,0,0,47.6839,27.5766c-.78272-2.1839-2.97351-2.65173-5.16425-1.24732A60.84768,60.84768,0,0,0,29.37823,38.49677c-.4038.49646-.78784,1.00042-1.17486,1.50323H36.4093A62.09994,62.09994,0,0,1,46.11945,31.47687Z"/><path class="cls-2" d="M78.663,8.39581c2.34717,0,3.75525-1.24823,3.75525-3.276C82.416,3.09192,81.00787,2,78.50458,2A77.81365,77.81365,0,0,0,12.93646,40h7.531a67.905,67.905,0,0,1,6.72-8.367C41.11157,16.81946,58.16449,9.0199,78.663,8.39581Z"/><path class="cls-2" d="M102.12988,5.276A45.00584,45.00584,0,0,0,91.80237,3.09192c-1.8783-.15613-3.12866.78039-3.28424,2.49579A2.876,2.876,0,0,0,91.02063,9.176c.62408.15564,1.25043.15564,1.72058.31176a70.72949,70.72949,0,0,1,40.36347,22.457A73.76489,73.76489,0,0,1,139.47937,40h7.6394Q132.85458,15.39228,102.12988,5.276Z"/><path class="cls-2" d="M72.69672,40H87.29114c-1.08441-.17377-2.18378-.319-3.31073-.41132A44.76672,44.76672,0,0,0,72.69672,40Z"/><path class="cls-2" d="M128.88177,36.46906C115.89557,21.96338,99.46893,14.78943,79.91138,14.6333a64.57,64.57,0,0,0-25.34363,5.14832,3.23308,3.23308,0,0,0-2.03461,4.20953,3.15929,3.15929,0,0,0,4.38153,1.56A60.10983,60.10983,0,0,1,85.54486,21.183a57.79889,57.79889,0,0,1,35.04474,15.91c.99469.94659,1.9361,1.9198,2.84985,2.90692h8.46192Q130.46828,38.19624,128.88177,36.46906Z"/><path class="cls-2" d="M92.89679,28.82489a45.9554,45.9554,0,0,0-13.1416-1.55981,34.70686,34.70686,0,0,0-9.69892.93573A51.56847,51.56847,0,0,0,45.14117,40H55.8147a46.03094,46.03094,0,0,1,22.21991-6.49542,44.314,44.314,0,0,1,12.82983,1.24829,3.86144,3.86144,0,0,0,1.87677.15613,2.8594,2.8594,0,0,0,2.5025-2.80811A3.0393,3.0393,0,0,0,92.89679,28.82489Z"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/fingerprint5.svg b/polkit-agent/assets/biowaiting/fingerprint5.svg
+new file mode 100644
+index 0000000..fdec768
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/fingerprint5.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}</style></defs><g id="文字标注"><g class="cls-1"><path d="M76.78191,140.809a3.00926,3.00926,0,0,0-4.06694,1.87157l-4.22311,10.29593a2.95177,2.95177,0,0,0,2.34693,4.2097c1.87618,0,2.81427-.62348,3.44061-2.02792q2.35321-4.96514,4.2252-10.13749a3.22339,3.22339,0,0,0-1.72269-4.21179Zm71.02958-38.52241a3.08449,3.08449,0,0,0-3.44119-2.96447,3.01947,3.01947,0,0,0-2.81653,3.276c.15559,5.14854-.15616,10.13768-.31232,15.286,0,2.33947,1.09425,3.58775,2.971,3.74391,1.87844,0,3.28728-1.24829,3.28728-3.58851,0-3.43141.46791-7.01916.31175-10.29517a31.74592,31.74592,0,0,0,0-5.46008ZM42.99058,121.93748a3.19813,3.19813,0,0,0-3.91137,2.18407c-.3125.7804-.4679,1.71618-.7825,2.49562a101.97516,101.97516,0,0,1-5.00713,12.01c-1.09424,2.34022.1554,4.67969,2.66077,4.67969,1.40828.15616,2.34636-.77963,2.97271-2.02772a81.29759,81.29759,0,0,0,6.09985-15.4437,3.0299,3.0299,0,0,0-2.03233-3.898Zm51.78525-7.17321a3.13259,3.13259,0,0,0-3.44346,2.80735,161.02757,161.02757,0,0,1-4.84945,22.9279c-1.25193,4.36718-2.81636,8.73532-4.38079,13.10328a2.97748,2.97748,0,0,0,1.25192,3.898,3.04925,3.04925,0,0,0,3.75521-.3125,5.627,5.627,0,0,0,1.25041-2.33946,128.60479,128.60479,0,0,0,4.85173-14.97123,161.52838,161.52838,0,0,0,4.37926-21.68171,3.2645,3.2645,0,0,0-2.81483-3.43159ZM11.07466,60.17791a3.31205,3.31205,0,0,0-2.19078-4.36738c-1.72059-.46865-3.285.62329-3.91137,2.49561A79.568,79.568,0,0,0,2,80.45155a66.61318,66.61318,0,0,0,.31174,7.6432A76.2778,76.2778,0,0,0,5.91136,104.626,2.67954,2.67954,0,0,0,8.57,106.6545c2.661.15558,3.91289-1.87233,3.13095-4.68045a70.50526,70.50526,0,0,1-.62633-41.79842ZM85.701,104.15584a75.8642,75.8642,0,0,0-.4679-9.98362,114.4834,114.4834,0,0,0-2.19078-14.6595,3.09174,3.09174,0,0,0-3.59962-2.49581,3.03668,3.03668,0,0,0-2.34617,3.90025,116.66849,116.66849,0,0,1,2.34617,18.24725,106.72189,106.72189,0,0,1-2.97252,31.50478c-.46789,2.02773.31174,3.74391,2.03443,4.2118,1.87694.4679,3.44137-.62405,4.06772-2.80812a109.18033,109.18033,0,0,0,3.12867-27.917Zm32.854-36.96258a3.10567,3.10567,0,0,0-3.91136-2.02773,2.97022,2.97022,0,0,0-2.03235,3.90006c2.50253,9.35957,3.44041,19.02707,4.067,28.85281a155.42236,155.42236,0,0,1-5.0079,47.25852c-.46789,2.02792.31232,3.90025,2.03519,4.2118a3.12981,3.12981,0,0,0,4.067-2.65178,158.74287,158.74287,0,0,0,5.31944-41.48688,159.06625,159.06625,0,0,0-2.03234-26.98258,60.29831,60.29831,0,0,0-2.5046-11.07422ZM15.61237,48.32272A67.883,67.883,0,0,1,27.18744,31.633C41.11155,16.81945,58.16452,9.0199,78.66305,8.39586c2.34712,0,3.75521-1.24828,3.75521-3.276C82.416,3.09194,81.00789,2,78.5046,2A77.9438,77.9438,0,0,0,10.13447,45.04442a5.77164,5.77164,0,0,0-.62406,2.18407,2.72436,2.72436,0,0,0,1.56425,2.80736c1.72077.93654,3.59676.31231,4.53771-1.71543ZM58.79086,85.753c-1.25059-7.48553-.31175-14.19161,4.85155-20.11959a2.805,2.805,0,0,0,.62425-1.40368c.15616-1.55983-.15635-2.80812-1.7206-3.43216a2.98066,2.98066,0,0,0-3.91136.93635c-5.63137,6.55146-7.66581,14.19542-6.41388,22.77308a143.77173,143.77173,0,0,1,1.87675,19.65112,84.88938,84.88938,0,0,1-1.87675,19.18379,87.66557,87.66557,0,0,1-7.822,21.36711,4.07667,4.07667,0,0,0-.7827,2.652,2.99418,2.99418,0,0,0,2.34693,2.652c1.72079.31173,2.815-.31251,3.75521-1.87234a90.13491,90.13491,0,0,0,9.69891-29.79089A108.40093,108.40093,0,0,0,58.79315,85.753ZM22.338,94.48834c-1.09423-7.01916-2.03233-13.88368-1.09423-21.05461A59.14015,59.14015,0,0,1,46.11944,31.47686a3.29673,3.29673,0,0,0,1.56444-3.90024c-.78269-2.18389-2.97348-2.65176-5.16425-1.24735A60.84871,60.84871,0,0,0,29.37822,38.49678a64.523,64.523,0,0,0-14.7068,39.7707c-.31174,7.6434,1.72287,15.12892,2.19077,22.61463.31251,4.99219.46791,9.98419-1.09424,14.97429-.4679,1.55983-.93809,3.27525-1.40827,4.52334a3.12377,3.12377,0,0,0,3.12886,3.43008c1.87693,0,2.65868-1.09195,3.285-2.652,3.285-8.57766,2.81711-17.6232,1.56442-26.66951ZM157.0425,67.03786Q147.65477,20.2483,102.12991,5.276A45.00768,45.00768,0,0,0,91.80237,3.09194c-1.87828-.15615-3.12867.78039-3.28426,2.4958a2.87607,2.87607,0,0,0,2.50252,3.58833c.62406.15558,1.2504.15558,1.72059.31175A70.72962,70.72962,0,0,1,133.1047,31.94476a69.18254,69.18254,0,0,1,13.9241,22.61539,74.061,74.061,0,0,1,4.69407,23.23944c.15538,2.33946,1.87825,3.7439,4.06674,3.11986,1.56444-.4679,2.34713-1.71618,2.19077-4.212a41.34713,41.34713,0,0,0-.93788-9.6696ZM115.74016,40.83473a46.09788,46.09788,0,0,0-10.16908-7.17379,3.002,3.002,0,0,0-4.22521,1.09194c-.93885,1.55983-.46866,3.276,1.25193,4.368a3.91752,3.91752,0,0,0,1.09424.62422c10.4837,6.3936,17.83548,15.283,21.27894,27.13666,3.12887,11.38806,3.9108,23.08329,4.22309,34.7806a167.16816,167.16816,0,0,1-2.34692,33.06462c-.31174,2.34023.624,3.7439,2.50251,4.0564,2.03521.31175,3.44347-.78039,3.755-3.11985a162.60561,162.60561,0,0,0,2.34712-27.91913,217.74083,217.74083,0,0,0-2.65869-34.62312c-2.03461-12.79173-7.51041-23.55117-17.053-32.2865ZM89.76794,53.62646a28.15742,28.15742,0,0,0-18.92915-.15615c-2.66077.78037-3.44346,3.58546-1.72059,5.30163,1.24984,1.24809,2.50253,1.09195,3.91061.62406a21.7273,21.7273,0,0,1,28.47246,16.8428,163.57907,163.57907,0,0,1,2.34693,17.31375A137.996,137.996,0,0,1,103.692,118.974a149.65135,149.65135,0,0,1-7.04022,31.97477c-.1554.62405-.4679,1.092-.31155,1.71618a3.009,3.009,0,0,0,2.81483,2.65177,3.073,3.073,0,0,0,3.4427-2.34022,143.91448,143.91448,0,0,0,8.13447-46.946,167.06448,167.06448,0,0,0-2.65867-29.6353c-2.03462-11.07347-7.97831-18.87149-18.30566-22.77079ZM46.431,72.65334C50.03005,55.02805,68.64821,42.7065,86.48292,46.294a35.29014,35.29014,0,0,1,20.18241,11.85368,8.8989,8.8989,0,0,0,1.72,1.71617,3.19219,3.19219,0,0,0,3.755-.93579c1.09424-1.40444.93885-2.80812-.31155-4.5243-7.19867-8.733-16.42891-13.87928-27.84841-14.81508-14.55046-1.2481-26.59781,3.90025-35.82653,15.283A38.57467,38.57467,0,0,0,39.861,85.4407c.7804,5.30373,1.72077,10.45208,1.72077,15.75372,0,3.74391,0,7.488-.31174,11.07347a3.00588,3.00588,0,0,0,2.81408,3.276,3.03818,3.03818,0,0,0,3.44346-2.652,100.85173,100.85173,0,0,0-.15616-20.58748c-.47018-4.21179-1.87827-8.26743-1.56443-12.16769a39.31,39.31,0,0,1,.62406-7.48342Zm97.78146,20.43132a3.18855,3.18855,0,0,0,2.97269-3.43217V88.56056c-.62425-5.92722-1.2506-11.8531-2.19077-17.77879-2.03235-13.10195-7.19563-24.64312-16.1126-34.31273C115.89557,21.96341,99.46894,14.78945,79.91136,14.63329a64.57052,64.57052,0,0,0-25.3436,5.14835,3.233,3.233,0,0,0-2.03462,4.20951,3.15932,3.15932,0,0,0,4.38154,1.56A60.10933,60.10933,0,0,1,85.54483,21.183a57.79887,57.79887,0,0,1,35.04479,15.91007c10.32431,9.82517,16.268,21.835,18.30566,36.02812q1.16919,8.42465,1.876,16.84377c.46789,1.87157,1.72058,3.11966,3.44119,3.11966ZM71.15054,82.94489a11.40154,11.40154,0,0,1,0-5.614,9.11075,9.11075,0,0,1,9.70119-6.55146c4.22292.15558,7.66638,3.2762,8.60218,7.9559a150.63857,150.63857,0,0,1,2.661,26.51468,3.1253,3.1253,0,0,0,3.12887,3.43236c1.879,0,2.97252-1.40367,3.12867-3.276V102.5981h.15635c-.3125-4.05545-.4679-8.11185-.93581-12.16521-.47018-4.05565-1.09653-8.11206-1.72287-12.16541a15.95817,15.95817,0,0,0-17.67931-13.726c-8.13448.93654-14.7068,9.04763-13.45393,17.002.62406,4.83584,1.40809,9.6696,1.876,14.50563a100.76525,100.76525,0,0,1-4.69311,39.77A111.03411,111.03411,0,0,1,55.976,149.85661a3.05946,3.05946,0,0,0,.15616,3.43236,2.84779,2.84779,0,0,0,2.97251,1.24752,3.58665,3.58665,0,0,0,2.815-2.33946C72.715,130.2034,75.21748,107.1224,71.15054,82.94717ZM34.38592,91.52482c-.7825-5.30393-1.565-10.76381-1.09634-16.06545A45.82532,45.82532,0,0,1,49.87465,44.26631a45.38948,45.38948,0,0,1,28.16-10.76171,44.31355,44.31355,0,0,1,12.82985,1.24828,3.86115,3.86115,0,0,0,1.87676.15616,2.85951,2.85951,0,0,0,2.50252-2.80814,3.03932,3.03932,0,0,0-2.34694-3.276,45.9556,45.9556,0,0,0-13.14161-1.55984,34.7057,34.7057,0,0,0-9.6989.93577c-15.801,2.96429-27.84821,11.54421-36.14113,25.42352a50.63513,50.63513,0,0,0-6.56928,32.59653C27.81379,90.589,28.754,94.80084,29.06571,99.169c.62406,10.75944-.78174,21.20867-5.63119,30.87827a3.03324,3.03324,0,0,0-.47019,2.02771,2.85292,2.85292,0,0,0,2.65868,2.652,3.38105,3.38105,0,0,0,3.4427-2.02772c6.57-12.9458,7.51023-26.98125,5.32021-41.17439Zm0,0"/></g><path class="cls-2" d="M52.70563,50H63.65228a33.76275,33.76275,0,0,1,22.83063-3.706A37.323,37.323,0,0,1,96.63849,50H107.6944a38.44086,38.44086,0,0,0-23.714-10.41138C71.70941,38.53613,61.22681,42.05127,52.70563,50Z"/><path class="cls-2" d="M15.61237,48.32043v.00232A67.882,67.882,0,0,1,27.18744,31.63306C41.11157,16.81946,58.16449,9.0199,78.663,8.39575c2.34717,0,3.75525-1.24817,3.75525-3.27588C82.416,3.09192,81.00787,2,78.50458,2A77.94379,77.94379,0,0,0,10.13446,45.04443a5.77132,5.77132,0,0,0-.624,2.18409A2.7058,2.7058,0,0,0,11.01868,50h3.1997A3.89256,3.89256,0,0,0,15.61237,48.32043Z"/><path class="cls-2" d="M29.84613,48.63428A58.71554,58.71554,0,0,1,46.11945,31.47681a3.29665,3.29665,0,0,0,1.56445-3.90015c-.78272-2.184-2.97351-2.65186-5.16425-1.24731A60.84289,60.84289,0,0,0,29.37823,38.49683,66.78172,66.78172,0,0,0,21.813,50H29.0545C29.31915,49.54492,29.56952,49.085,29.84613,48.63428Z"/><path class="cls-2" d="M92.89679,28.825a45.94691,45.94691,0,0,0-13.1416-1.55981,34.70234,34.70234,0,0,0-9.69892.93567A51.16784,51.16784,0,0,0,36.27124,50h7.79443a49.27766,49.27766,0,0,1,5.809-5.73364,45.38883,45.38883,0,0,1,28.16-10.76172,44.30568,44.30568,0,0,1,12.82983,1.24829,3.86211,3.86211,0,0,0,1.87677.156,2.85935,2.85935,0,0,0,2.5025-2.80811A3.03909,3.03909,0,0,0,92.89679,28.825Z"/><path class="cls-2" d="M102.12988,5.276A45.009,45.009,0,0,0,91.80237,3.09192c-1.8783-.15613-3.12866.78039-3.28424,2.49573A2.876,2.876,0,0,0,91.02063,9.176c.62408.15564,1.25043.15564,1.72058.31176a70.72924,70.72924,0,0,1,40.36347,22.457A70.09713,70.09713,0,0,1,145.11847,50h6.87982Q138.76745,17.33435,102.12988,5.276Z"/><path class="cls-2" d="M115.74017,40.83472A46.09864,46.09864,0,0,0,105.571,33.66089a3.0019,3.0019,0,0,0-4.22515,1.092c-.93885,1.55981-.46869,3.27588,1.25189,4.36792a3.92165,3.92165,0,0,0,1.09424.62427A50.65843,50.65843,0,0,1,115.91486,50h7.85681A54.40942,54.40942,0,0,0,115.74017,40.83472Z"/><path class="cls-2" d="M128.88177,36.469C115.89557,21.96338,99.46893,14.78943,79.91138,14.6333a64.57,64.57,0,0,0-25.34363,5.14832,3.2331,3.2331,0,0,0-2.03461,4.20959,3.1594,3.1594,0,0,0,4.38153,1.55994,60.1104,60.1104,0,0,1,28.63019-4.368A57.799,57.799,0,0,1,120.5896,37.093,60.2336,60.2336,0,0,1,130.93127,50h7.43866A61.47308,61.47308,0,0,0,128.88177,36.469Z"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/fingerprint6.svg b/polkit-agent/assets/biowaiting/fingerprint6.svg
+new file mode 100644
+index 0000000..e682cb6
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/fingerprint6.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}</style></defs><g id="文字标注"><g class="cls-1"><path d="M76.78191,140.809a3.00926,3.00926,0,0,0-4.06694,1.87157l-4.22311,10.29593a2.95177,2.95177,0,0,0,2.34693,4.2097c1.87618,0,2.81427-.62348,3.44061-2.02792q2.35321-4.96514,4.2252-10.13749a3.22339,3.22339,0,0,0-1.72269-4.21179Zm71.02958-38.52241a3.08449,3.08449,0,0,0-3.44119-2.96447,3.01947,3.01947,0,0,0-2.81653,3.276c.15559,5.14854-.15616,10.13768-.31232,15.286,0,2.33947,1.09425,3.58775,2.971,3.74391,1.87844,0,3.28728-1.24829,3.28728-3.58851,0-3.43141.46791-7.01916.31175-10.29517a31.74592,31.74592,0,0,0,0-5.46008ZM42.99058,121.93748a3.19813,3.19813,0,0,0-3.91137,2.18407c-.3125.7804-.4679,1.71618-.7825,2.49562a101.97516,101.97516,0,0,1-5.00713,12.01c-1.09424,2.34022.1554,4.67969,2.66077,4.67969,1.40828.15616,2.34636-.77963,2.97271-2.02772a81.29759,81.29759,0,0,0,6.09985-15.4437,3.0299,3.0299,0,0,0-2.03233-3.898Zm51.78525-7.17321a3.13259,3.13259,0,0,0-3.44346,2.80735,161.02757,161.02757,0,0,1-4.84945,22.9279c-1.25193,4.36718-2.81636,8.73532-4.38079,13.10328a2.97748,2.97748,0,0,0,1.25192,3.898,3.04925,3.04925,0,0,0,3.75521-.3125,5.627,5.627,0,0,0,1.25041-2.33946,128.60479,128.60479,0,0,0,4.85173-14.97123,161.52838,161.52838,0,0,0,4.37926-21.68171,3.2645,3.2645,0,0,0-2.81483-3.43159ZM11.07466,60.17791a3.31205,3.31205,0,0,0-2.19078-4.36738c-1.72059-.46865-3.285.62329-3.91137,2.49561A79.568,79.568,0,0,0,2,80.45155a66.61318,66.61318,0,0,0,.31174,7.6432A76.2778,76.2778,0,0,0,5.91136,104.626,2.67954,2.67954,0,0,0,8.57,106.6545c2.661.15558,3.91289-1.87233,3.13095-4.68045a70.50526,70.50526,0,0,1-.62633-41.79842ZM85.701,104.15584a75.8642,75.8642,0,0,0-.4679-9.98362,114.4834,114.4834,0,0,0-2.19078-14.6595,3.09174,3.09174,0,0,0-3.59962-2.49581,3.03668,3.03668,0,0,0-2.34617,3.90025,116.66849,116.66849,0,0,1,2.34617,18.24725,106.72189,106.72189,0,0,1-2.97252,31.50478c-.46789,2.02773.31174,3.74391,2.03443,4.2118,1.87694.4679,3.44137-.62405,4.06772-2.80812a109.18033,109.18033,0,0,0,3.12867-27.917Zm32.854-36.96258a3.10567,3.10567,0,0,0-3.91136-2.02773,2.97022,2.97022,0,0,0-2.03235,3.90006c2.50253,9.35957,3.44041,19.02707,4.067,28.85281a155.42236,155.42236,0,0,1-5.0079,47.25852c-.46789,2.02792.31232,3.90025,2.03519,4.2118a3.12981,3.12981,0,0,0,4.067-2.65178,158.74287,158.74287,0,0,0,5.31944-41.48688,159.06625,159.06625,0,0,0-2.03234-26.98258,60.29831,60.29831,0,0,0-2.5046-11.07422ZM15.61237,48.32272A67.883,67.883,0,0,1,27.18744,31.633C41.11155,16.81945,58.16452,9.0199,78.66305,8.39586c2.34712,0,3.75521-1.24828,3.75521-3.276C82.416,3.09194,81.00789,2,78.5046,2A77.9438,77.9438,0,0,0,10.13447,45.04442a5.77164,5.77164,0,0,0-.62406,2.18407,2.72436,2.72436,0,0,0,1.56425,2.80736c1.72077.93654,3.59676.31231,4.53771-1.71543ZM58.79086,85.753c-1.25059-7.48553-.31175-14.19161,4.85155-20.11959a2.805,2.805,0,0,0,.62425-1.40368c.15616-1.55983-.15635-2.80812-1.7206-3.43216a2.98066,2.98066,0,0,0-3.91136.93635c-5.63137,6.55146-7.66581,14.19542-6.41388,22.77308a143.77173,143.77173,0,0,1,1.87675,19.65112,84.88938,84.88938,0,0,1-1.87675,19.18379,87.66557,87.66557,0,0,1-7.822,21.36711,4.07667,4.07667,0,0,0-.7827,2.652,2.99418,2.99418,0,0,0,2.34693,2.652c1.72079.31173,2.815-.31251,3.75521-1.87234a90.13491,90.13491,0,0,0,9.69891-29.79089A108.40093,108.40093,0,0,0,58.79315,85.753ZM22.338,94.48834c-1.09423-7.01916-2.03233-13.88368-1.09423-21.05461A59.14015,59.14015,0,0,1,46.11944,31.47686a3.29673,3.29673,0,0,0,1.56444-3.90024c-.78269-2.18389-2.97348-2.65176-5.16425-1.24735A60.84871,60.84871,0,0,0,29.37822,38.49678a64.523,64.523,0,0,0-14.7068,39.7707c-.31174,7.6434,1.72287,15.12892,2.19077,22.61463.31251,4.99219.46791,9.98419-1.09424,14.97429-.4679,1.55983-.93809,3.27525-1.40827,4.52334a3.12377,3.12377,0,0,0,3.12886,3.43008c1.87693,0,2.65868-1.09195,3.285-2.652,3.285-8.57766,2.81711-17.6232,1.56442-26.66951ZM157.0425,67.03786Q147.65477,20.2483,102.12991,5.276A45.00768,45.00768,0,0,0,91.80237,3.09194c-1.87828-.15615-3.12867.78039-3.28426,2.4958a2.87607,2.87607,0,0,0,2.50252,3.58833c.62406.15558,1.2504.15558,1.72059.31175A70.72962,70.72962,0,0,1,133.1047,31.94476a69.18254,69.18254,0,0,1,13.9241,22.61539,74.061,74.061,0,0,1,4.69407,23.23944c.15538,2.33946,1.87825,3.7439,4.06674,3.11986,1.56444-.4679,2.34713-1.71618,2.19077-4.212a41.34713,41.34713,0,0,0-.93788-9.6696ZM115.74016,40.83473a46.09788,46.09788,0,0,0-10.16908-7.17379,3.002,3.002,0,0,0-4.22521,1.09194c-.93885,1.55983-.46866,3.276,1.25193,4.368a3.91752,3.91752,0,0,0,1.09424.62422c10.4837,6.3936,17.83548,15.283,21.27894,27.13666,3.12887,11.38806,3.9108,23.08329,4.22309,34.7806a167.16816,167.16816,0,0,1-2.34692,33.06462c-.31174,2.34023.624,3.7439,2.50251,4.0564,2.03521.31175,3.44347-.78039,3.755-3.11985a162.60561,162.60561,0,0,0,2.34712-27.91913,217.74083,217.74083,0,0,0-2.65869-34.62312c-2.03461-12.79173-7.51041-23.55117-17.053-32.2865ZM89.76794,53.62646a28.15742,28.15742,0,0,0-18.92915-.15615c-2.66077.78037-3.44346,3.58546-1.72059,5.30163,1.24984,1.24809,2.50253,1.09195,3.91061.62406a21.7273,21.7273,0,0,1,28.47246,16.8428,163.57907,163.57907,0,0,1,2.34693,17.31375A137.996,137.996,0,0,1,103.692,118.974a149.65135,149.65135,0,0,1-7.04022,31.97477c-.1554.62405-.4679,1.092-.31155,1.71618a3.009,3.009,0,0,0,2.81483,2.65177,3.073,3.073,0,0,0,3.4427-2.34022,143.91448,143.91448,0,0,0,8.13447-46.946,167.06448,167.06448,0,0,0-2.65867-29.6353c-2.03462-11.07347-7.97831-18.87149-18.30566-22.77079ZM46.431,72.65334C50.03005,55.02805,68.64821,42.7065,86.48292,46.294a35.29014,35.29014,0,0,1,20.18241,11.85368,8.8989,8.8989,0,0,0,1.72,1.71617,3.19219,3.19219,0,0,0,3.755-.93579c1.09424-1.40444.93885-2.80812-.31155-4.5243-7.19867-8.733-16.42891-13.87928-27.84841-14.81508-14.55046-1.2481-26.59781,3.90025-35.82653,15.283A38.57467,38.57467,0,0,0,39.861,85.4407c.7804,5.30373,1.72077,10.45208,1.72077,15.75372,0,3.74391,0,7.488-.31174,11.07347a3.00588,3.00588,0,0,0,2.81408,3.276,3.03818,3.03818,0,0,0,3.44346-2.652,100.85173,100.85173,0,0,0-.15616-20.58748c-.47018-4.21179-1.87827-8.26743-1.56443-12.16769a39.31,39.31,0,0,1,.62406-7.48342Zm97.78146,20.43132a3.18855,3.18855,0,0,0,2.97269-3.43217V88.56056c-.62425-5.92722-1.2506-11.8531-2.19077-17.77879-2.03235-13.10195-7.19563-24.64312-16.1126-34.31273C115.89557,21.96341,99.46894,14.78945,79.91136,14.63329a64.57052,64.57052,0,0,0-25.3436,5.14835,3.233,3.233,0,0,0-2.03462,4.20951,3.15932,3.15932,0,0,0,4.38154,1.56A60.10933,60.10933,0,0,1,85.54483,21.183a57.79887,57.79887,0,0,1,35.04479,15.91007c10.32431,9.82517,16.268,21.835,18.30566,36.02812q1.16919,8.42465,1.876,16.84377c.46789,1.87157,1.72058,3.11966,3.44119,3.11966ZM71.15054,82.94489a11.40154,11.40154,0,0,1,0-5.614,9.11075,9.11075,0,0,1,9.70119-6.55146c4.22292.15558,7.66638,3.2762,8.60218,7.9559a150.63857,150.63857,0,0,1,2.661,26.51468,3.1253,3.1253,0,0,0,3.12887,3.43236c1.879,0,2.97252-1.40367,3.12867-3.276V102.5981h.15635c-.3125-4.05545-.4679-8.11185-.93581-12.16521-.47018-4.05565-1.09653-8.11206-1.72287-12.16541a15.95817,15.95817,0,0,0-17.67931-13.726c-8.13448.93654-14.7068,9.04763-13.45393,17.002.62406,4.83584,1.40809,9.6696,1.876,14.50563a100.76525,100.76525,0,0,1-4.69311,39.77A111.03411,111.03411,0,0,1,55.976,149.85661a3.05946,3.05946,0,0,0,.15616,3.43236,2.84779,2.84779,0,0,0,2.97251,1.24752,3.58665,3.58665,0,0,0,2.815-2.33946C72.715,130.2034,75.21748,107.1224,71.15054,82.94717ZM34.38592,91.52482c-.7825-5.30393-1.565-10.76381-1.09634-16.06545A45.82532,45.82532,0,0,1,49.87465,44.26631a45.38948,45.38948,0,0,1,28.16-10.76171,44.31355,44.31355,0,0,1,12.82985,1.24828,3.86115,3.86115,0,0,0,1.87676.15616,2.85951,2.85951,0,0,0,2.50252-2.80814,3.03932,3.03932,0,0,0-2.34694-3.276,45.9556,45.9556,0,0,0-13.14161-1.55984,34.7057,34.7057,0,0,0-9.6989.93577c-15.801,2.96429-27.84821,11.54421-36.14113,25.42352a50.63513,50.63513,0,0,0-6.56928,32.59653C27.81379,90.589,28.754,94.80084,29.06571,99.169c.62406,10.75944-.78174,21.20867-5.63119,30.87827a3.03324,3.03324,0,0,0-.47019,2.02771,2.85292,2.85292,0,0,0,2.65868,2.652,3.38105,3.38105,0,0,0,3.4427-2.02772c6.57-12.9458,7.51023-26.98125,5.32021-41.17439Zm0,0"/></g><path class="cls-2" d="M27.18744,31.63306C41.11157,16.81946,58.16449,9.0199,78.663,8.39575c2.34717,0,3.75525-1.24817,3.75525-3.27588C82.416,3.09192,81.00787,2,78.50458,2A77.94379,77.94379,0,0,0,10.13446,45.04443a5.77132,5.77132,0,0,0-.624,2.18409,2.7244,2.7244,0,0,0,1.56421,2.80737c1.72076.93652,3.5968.31225,4.53772-1.71546v.00232A67.882,67.882,0,0,1,27.18744,31.63306Z"/><path class="cls-2" d="M79.91138,14.6333a64.57,64.57,0,0,0-25.34363,5.14832,3.2331,3.2331,0,0,0-2.03461,4.20959,3.1594,3.1594,0,0,0,4.38153,1.55994,60.1104,60.1104,0,0,1,28.63019-4.368A57.799,57.799,0,0,1,120.5896,37.093,58.88274,58.88274,0,0,1,135.65485,60h6.82385a61.76983,61.76983,0,0,0-13.59693-23.531C115.89557,21.96338,99.46893,14.78943,79.91138,14.6333Z"/><path class="cls-2" d="M89.76794,53.62427v.00219a28.1576,28.1576,0,0,0-18.92913-.15625c-2.66077.78052-3.44349,3.58558-1.72058,5.30176,1.24981,1.248,2.5025,1.09192,3.91058.624A22.13267,22.13267,0,0,1,88.68811,60H99.93243A28.63882,28.63882,0,0,0,89.76794,53.62427Z"/><path class="cls-2" d="M8.88391,55.81055c-1.72064-.46875-3.285.62329-3.91138,2.4956C4.81232,58.87061,4.67078,59.4353,4.52411,60H11.1134A3.28977,3.28977,0,0,0,8.88391,55.81055Z"/><path class="cls-2" d="M29.84613,48.63428A58.71554,58.71554,0,0,1,46.11945,31.47681a3.29665,3.29665,0,0,0,1.56445-3.90015c-.78272-2.184-2.97351-2.65186-5.16425-1.24731A60.84289,60.84289,0,0,0,29.37823,38.49683,64.50631,64.50631,0,0,0,17.69727,60h6.65606A62.03815,62.03815,0,0,1,29.84613,48.63428Z"/><path class="cls-2" d="M102.12988,5.276A45.009,45.009,0,0,0,91.80237,3.09192c-1.8783-.15613-3.12866.78039-3.28424,2.49573A2.876,2.876,0,0,0,91.02063,9.176c.62408.15564,1.25043.15564,1.72058.31176a70.72924,70.72924,0,0,1,40.36347,22.457,69.1805,69.1805,0,0,1,13.92413,22.61524Q148.0401,57.24658,148.83527,60h6.53057Q144.12574,19.09863,102.12988,5.276Z"/><path class="cls-2" d="M115.74017,40.83472A46.09864,46.09864,0,0,0,105.571,33.66089a3.0019,3.0019,0,0,0-4.22515,1.092c-.93885,1.55981-.46869,3.27588,1.25189,4.36792a3.92165,3.92165,0,0,0,1.09424.62427A46.95911,46.95911,0,0,1,122.37378,60h6.80768A52.617,52.617,0,0,0,115.74017,40.83472Z"/><path class="cls-2" d="M112.14038,58.9281c1.09424-1.40442.93884-2.80823-.31158-4.52429-7.19867-8.73316-16.4289-13.8794-27.84839-14.81519C69.42993,38.34058,57.38257,43.489,48.15387,54.8717A41.09643,41.09643,0,0,0,44.60156,60h7.54022c7.67536-10.36462,21.2165-16.34607,34.34113-13.706a35.2907,35.2907,0,0,1,20.18243,11.85376,8.899,8.899,0,0,0,1.72,1.71618A2.60451,2.60451,0,0,0,108.74268,60h1.75146A3.53427,3.53427,0,0,0,112.14038,58.9281Z"/><path class="cls-2" d="M49.87463,44.26636a45.38883,45.38883,0,0,1,28.16-10.76172,44.30568,44.30568,0,0,1,12.82983,1.24829,3.86211,3.86211,0,0,0,1.87677.156,2.85935,2.85935,0,0,0,2.5025-2.80811A3.03909,3.03909,0,0,0,92.89679,28.825a45.94691,45.94691,0,0,0-13.1416-1.55981,34.70234,34.70234,0,0,0-9.69892.93567c-15.801,2.96423-27.8482,11.54431-36.14111,25.42346A52.36716,52.36716,0,0,0,30.74011,60h6.81983A45.95626,45.95626,0,0,1,49.87463,44.26636Z"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/fingerprint7.svg b/polkit-agent/assets/biowaiting/fingerprint7.svg
+new file mode 100644
+index 0000000..b63d893
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/fingerprint7.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}</style></defs><g id="文字标注"><g class="cls-1"><path d="M76.78191,140.809a3.00926,3.00926,0,0,0-4.06694,1.87157l-4.22311,10.29593a2.95177,2.95177,0,0,0,2.34693,4.2097c1.87618,0,2.81427-.62348,3.44061-2.02792q2.35321-4.96514,4.2252-10.13749a3.22339,3.22339,0,0,0-1.72269-4.21179Zm71.02958-38.52241a3.08449,3.08449,0,0,0-3.44119-2.96447,3.01947,3.01947,0,0,0-2.81653,3.276c.15559,5.14854-.15616,10.13768-.31232,15.286,0,2.33947,1.09425,3.58775,2.971,3.74391,1.87844,0,3.28728-1.24829,3.28728-3.58851,0-3.43141.46791-7.01916.31175-10.29517a31.74592,31.74592,0,0,0,0-5.46008ZM42.99058,121.93748a3.19813,3.19813,0,0,0-3.91137,2.18407c-.3125.7804-.4679,1.71618-.7825,2.49562a101.97516,101.97516,0,0,1-5.00713,12.01c-1.09424,2.34022.1554,4.67969,2.66077,4.67969,1.40828.15616,2.34636-.77963,2.97271-2.02772a81.29759,81.29759,0,0,0,6.09985-15.4437,3.0299,3.0299,0,0,0-2.03233-3.898Zm51.78525-7.17321a3.13259,3.13259,0,0,0-3.44346,2.80735,161.02757,161.02757,0,0,1-4.84945,22.9279c-1.25193,4.36718-2.81636,8.73532-4.38079,13.10328a2.97748,2.97748,0,0,0,1.25192,3.898,3.04925,3.04925,0,0,0,3.75521-.3125,5.627,5.627,0,0,0,1.25041-2.33946,128.60479,128.60479,0,0,0,4.85173-14.97123,161.52838,161.52838,0,0,0,4.37926-21.68171,3.2645,3.2645,0,0,0-2.81483-3.43159ZM11.07466,60.17791a3.31205,3.31205,0,0,0-2.19078-4.36738c-1.72059-.46865-3.285.62329-3.91137,2.49561A79.568,79.568,0,0,0,2,80.45155a66.61318,66.61318,0,0,0,.31174,7.6432A76.2778,76.2778,0,0,0,5.91136,104.626,2.67954,2.67954,0,0,0,8.57,106.6545c2.661.15558,3.91289-1.87233,3.13095-4.68045a70.50526,70.50526,0,0,1-.62633-41.79842ZM85.701,104.15584a75.8642,75.8642,0,0,0-.4679-9.98362,114.4834,114.4834,0,0,0-2.19078-14.6595,3.09174,3.09174,0,0,0-3.59962-2.49581,3.03668,3.03668,0,0,0-2.34617,3.90025,116.66849,116.66849,0,0,1,2.34617,18.24725,106.72189,106.72189,0,0,1-2.97252,31.50478c-.46789,2.02773.31174,3.74391,2.03443,4.2118,1.87694.4679,3.44137-.62405,4.06772-2.80812a109.18033,109.18033,0,0,0,3.12867-27.917Zm32.854-36.96258a3.10567,3.10567,0,0,0-3.91136-2.02773,2.97022,2.97022,0,0,0-2.03235,3.90006c2.50253,9.35957,3.44041,19.02707,4.067,28.85281a155.42236,155.42236,0,0,1-5.0079,47.25852c-.46789,2.02792.31232,3.90025,2.03519,4.2118a3.12981,3.12981,0,0,0,4.067-2.65178,158.74287,158.74287,0,0,0,5.31944-41.48688,159.06625,159.06625,0,0,0-2.03234-26.98258,60.29831,60.29831,0,0,0-2.5046-11.07422ZM15.61237,48.32272A67.883,67.883,0,0,1,27.18744,31.633C41.11155,16.81945,58.16452,9.0199,78.66305,8.39586c2.34712,0,3.75521-1.24828,3.75521-3.276C82.416,3.09194,81.00789,2,78.5046,2A77.9438,77.9438,0,0,0,10.13447,45.04442a5.77164,5.77164,0,0,0-.62406,2.18407,2.72436,2.72436,0,0,0,1.56425,2.80736c1.72077.93654,3.59676.31231,4.53771-1.71543ZM58.79086,85.753c-1.25059-7.48553-.31175-14.19161,4.85155-20.11959a2.805,2.805,0,0,0,.62425-1.40368c.15616-1.55983-.15635-2.80812-1.7206-3.43216a2.98066,2.98066,0,0,0-3.91136.93635c-5.63137,6.55146-7.66581,14.19542-6.41388,22.77308a143.77173,143.77173,0,0,1,1.87675,19.65112,84.88938,84.88938,0,0,1-1.87675,19.18379,87.66557,87.66557,0,0,1-7.822,21.36711,4.07667,4.07667,0,0,0-.7827,2.652,2.99418,2.99418,0,0,0,2.34693,2.652c1.72079.31173,2.815-.31251,3.75521-1.87234a90.13491,90.13491,0,0,0,9.69891-29.79089A108.40093,108.40093,0,0,0,58.79315,85.753ZM22.338,94.48834c-1.09423-7.01916-2.03233-13.88368-1.09423-21.05461A59.14015,59.14015,0,0,1,46.11944,31.47686a3.29673,3.29673,0,0,0,1.56444-3.90024c-.78269-2.18389-2.97348-2.65176-5.16425-1.24735A60.84871,60.84871,0,0,0,29.37822,38.49678a64.523,64.523,0,0,0-14.7068,39.7707c-.31174,7.6434,1.72287,15.12892,2.19077,22.61463.31251,4.99219.46791,9.98419-1.09424,14.97429-.4679,1.55983-.93809,3.27525-1.40827,4.52334a3.12377,3.12377,0,0,0,3.12886,3.43008c1.87693,0,2.65868-1.09195,3.285-2.652,3.285-8.57766,2.81711-17.6232,1.56442-26.66951ZM157.0425,67.03786Q147.65477,20.2483,102.12991,5.276A45.00768,45.00768,0,0,0,91.80237,3.09194c-1.87828-.15615-3.12867.78039-3.28426,2.4958a2.87607,2.87607,0,0,0,2.50252,3.58833c.62406.15558,1.2504.15558,1.72059.31175A70.72962,70.72962,0,0,1,133.1047,31.94476a69.18254,69.18254,0,0,1,13.9241,22.61539,74.061,74.061,0,0,1,4.69407,23.23944c.15538,2.33946,1.87825,3.7439,4.06674,3.11986,1.56444-.4679,2.34713-1.71618,2.19077-4.212a41.34713,41.34713,0,0,0-.93788-9.6696ZM115.74016,40.83473a46.09788,46.09788,0,0,0-10.16908-7.17379,3.002,3.002,0,0,0-4.22521,1.09194c-.93885,1.55983-.46866,3.276,1.25193,4.368a3.91752,3.91752,0,0,0,1.09424.62422c10.4837,6.3936,17.83548,15.283,21.27894,27.13666,3.12887,11.38806,3.9108,23.08329,4.22309,34.7806a167.16816,167.16816,0,0,1-2.34692,33.06462c-.31174,2.34023.624,3.7439,2.50251,4.0564,2.03521.31175,3.44347-.78039,3.755-3.11985a162.60561,162.60561,0,0,0,2.34712-27.91913,217.74083,217.74083,0,0,0-2.65869-34.62312c-2.03461-12.79173-7.51041-23.55117-17.053-32.2865ZM89.76794,53.62646a28.15742,28.15742,0,0,0-18.92915-.15615c-2.66077.78037-3.44346,3.58546-1.72059,5.30163,1.24984,1.24809,2.50253,1.09195,3.91061.62406a21.7273,21.7273,0,0,1,28.47246,16.8428,163.57907,163.57907,0,0,1,2.34693,17.31375A137.996,137.996,0,0,1,103.692,118.974a149.65135,149.65135,0,0,1-7.04022,31.97477c-.1554.62405-.4679,1.092-.31155,1.71618a3.009,3.009,0,0,0,2.81483,2.65177,3.073,3.073,0,0,0,3.4427-2.34022,143.91448,143.91448,0,0,0,8.13447-46.946,167.06448,167.06448,0,0,0-2.65867-29.6353c-2.03462-11.07347-7.97831-18.87149-18.30566-22.77079ZM46.431,72.65334C50.03005,55.02805,68.64821,42.7065,86.48292,46.294a35.29014,35.29014,0,0,1,20.18241,11.85368,8.8989,8.8989,0,0,0,1.72,1.71617,3.19219,3.19219,0,0,0,3.755-.93579c1.09424-1.40444.93885-2.80812-.31155-4.5243-7.19867-8.733-16.42891-13.87928-27.84841-14.81508-14.55046-1.2481-26.59781,3.90025-35.82653,15.283A38.57467,38.57467,0,0,0,39.861,85.4407c.7804,5.30373,1.72077,10.45208,1.72077,15.75372,0,3.74391,0,7.488-.31174,11.07347a3.00588,3.00588,0,0,0,2.81408,3.276,3.03818,3.03818,0,0,0,3.44346-2.652,100.85173,100.85173,0,0,0-.15616-20.58748c-.47018-4.21179-1.87827-8.26743-1.56443-12.16769a39.31,39.31,0,0,1,.62406-7.48342Zm97.78146,20.43132a3.18855,3.18855,0,0,0,2.97269-3.43217V88.56056c-.62425-5.92722-1.2506-11.8531-2.19077-17.77879-2.03235-13.10195-7.19563-24.64312-16.1126-34.31273C115.89557,21.96341,99.46894,14.78945,79.91136,14.63329a64.57052,64.57052,0,0,0-25.3436,5.14835,3.233,3.233,0,0,0-2.03462,4.20951,3.15932,3.15932,0,0,0,4.38154,1.56A60.10933,60.10933,0,0,1,85.54483,21.183a57.79887,57.79887,0,0,1,35.04479,15.91007c10.32431,9.82517,16.268,21.835,18.30566,36.02812q1.16919,8.42465,1.876,16.84377c.46789,1.87157,1.72058,3.11966,3.44119,3.11966ZM71.15054,82.94489a11.40154,11.40154,0,0,1,0-5.614,9.11075,9.11075,0,0,1,9.70119-6.55146c4.22292.15558,7.66638,3.2762,8.60218,7.9559a150.63857,150.63857,0,0,1,2.661,26.51468,3.1253,3.1253,0,0,0,3.12887,3.43236c1.879,0,2.97252-1.40367,3.12867-3.276V102.5981h.15635c-.3125-4.05545-.4679-8.11185-.93581-12.16521-.47018-4.05565-1.09653-8.11206-1.72287-12.16541a15.95817,15.95817,0,0,0-17.67931-13.726c-8.13448.93654-14.7068,9.04763-13.45393,17.002.62406,4.83584,1.40809,9.6696,1.876,14.50563a100.76525,100.76525,0,0,1-4.69311,39.77A111.03411,111.03411,0,0,1,55.976,149.85661a3.05946,3.05946,0,0,0,.15616,3.43236,2.84779,2.84779,0,0,0,2.97251,1.24752,3.58665,3.58665,0,0,0,2.815-2.33946C72.715,130.2034,75.21748,107.1224,71.15054,82.94717ZM34.38592,91.52482c-.7825-5.30393-1.565-10.76381-1.09634-16.06545A45.82532,45.82532,0,0,1,49.87465,44.26631a45.38948,45.38948,0,0,1,28.16-10.76171,44.31355,44.31355,0,0,1,12.82985,1.24828,3.86115,3.86115,0,0,0,1.87676.15616,2.85951,2.85951,0,0,0,2.50252-2.80814,3.03932,3.03932,0,0,0-2.34694-3.276,45.9556,45.9556,0,0,0-13.14161-1.55984,34.7057,34.7057,0,0,0-9.6989.93577c-15.801,2.96429-27.84821,11.54421-36.14113,25.42352a50.63513,50.63513,0,0,0-6.56928,32.59653C27.81379,90.589,28.754,94.80084,29.06571,99.169c.62406,10.75944-.78174,21.20867-5.63119,30.87827a3.03324,3.03324,0,0,0-.47019,2.02771,2.85292,2.85292,0,0,0,2.65868,2.652,3.38105,3.38105,0,0,0,3.4427-2.02772c6.57-12.9458,7.51023-26.98125,5.32021-41.17439Zm0,0"/></g><path class="cls-2" d="M27.18744,31.63306C41.11157,16.81946,58.16449,9.0199,78.663,8.39575c2.34717,0,3.75525-1.24817,3.75525-3.27588C82.416,3.09192,81.00787,2,78.50458,2A77.94379,77.94379,0,0,0,10.13446,45.04443a5.77132,5.77132,0,0,0-.624,2.18409,2.7244,2.7244,0,0,0,1.56421,2.80737c1.72076.93652,3.5968.31225,4.53772-1.71546v.00232A67.882,67.882,0,0,1,27.18744,31.63306Z"/><path class="cls-2" d="M21.24377,73.43372A59.1404,59.1404,0,0,1,46.11945,31.47681a3.29665,3.29665,0,0,0,1.56445-3.90015c-.78272-2.184-2.97351-2.65186-5.16425-1.24731A60.84289,60.84289,0,0,0,29.37823,38.49683,64.52222,64.52222,0,0,0,14.67145,78.26746c-.02362.579-.01044,1.15539-.00885,1.73254h6.21386A47.4584,47.4584,0,0,1,21.24377,73.43372Z"/><path class="cls-2" d="M11.07465,60.178a3.312,3.312,0,0,0-2.19074-4.36743c-1.72064-.46875-3.285.62329-3.91138,2.4956A79.36971,79.36971,0,0,0,2.0069,80H8.22131a70.73238,70.73238,0,0,1,2.85334-19.82446Z"/><path class="cls-2" d="M62.54608,60.79761a2.98066,2.98066,0,0,0-3.91138.93628A26.8757,26.8757,0,0,0,51.871,80h6.43A21.1615,21.1615,0,0,1,63.6424,65.63342a2.80487,2.80487,0,0,0,.62426-1.40368C64.42279,62.66992,64.11029,61.42163,62.54608,60.79761Z"/><path class="cls-2" d="M157.04248,67.03784Q147.65476,20.24817,102.12988,5.276A45.009,45.009,0,0,0,91.80237,3.09192c-1.8783-.15613-3.12866.78039-3.28424,2.49573A2.876,2.876,0,0,0,91.02063,9.176c.62408.15564,1.25043.15564,1.72058.31176a70.72924,70.72924,0,0,1,40.36347,22.457,69.1805,69.1805,0,0,1,13.92413,22.61524,74.06108,74.06108,0,0,1,4.694,23.2395A3.86858,3.86858,0,0,0,152.52161,80h4.71673a4.58878,4.58878,0,0,0,.74207-3.29248A41.3474,41.3474,0,0,0,157.04248,67.03784Z"/><path class="cls-2" d="M128.88177,36.469C115.89557,21.96338,99.46893,14.78943,79.91138,14.6333a64.57,64.57,0,0,0-25.34363,5.14832,3.2331,3.2331,0,0,0-2.03461,4.20959,3.1594,3.1594,0,0,0,4.38153,1.55994,60.1104,60.1104,0,0,1,28.63019-4.368A57.799,57.799,0,0,1,120.5896,37.093c10.32434,9.82519,16.268,21.83508,18.30566,36.0282.3183,2.29333.60431,4.58618.87134,6.87878h6.47894c-.36224-3.07288-.76367-6.14563-1.25116-9.21826C142.962,57.67981,137.79877,46.13867,128.88177,36.469Z"/><path class="cls-2" d="M78.1908,64.5415c-7.60834.876-13.847,8.02832-13.59766,15.4585h6.20538a7.61429,7.61429,0,0,1,.352-2.66907,9.1107,9.1107,0,0,1,9.70124-6.55139c4.2229.15552,7.66638,3.27612,8.60217,7.95581.08295.42066.1535.84326.23212,1.26465h6.45031q-.13311-.86626-.26629-1.73254A15.95811,15.95811,0,0,0,78.1908,64.5415Z"/><path class="cls-2" d="M121.05963,78.26746A60.2951,60.2951,0,0,0,118.555,67.19324a3.10565,3.10565,0,0,0-3.91137-2.02771,2.97016,2.97016,0,0,0-2.03229,3.9A103.82461,103.82461,0,0,1,114.87317,80h6.44037C121.22894,79.42236,121.14935,78.844,121.05963,78.26746Z"/><path class="cls-2" d="M86.48291,46.294a35.2907,35.2907,0,0,1,20.18243,11.85376,8.899,8.899,0,0,0,1.72,1.71618,3.1924,3.1924,0,0,0,3.75507-.93579c1.09424-1.40442.93884-2.80823-.31158-4.52429-7.19867-8.73316-16.4289-13.8794-27.84839-14.81519C69.42993,38.34058,57.38257,43.489,48.15387,54.8717A38.07922,38.07922,0,0,0,39.44556,80H45.8092a39.08563,39.08563,0,0,1,.62177-7.34668C50.03,55.02808,68.64819,42.70654,86.48291,46.294Z"/><path class="cls-2" d="M132.79315,73.12122c-2.03461-12.79175-7.51044-23.55115-17.053-32.2865A46.09864,46.09864,0,0,0,105.571,33.66089a3.0019,3.0019,0,0,0-4.22515,1.092c-.93885,1.55981-.46869,3.27588,1.25189,4.36792a3.92165,3.92165,0,0,0,1.09424.62427c10.4837,6.39355,17.83551,15.283,21.279,27.13659A103.2,103.2,0,0,1,127.62378,80H133.759C133.46936,77.69324,133.15253,75.40161,132.79315,73.12122Z"/><path class="cls-2" d="M108.07361,76.39514c-2.03461-11.07348-7.97833-18.87146-18.30567-22.77087v.00219a28.1576,28.1576,0,0,0-18.92913-.15625c-2.66077.78052-3.44349,3.58558-1.72058,5.30176,1.24981,1.248,2.5025,1.09192,3.91058.624a21.72724,21.72724,0,0,1,28.47247,16.84277c.23816,1.25378.45477,2.50757.66333,3.76123H108.678Q108.39414,78.19642,108.07361,76.39514Z"/><path class="cls-2" d="M92.89679,28.825a45.94691,45.94691,0,0,0-13.1416-1.55981,34.70234,34.70234,0,0,0-9.69892.93567c-15.801,2.96423-27.8482,11.54431-36.14111,25.42346A49.96274,49.96274,0,0,0,26.92523,80h6.24695a39.78137,39.78137,0,0,1,.11737-4.54065,45.82518,45.82518,0,0,1,16.58508-31.193,45.38883,45.38883,0,0,1,28.16-10.76172,44.30568,44.30568,0,0,1,12.82983,1.24829,3.86211,3.86211,0,0,0,1.87677.156,2.85935,2.85935,0,0,0,2.5025-2.80811A3.03909,3.03909,0,0,0,92.89679,28.825Z"/><path class="cls-2" d="M83.0423,79.5127a3.09175,3.09175,0,0,0-3.59961-2.49585A2.99226,2.99226,0,0,0,76.99078,80h6.15058C83.10565,79.83765,83.079,79.67505,83.0423,79.5127Z"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/fingerprint8.svg b/polkit-agent/assets/biowaiting/fingerprint8.svg
+new file mode 100644
+index 0000000..a9023c0
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/fingerprint8.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}</style></defs><g id="文字标注"><g class="cls-1"><path d="M76.78191,140.809a3.00927,3.00927,0,0,0-4.06695,1.87157l-4.2231,10.29593a2.95177,2.95177,0,0,0,2.34692,4.2097c1.87618,0,2.81427-.62348,3.44061-2.02792q2.35322-4.96514,4.2252-10.13749a3.22338,3.22338,0,0,0-1.72268-4.21179Zm71.02957-38.52241a3.08449,3.08449,0,0,0-3.44119-2.96447,3.01947,3.01947,0,0,0-2.81653,3.276c.15559,5.14854-.15616,10.13768-.31232,15.286,0,2.33947,1.09425,3.58775,2.971,3.74391,1.87844,0,3.28729-1.24829,3.28729-3.58851,0-3.43141.4679-7.01916.31174-10.29517a31.74592,31.74592,0,0,0,0-5.46008ZM42.99057,121.93748a3.19812,3.19812,0,0,0-3.91136,2.18407c-.31251.7804-.4679,1.71618-.7825,2.49562a101.9769,101.9769,0,0,1-5.00714,12.01c-1.09424,2.34022.1554,4.67969,2.66078,4.67969,1.40827.15616,2.34636-.77963,2.9727-2.02772a81.29627,81.29627,0,0,0,6.09985-15.4437,3.02989,3.02989,0,0,0-2.03233-3.898Zm51.78526-7.17321a3.1326,3.1326,0,0,0-3.44347,2.80735,161.02757,161.02757,0,0,1-4.84945,22.9279c-1.25192,4.36718-2.81636,8.73532-4.38079,13.10328a2.97748,2.97748,0,0,0,1.25192,3.898,3.04925,3.04925,0,0,0,3.75521-.3125,5.62684,5.62684,0,0,0,1.25041-2.33946,128.60675,128.60675,0,0,0,4.85174-14.97123,161.5315,161.5315,0,0,0,4.37926-21.68171,3.2645,3.2645,0,0,0-2.81483-3.43159ZM11.07465,60.17791a3.312,3.312,0,0,0-2.19078-4.36738c-1.72059-.46865-3.285.62329-3.91137,2.49561A79.568,79.568,0,0,0,2,80.45155a66.61318,66.61318,0,0,0,.31174,7.6432A76.2778,76.2778,0,0,0,5.91135,104.626,2.67954,2.67954,0,0,0,8.57,106.6545c2.661.15558,3.91289-1.87233,3.131-4.68045a70.50518,70.50518,0,0,1-.62634-41.79842ZM85.701,104.15584a75.86247,75.86247,0,0,0-.4679-9.98362,114.4834,114.4834,0,0,0-2.19078-14.6595,3.09173,3.09173,0,0,0-3.59961-2.49581,3.03667,3.03667,0,0,0-2.34618,3.90025,116.66849,116.66849,0,0,1,2.34618,18.24725,106.72223,106.72223,0,0,1-2.97253,31.50478c-.46789,2.02773.31175,3.74391,2.03443,4.2118,1.87694.4679,3.44137-.62405,4.06772-2.80812a109.17988,109.17988,0,0,0,3.12867-27.917Zm32.854-36.96258a3.10567,3.10567,0,0,0-3.91136-2.02773,2.97022,2.97022,0,0,0-2.03235,3.90006c2.50253,9.35957,3.44042,19.02707,4.067,28.85281a155.422,155.422,0,0,1-5.0079,47.25852c-.46789,2.02792.31232,3.90025,2.0352,4.2118a3.1298,3.1298,0,0,0,4.06695-2.65178,158.74245,158.74245,0,0,0,5.31944-41.48688,159.06625,159.06625,0,0,0-2.03234-26.98258,60.29831,60.29831,0,0,0-2.5046-11.07422ZM15.61236,48.32272A67.88326,67.88326,0,0,1,27.18743,31.633C41.11154,16.81945,58.16451,9.0199,78.663,8.39586c2.34712,0,3.75521-1.24828,3.75521-3.276C82.416,3.09194,81.00788,2,78.50459,2A77.9438,77.9438,0,0,0,10.13446,45.04442a5.77164,5.77164,0,0,0-.62406,2.18407,2.72437,2.72437,0,0,0,1.56425,2.80736c1.72077.93654,3.59676.31231,4.53771-1.71543ZM58.79085,85.753c-1.25058-7.48553-.31174-14.19161,4.85155-20.11959a2.80489,2.80489,0,0,0,.62425-1.40368c.15616-1.55983-.15634-2.80812-1.72059-3.43216a2.98066,2.98066,0,0,0-3.91136.93635c-5.63138,6.55146-7.66581,14.19542-6.41389,22.77308a143.77173,143.77173,0,0,1,1.87675,19.65112,84.8888,84.8888,0,0,1-1.87675,19.18379,87.66557,87.66557,0,0,1-7.822,21.36711,4.07666,4.07666,0,0,0-.78269,2.652,2.99416,2.99416,0,0,0,2.34693,2.652c1.72078.31173,2.815-.31251,3.75521-1.87234a90.1349,90.1349,0,0,0,9.6989-29.79089A108.40061,108.40061,0,0,0,58.79314,85.753ZM22.338,94.48834c-1.09424-7.01916-2.03234-13.88368-1.09424-21.05461A59.14015,59.14015,0,0,1,46.11943,31.47686a3.29673,3.29673,0,0,0,1.56444-3.90024c-.78269-2.18389-2.97347-2.65176-5.16425-1.24735A60.84871,60.84871,0,0,0,29.37821,38.49678a64.52309,64.52309,0,0,0-14.7068,39.7707c-.31174,7.6434,1.72288,15.12892,2.19078,22.61463.3125,4.99219.4679,9.98419-1.09425,14.97429-.4679,1.55983-.93809,3.27525-1.40827,4.52334a3.12377,3.12377,0,0,0,3.12886,3.43008c1.87694,0,2.65868-1.09195,3.285-2.652,3.285-8.57766,2.81712-17.6232,1.56443-26.66951ZM157.04249,67.03786Q147.65476,20.2483,102.1299,5.276A45.00768,45.00768,0,0,0,91.80236,3.09194c-1.87827-.15615-3.12867.78039-3.28426,2.4958a2.87607,2.87607,0,0,0,2.50252,3.58833c.62406.15558,1.25041.15558,1.72059.31175a70.72962,70.72962,0,0,1,40.36348,22.45694A69.18273,69.18273,0,0,1,147.0288,54.56015a74.061,74.061,0,0,1,4.69406,23.23944c.15538,2.33946,1.87825,3.7439,4.06675,3.11986,1.56443-.4679,2.34712-1.71618,2.19076-4.212a41.34713,41.34713,0,0,0-.93788-9.6696ZM115.74016,40.83473a46.09794,46.09794,0,0,0-10.16909-7.17379,3.002,3.002,0,0,0-4.22521,1.09194c-.93885,1.55983-.46866,3.276,1.25194,4.368a3.91739,3.91739,0,0,0,1.09424.62422c10.48369,6.3936,17.83547,15.283,21.27894,27.13666,3.12886,11.38806,3.91079,23.08329,4.22309,34.7806a167.16817,167.16817,0,0,1-2.34693,33.06462c-.31174,2.34023.62405,3.7439,2.50252,4.0564,2.0352.31175,3.44347-.78039,3.755-3.11985a162.60561,162.60561,0,0,0,2.34712-27.91913,217.742,217.742,0,0,0-2.65868-34.62312c-2.03462-12.79173-7.51042-23.55117-17.053-32.2865ZM89.76793,53.62646a28.15742,28.15742,0,0,0-18.92915-.15615c-2.66076.78037-3.44345,3.58546-1.72059,5.30163C70.368,60.02,71.62072,59.86389,73.0288,59.396a21.72731,21.72731,0,0,1,28.47247,16.8428,163.579,163.579,0,0,1,2.34692,17.31375A137.99692,137.99692,0,0,1,103.692,118.974a149.65137,149.65137,0,0,1-7.04023,31.97477c-.1554.62405-.4679,1.092-.31155,1.71618a3.009,3.009,0,0,0,2.81483,2.65177,3.073,3.073,0,0,0,3.44271-2.34022,143.91473,143.91473,0,0,0,8.13446-46.946,167.06542,167.06542,0,0,0-2.65866-29.6353c-2.03463-11.07347-7.97832-18.87149-18.30567-22.77079ZM46.431,72.65334C50.03,55.02805,68.6482,42.7065,86.48291,46.294a35.29014,35.29014,0,0,1,20.18241,11.85368,8.8989,8.8989,0,0,0,1.72,1.71617,3.19219,3.19219,0,0,0,3.755-.93579c1.09424-1.40444.93885-2.80812-.31155-4.5243-7.19867-8.733-16.42891-13.87928-27.84841-14.81508-14.55045-1.2481-26.59781,3.90025-35.82653,15.283A38.57474,38.57474,0,0,0,39.861,85.4407c.7804,5.30373,1.72078,10.45208,1.72078,15.75372,0,3.74391,0,7.488-.31175,11.07347a3.00588,3.00588,0,0,0,2.81408,3.276,3.03818,3.03818,0,0,0,3.44346-2.652,100.85173,100.85173,0,0,0-.15616-20.58748c-.47018-4.21179-1.87827-8.26743-1.56443-12.16769a39.31083,39.31083,0,0,1,.62406-7.48342Zm97.78146,20.43132a3.18855,3.18855,0,0,0,2.97269-3.43217V88.56056c-.62425-5.92722-1.2506-11.8531-2.19077-17.77879-2.03234-13.10195-7.19563-24.64312-16.1126-34.31273C115.89556,21.96341,99.46893,14.78945,79.91135,14.63329a64.57055,64.57055,0,0,0-25.3436,5.14835,3.23306,3.23306,0,0,0-2.03462,4.20951,3.15933,3.15933,0,0,0,4.38155,1.56A60.10931,60.10931,0,0,1,85.54483,21.183a57.79887,57.79887,0,0,1,35.04478,15.91007c10.32431,9.82517,16.268,21.835,18.30566,36.02812q1.16919,8.42465,1.876,16.84377c.46789,1.87157,1.72058,3.11966,3.44119,3.11966ZM71.15053,82.94489a11.40154,11.40154,0,0,1,0-5.614,9.11075,9.11075,0,0,1,9.70119-6.55146c4.22292.15558,7.66638,3.2762,8.60218,7.9559a150.63952,150.63952,0,0,1,2.661,26.51468,3.1253,3.1253,0,0,0,3.12886,3.43236c1.879,0,2.97252-1.40367,3.12867-3.276V102.5981h.15635c-.3125-4.05545-.4679-8.11185-.9358-12.16521-.47019-4.05565-1.09654-8.11206-1.72288-12.16541a15.95817,15.95817,0,0,0-17.67931-13.726c-8.13447.93654-14.7068,9.04763-13.45392,17.002.624,4.83584,1.40808,9.6696,1.876,14.50563a100.76542,100.76542,0,0,1-4.6931,39.77,111.03563,111.03563,0,0,1-5.9437,14.03754,3.0595,3.0595,0,0,0,.15616,3.43236,2.8478,2.8478,0,0,0,2.97252,1.24752,3.58665,3.58665,0,0,0,2.815-2.33946C72.715,130.2034,75.21748,107.1224,71.15053,82.94717ZM34.38591,91.52482c-.7825-5.30393-1.565-10.76381-1.09634-16.06545A45.82536,45.82536,0,0,1,49.87464,44.26631a45.38952,45.38952,0,0,1,28.16-10.76171,44.31362,44.31362,0,0,1,12.82986,1.24828,3.86111,3.86111,0,0,0,1.87675.15616,2.85951,2.85951,0,0,0,2.50252-2.80814,3.03932,3.03932,0,0,0-2.34694-3.276,45.95556,45.95556,0,0,0-13.14161-1.55984,34.70559,34.70559,0,0,0-9.69889.93577C54.25524,31.16513,42.20807,39.74505,33.91516,53.62436a50.635,50.635,0,0,0-6.56928,32.59653c.4679,4.36814,1.40808,8.57995,1.71983,12.94809.62405,10.75944-.78175,21.20867-5.6312,30.87827a3.03318,3.03318,0,0,0-.47018,2.02771,2.8529,2.8529,0,0,0,2.65867,2.652,3.38107,3.38107,0,0,0,3.44271-2.02772c6.57-12.9458,7.51022-26.98125,5.3202-41.17439Zm0,0"/></g><path class="cls-2" d="M78.50457,2A77.94379,77.94379,0,0,0,10.13445,45.04443a5.77132,5.77132,0,0,0-.624,2.18409,2.72441,2.72441,0,0,0,1.56421,2.80737c1.72076.93652,3.5968.31225,4.53772-1.71546v.00232A67.88222,67.88222,0,0,1,27.18743,31.63306C41.11156,16.81946,58.16448,9.0199,78.663,8.39575c2.34717,0,3.75525-1.24817,3.75525-3.27588C82.416,3.09192,81.00787,2,78.50457,2Z"/><path class="cls-2" d="M138.89526,73.12122q1.16922,8.42468,1.876,16.84375c.4679,1.87158,1.72058,3.11975,3.44123,3.11975a3.1886,3.1886,0,0,0,2.97265-3.43225V88.56055c-.6242-5.92725-1.25055-11.853-2.19073-17.77881C142.962,57.67981,137.79876,46.13867,128.88177,36.469,115.89556,21.96338,99.46893,14.78943,79.91137,14.6333a64.57,64.57,0,0,0-25.34363,5.14832,3.2331,3.2331,0,0,0-2.03461,4.20959,3.15941,3.15941,0,0,0,4.38154,1.55994,60.11034,60.11034,0,0,1,28.63018-4.368A57.799,57.799,0,0,1,120.58959,37.093C130.91393,46.91821,136.8576,58.9281,138.89526,73.12122Z"/><path class="cls-2" d="M92.89678,28.825a45.94687,45.94687,0,0,0-13.1416-1.55981,34.70227,34.70227,0,0,0-9.69891.93567C54.25524,31.165,42.20806,39.74512,33.91515,53.62427A50.63525,50.63525,0,0,0,27.34588,86.221c.46789,4.368,1.40808,8.57983,1.71985,12.948.01611.27758.025.554.03833.83105h6.19269q-.25169-4.22094-.91083-8.47522c-.78253-5.30383-1.565-10.76379-1.09638-16.06543a45.82519,45.82519,0,0,1,16.58509-31.193,45.3888,45.3888,0,0,1,28.16-10.76172,44.30565,44.30565,0,0,1,12.82983,1.24829,3.86211,3.86211,0,0,0,1.87677.156,2.85936,2.85936,0,0,0,2.50251-2.80811A3.0391,3.0391,0,0,0,92.89678,28.825Z"/><path class="cls-2" d="M86.4829,46.294a35.29073,35.29073,0,0,1,20.18244,11.85376,8.89847,8.89847,0,0,0,1.72,1.71618,3.19239,3.19239,0,0,0,3.75506-.93579c1.09424-1.40442.93885-2.80823-.31158-4.52429-7.19867-8.73316-16.4289-13.8794-27.84839-14.81519C69.42992,38.34058,57.38256,43.489,48.15386,54.8717a38.57458,38.57458,0,0,0-8.29291,30.569A121.534,121.534,0,0,1,41.55645,100h6.37079q-.12268-3.84779-.55585-7.69556c-.47021-4.21179-1.87829-8.26745-1.56445-12.16772a39.31138,39.31138,0,0,1,.624-7.4834C50.03,55.02808,68.64819,42.70654,86.4829,46.294Z"/><path class="cls-2" d="M11.07464,60.17554V60.178A3.312,3.312,0,0,0,8.8839,55.81055c-1.72064-.46875-3.285.62329-3.91137,2.4956A79.56615,79.56615,0,0,0,2,80.45154a66.60613,66.60613,0,0,0,.31177,7.64319A80.489,80.489,0,0,0,4.508,100h6.60614A70.25859,70.25859,0,0,1,11.07464,60.17554Z"/><path class="cls-2" d="M58.79314,85.75293h-.00232c-1.25054-7.48547-.3117-14.19153,4.85157-20.11951a2.80487,2.80487,0,0,0,.62426-1.40368c.15613-1.55982-.15637-2.80811-1.72058-3.43213a2.98064,2.98064,0,0,0-3.91137.93628c-5.63141,6.55151-7.66584,14.19543-6.41388,22.77319A146.55217,146.55217,0,0,1,53.92071,100h6.34271A105.137,105.137,0,0,0,58.79314,85.75293Z"/><path class="cls-2" d="M95.87005,78.26746a15.95811,15.95811,0,0,0-17.67926-13.726c-8.13452.93653-14.70685,9.04761-13.454,17.002.62408,4.83593,1.40814,9.66967,1.876,14.50561.09155,1.32031.15576,2.6366.20489,3.95093h6.08338a130.92316,130.92316,0,0,0-1.75061-17.05286v-.00232a11.40213,11.40213,0,0,1,0-5.61389,9.11068,9.11068,0,0,1,9.70123-6.55139c4.2229.15552,7.66638,3.27612,8.60217,7.95581A144.72222,144.72222,0,0,1,91.93957,100H98.3474c-.20983-3.1897-.38647-6.37939-.75445-9.56714C97.12273,86.3772,96.49639,82.3208,95.87005,78.26746Z"/><path class="cls-2" d="M121.05962,78.26746A60.29592,60.29592,0,0,0,118.555,67.19324a3.10566,3.10566,0,0,0-3.91138-2.02771,2.97017,2.97017,0,0,0-2.03229,3.9c2.5025,9.35962,3.44037,19.0271,4.067,28.85291.03375.69507.05664,1.38818.08105,2.08154h6.30756A167.10732,167.10732,0,0,0,121.05962,78.26746Z"/><path class="cls-2" d="M144.37029,99.322a3.09491,3.09491,0,0,0-1.71808.678h4.02131A3.14786,3.14786,0,0,0,144.37029,99.322Z"/><path class="cls-2" d="M157.04247,67.03784Q147.65475,20.24817,102.12988,5.276A45.0092,45.0092,0,0,0,91.80236,3.09192c-1.8783-.15613-3.12866.78039-3.28424,2.49573A2.876,2.876,0,0,0,91.02062,9.176c.62409.15564,1.25043.15564,1.72058.31176a70.72924,70.72924,0,0,1,40.36347,22.457A69.1805,69.1805,0,0,1,147.0288,54.56006a74.06052,74.06052,0,0,1,4.694,23.2395c.1554,2.33948,1.8783,3.7439,4.06677,3.11987,1.56446-.46789,2.34711-1.71618,2.1908-4.21191A41.3474,41.3474,0,0,0,157.04247,67.03784Z"/><path class="cls-2" d="M132.79314,73.12122c-2.0346-12.79175-7.51043-23.55115-17.053-32.2865A46.09888,46.09888,0,0,0,105.571,33.66089a3.00191,3.00191,0,0,0-4.22516,1.092c-.93884,1.55981-.46869,3.27588,1.25189,4.36792a3.92179,3.92179,0,0,0,1.09424.62427c10.4837,6.39355,17.83551,15.283,21.279,27.13659C127.95159,77.73022,128.796,88.85767,129.14,100h6.18017A214.67391,214.67391,0,0,0,132.79314,73.12122Z"/><path class="cls-2" d="M22.338,94.48828c-1.09424-7.019-2.03235-13.88354-1.09424-21.05456A59.14035,59.14035,0,0,1,46.11944,31.47681a3.29665,3.29665,0,0,0,1.56445-3.90015c-.78271-2.184-2.97351-2.65186-5.16424-1.24731A60.84242,60.84242,0,0,0,29.37823,38.49683,64.52217,64.52217,0,0,0,14.67144,78.26746c-.2995,7.34326,1.553,14.54065,2.11493,21.73254h6.19012C22.81164,98.16528,22.59258,96.3269,22.338,94.48828Z"/><path class="cls-2" d="M85.23309,94.17212a114.49913,114.49913,0,0,0-2.1908-14.65942,3.09175,3.09175,0,0,0-3.59961-2.49585,3.03675,3.03675,0,0,0-2.34619,3.90026,116.66963,116.66963,0,0,1,2.34619,18.2472c.01233.27868.01379.55713.02435.83569h6.19886C85.57342,98.13928,85.40807,96.18628,85.23309,94.17212Z"/><path class="cls-2" d="M108.0736,76.39514c-2.03461-11.07348-7.97833-18.87146-18.30566-22.77087v.00219a28.15763,28.15763,0,0,0-18.92914-.15625c-2.66077.78052-3.44348,3.58558-1.72058,5.30176,1.24981,1.248,2.5025,1.09192,3.91058.624a21.72724,21.72724,0,0,1,28.47247,16.84277,163.59068,163.59068,0,0,1,2.34693,17.31372q.29818,3.2113.41839,6.44751h6.34656A168.52224,168.52224,0,0,0,108.0736,76.39514Z"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/fingerprint9.svg b/polkit-agent/assets/biowaiting/fingerprint9.svg
+new file mode 100644
+index 0000000..4c0be88
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/fingerprint9.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}</style></defs><g id="文字标注"><g class="cls-1"><path d="M76.78191,140.809a3.00927,3.00927,0,0,0-4.06695,1.87157l-4.2231,10.29593a2.95177,2.95177,0,0,0,2.34692,4.2097c1.87618,0,2.81427-.62348,3.44061-2.02792q2.35322-4.96514,4.2252-10.13749a3.22338,3.22338,0,0,0-1.72268-4.21179Zm71.02957-38.52241a3.08449,3.08449,0,0,0-3.44119-2.96447,3.01947,3.01947,0,0,0-2.81653,3.276c.15559,5.14854-.15616,10.13768-.31232,15.286,0,2.33947,1.09425,3.58775,2.971,3.74391,1.87844,0,3.28729-1.24829,3.28729-3.58851,0-3.43141.4679-7.01916.31174-10.29517a31.74592,31.74592,0,0,0,0-5.46008ZM42.99057,121.93748a3.19812,3.19812,0,0,0-3.91136,2.18407c-.31251.7804-.4679,1.71618-.7825,2.49562a101.9769,101.9769,0,0,1-5.00714,12.01c-1.09424,2.34022.1554,4.67969,2.66078,4.67969,1.40827.15616,2.34636-.77963,2.9727-2.02772a81.29627,81.29627,0,0,0,6.09985-15.4437,3.02989,3.02989,0,0,0-2.03233-3.898Zm51.78526-7.17321a3.1326,3.1326,0,0,0-3.44347,2.80735,161.02757,161.02757,0,0,1-4.84945,22.9279c-1.25192,4.36718-2.81636,8.73532-4.38079,13.10328a2.97748,2.97748,0,0,0,1.25192,3.898,3.04925,3.04925,0,0,0,3.75521-.3125,5.62684,5.62684,0,0,0,1.25041-2.33946,128.60675,128.60675,0,0,0,4.85174-14.97123,161.5315,161.5315,0,0,0,4.37926-21.68171,3.2645,3.2645,0,0,0-2.81483-3.43159ZM11.07465,60.17791a3.312,3.312,0,0,0-2.19078-4.36738c-1.72059-.46865-3.285.62329-3.91137,2.49561A79.568,79.568,0,0,0,2,80.45155a66.61318,66.61318,0,0,0,.31174,7.6432A76.2778,76.2778,0,0,0,5.91135,104.626,2.67954,2.67954,0,0,0,8.57,106.6545c2.661.15558,3.91289-1.87233,3.131-4.68045a70.50518,70.50518,0,0,1-.62634-41.79842ZM85.701,104.15584a75.86247,75.86247,0,0,0-.4679-9.98362,114.4834,114.4834,0,0,0-2.19078-14.6595,3.09173,3.09173,0,0,0-3.59961-2.49581,3.03667,3.03667,0,0,0-2.34618,3.90025,116.66849,116.66849,0,0,1,2.34618,18.24725,106.72223,106.72223,0,0,1-2.97253,31.50478c-.46789,2.02773.31175,3.74391,2.03443,4.2118,1.87694.4679,3.44137-.62405,4.06772-2.80812a109.17988,109.17988,0,0,0,3.12867-27.917Zm32.854-36.96258a3.10567,3.10567,0,0,0-3.91136-2.02773,2.97022,2.97022,0,0,0-2.03235,3.90006c2.50253,9.35957,3.44042,19.02707,4.067,28.85281a155.422,155.422,0,0,1-5.0079,47.25852c-.46789,2.02792.31232,3.90025,2.0352,4.2118a3.1298,3.1298,0,0,0,4.06695-2.65178,158.74245,158.74245,0,0,0,5.31944-41.48688,159.06625,159.06625,0,0,0-2.03234-26.98258,60.29831,60.29831,0,0,0-2.5046-11.07422ZM15.61236,48.32272A67.88326,67.88326,0,0,1,27.18743,31.633C41.11154,16.81945,58.16451,9.0199,78.663,8.39586c2.34712,0,3.75521-1.24828,3.75521-3.276C82.416,3.09194,81.00788,2,78.50459,2A77.9438,77.9438,0,0,0,10.13446,45.04442a5.77164,5.77164,0,0,0-.62406,2.18407,2.72437,2.72437,0,0,0,1.56425,2.80736c1.72077.93654,3.59676.31231,4.53771-1.71543ZM58.79085,85.753c-1.25058-7.48553-.31174-14.19161,4.85155-20.11959a2.80489,2.80489,0,0,0,.62425-1.40368c.15616-1.55983-.15634-2.80812-1.72059-3.43216a2.98066,2.98066,0,0,0-3.91136.93635c-5.63138,6.55146-7.66581,14.19542-6.41389,22.77308a143.77173,143.77173,0,0,1,1.87675,19.65112,84.8888,84.8888,0,0,1-1.87675,19.18379,87.66557,87.66557,0,0,1-7.822,21.36711,4.07666,4.07666,0,0,0-.78269,2.652,2.99416,2.99416,0,0,0,2.34693,2.652c1.72078.31173,2.815-.31251,3.75521-1.87234a90.1349,90.1349,0,0,0,9.6989-29.79089A108.40061,108.40061,0,0,0,58.79314,85.753ZM22.338,94.48834c-1.09424-7.01916-2.03234-13.88368-1.09424-21.05461A59.14015,59.14015,0,0,1,46.11943,31.47686a3.29673,3.29673,0,0,0,1.56444-3.90024c-.78269-2.18389-2.97347-2.65176-5.16425-1.24735A60.84871,60.84871,0,0,0,29.37821,38.49678a64.52309,64.52309,0,0,0-14.7068,39.7707c-.31174,7.6434,1.72288,15.12892,2.19078,22.61463.3125,4.99219.4679,9.98419-1.09425,14.97429-.4679,1.55983-.93809,3.27525-1.40827,4.52334a3.12377,3.12377,0,0,0,3.12886,3.43008c1.87694,0,2.65868-1.09195,3.285-2.652,3.285-8.57766,2.81712-17.6232,1.56443-26.66951ZM157.04249,67.03786Q147.65476,20.2483,102.1299,5.276A45.00768,45.00768,0,0,0,91.80236,3.09194c-1.87827-.15615-3.12867.78039-3.28426,2.4958a2.87607,2.87607,0,0,0,2.50252,3.58833c.62406.15558,1.25041.15558,1.72059.31175a70.72962,70.72962,0,0,1,40.36348,22.45694A69.18273,69.18273,0,0,1,147.0288,54.56015a74.061,74.061,0,0,1,4.69406,23.23944c.15538,2.33946,1.87825,3.7439,4.06675,3.11986,1.56443-.4679,2.34712-1.71618,2.19076-4.212a41.34713,41.34713,0,0,0-.93788-9.6696ZM115.74016,40.83473a46.09794,46.09794,0,0,0-10.16909-7.17379,3.002,3.002,0,0,0-4.22521,1.09194c-.93885,1.55983-.46866,3.276,1.25194,4.368a3.91739,3.91739,0,0,0,1.09424.62422c10.48369,6.3936,17.83547,15.283,21.27894,27.13666,3.12886,11.38806,3.91079,23.08329,4.22309,34.7806a167.16817,167.16817,0,0,1-2.34693,33.06462c-.31174,2.34023.62405,3.7439,2.50252,4.0564,2.0352.31175,3.44347-.78039,3.755-3.11985a162.60561,162.60561,0,0,0,2.34712-27.91913,217.742,217.742,0,0,0-2.65868-34.62312c-2.03462-12.79173-7.51042-23.55117-17.053-32.2865ZM89.76793,53.62646a28.15742,28.15742,0,0,0-18.92915-.15615c-2.66076.78037-3.44345,3.58546-1.72059,5.30163C70.368,60.02,71.62072,59.86389,73.0288,59.396a21.72731,21.72731,0,0,1,28.47247,16.8428,163.579,163.579,0,0,1,2.34692,17.31375A137.99692,137.99692,0,0,1,103.692,118.974a149.65137,149.65137,0,0,1-7.04023,31.97477c-.1554.62405-.4679,1.092-.31155,1.71618a3.009,3.009,0,0,0,2.81483,2.65177,3.073,3.073,0,0,0,3.44271-2.34022,143.91473,143.91473,0,0,0,8.13446-46.946,167.06542,167.06542,0,0,0-2.65866-29.6353c-2.03463-11.07347-7.97832-18.87149-18.30567-22.77079ZM46.431,72.65334C50.03,55.02805,68.6482,42.7065,86.48291,46.294a35.29014,35.29014,0,0,1,20.18241,11.85368,8.8989,8.8989,0,0,0,1.72,1.71617,3.19219,3.19219,0,0,0,3.755-.93579c1.09424-1.40444.93885-2.80812-.31155-4.5243-7.19867-8.733-16.42891-13.87928-27.84841-14.81508-14.55045-1.2481-26.59781,3.90025-35.82653,15.283A38.57474,38.57474,0,0,0,39.861,85.4407c.7804,5.30373,1.72078,10.45208,1.72078,15.75372,0,3.74391,0,7.488-.31175,11.07347a3.00588,3.00588,0,0,0,2.81408,3.276,3.03818,3.03818,0,0,0,3.44346-2.652,100.85173,100.85173,0,0,0-.15616-20.58748c-.47018-4.21179-1.87827-8.26743-1.56443-12.16769a39.31083,39.31083,0,0,1,.62406-7.48342Zm97.78146,20.43132a3.18855,3.18855,0,0,0,2.97269-3.43217V88.56056c-.62425-5.92722-1.2506-11.8531-2.19077-17.77879-2.03234-13.10195-7.19563-24.64312-16.1126-34.31273C115.89556,21.96341,99.46893,14.78945,79.91135,14.63329a64.57055,64.57055,0,0,0-25.3436,5.14835,3.23306,3.23306,0,0,0-2.03462,4.20951,3.15933,3.15933,0,0,0,4.38155,1.56A60.10931,60.10931,0,0,1,85.54483,21.183a57.79887,57.79887,0,0,1,35.04478,15.91007c10.32431,9.82517,16.268,21.835,18.30566,36.02812q1.16919,8.42465,1.876,16.84377c.46789,1.87157,1.72058,3.11966,3.44119,3.11966ZM71.15053,82.94489a11.40154,11.40154,0,0,1,0-5.614,9.11075,9.11075,0,0,1,9.70119-6.55146c4.22292.15558,7.66638,3.2762,8.60218,7.9559a150.63952,150.63952,0,0,1,2.661,26.51468,3.1253,3.1253,0,0,0,3.12886,3.43236c1.879,0,2.97252-1.40367,3.12867-3.276V102.5981h.15635c-.3125-4.05545-.4679-8.11185-.9358-12.16521-.47019-4.05565-1.09654-8.11206-1.72288-12.16541a15.95817,15.95817,0,0,0-17.67931-13.726c-8.13447.93654-14.7068,9.04763-13.45392,17.002.624,4.83584,1.40808,9.6696,1.876,14.50563a100.76542,100.76542,0,0,1-4.6931,39.77,111.03563,111.03563,0,0,1-5.9437,14.03754,3.0595,3.0595,0,0,0,.15616,3.43236,2.8478,2.8478,0,0,0,2.97252,1.24752,3.58665,3.58665,0,0,0,2.815-2.33946C72.715,130.2034,75.21748,107.1224,71.15053,82.94717ZM34.38591,91.52482c-.7825-5.30393-1.565-10.76381-1.09634-16.06545A45.82536,45.82536,0,0,1,49.87464,44.26631a45.38952,45.38952,0,0,1,28.16-10.76171,44.31362,44.31362,0,0,1,12.82986,1.24828,3.86111,3.86111,0,0,0,1.87675.15616,2.85951,2.85951,0,0,0,2.50252-2.80814,3.03932,3.03932,0,0,0-2.34694-3.276,45.95556,45.95556,0,0,0-13.14161-1.55984,34.70559,34.70559,0,0,0-9.69889.93577C54.25524,31.16513,42.20807,39.74505,33.91516,53.62436a50.635,50.635,0,0,0-6.56928,32.59653c.4679,4.36814,1.40808,8.57995,1.71983,12.94809.62405,10.75944-.78175,21.20867-5.6312,30.87827a3.03318,3.03318,0,0,0-.47018,2.02771,2.8529,2.8529,0,0,0,2.65867,2.652,3.38107,3.38107,0,0,0,3.44271-2.02772c6.57-12.9458,7.51022-26.98125,5.3202-41.17439Zm0,0"/></g><path class="cls-2" d="M62.54607,60.79761a2.98064,2.98064,0,0,0-3.91137.93628c-5.63141,6.55151-7.66584,14.19543-6.41388,22.77319a143.776,143.776,0,0,1,1.87677,19.65112q0,2.96339-.14044,5.8418h6.22674a106.70743,106.70743,0,0,0-1.39075-24.24707h-.00232c-1.25054-7.48547-.3117-14.19153,4.85157-20.11951a2.80487,2.80487,0,0,0,.62426-1.40368C64.42278,62.66992,64.11028,61.42163,62.54607,60.79761Z"/><path class="cls-2" d="M86.4829,46.294a35.29073,35.29073,0,0,1,20.18244,11.85376,8.89847,8.89847,0,0,0,1.72,1.71618,3.19239,3.19239,0,0,0,3.75506-.93579c1.09424-1.40442.93885-2.80823-.31158-4.52429-7.19867-8.73316-16.4289-13.8794-27.84839-14.81519C69.42992,38.34058,57.38256,43.489,48.15386,54.8717a38.57458,38.57458,0,0,0-8.29291,30.569c.7804,5.30371,1.72077,10.45215,1.72077,15.75367,0,2.96252-.00678,5.92163-.16126,8.80566h6.32941a99.29774,99.29774,0,0,0-.37848-17.69556c-.47021-4.21179-1.87829-8.26745-1.56445-12.16772a39.31138,39.31138,0,0,1,.624-7.4834C50.03,55.02808,68.64819,42.70654,86.4829,46.294Z"/><path class="cls-2" d="M35.25219,110a81.58384,81.58384,0,0,0-.86627-18.47522c-.78253-5.30383-1.565-10.76379-1.09638-16.06543a45.82519,45.82519,0,0,1,16.58509-31.193,45.3888,45.3888,0,0,1,28.16-10.76172,44.30565,44.30565,0,0,1,12.82983,1.24829,3.86211,3.86211,0,0,0,1.87677.156,2.85936,2.85936,0,0,0,2.50251-2.80811A3.0391,3.0391,0,0,0,92.89678,28.825a45.94687,45.94687,0,0,0-13.1416-1.55981,34.70227,34.70227,0,0,0-9.69891.93567C54.25524,31.165,42.20806,39.74512,33.91515,53.62427A50.63525,50.63525,0,0,0,27.34588,86.221c.46789,4.368,1.40808,8.57983,1.71985,12.948A74.7003,74.7003,0,0,1,28.93688,110Z"/><path class="cls-2" d="M78.50457,2A77.94379,77.94379,0,0,0,10.13445,45.04443a5.77132,5.77132,0,0,0-.624,2.18409,2.72441,2.72441,0,0,0,1.56421,2.80737c1.72076.93652,3.5968.31225,4.53772-1.71546v.00232A67.88222,67.88222,0,0,1,27.18743,31.63306C41.11156,16.81946,58.16448,9.0199,78.663,8.39575c2.34717,0,3.75525-1.24817,3.75525-3.27588C82.416,3.09192,81.00787,2,78.50457,2Z"/><path class="cls-2" d="M54.56774,19.78162a3.2331,3.2331,0,0,0-2.03461,4.20959,3.15941,3.15941,0,0,0,4.38154,1.55994,60.11034,60.11034,0,0,1,28.63018-4.368A57.799,57.799,0,0,1,120.58959,37.093c10.32434,9.82519,16.268,21.83508,18.30567,36.0282q1.16922,8.42468,1.876,16.84375c.4679,1.87158,1.72058,3.11975,3.44123,3.11975a3.1886,3.1886,0,0,0,2.97265-3.43225V88.56055c-.6242-5.92725-1.25055-11.853-2.19073-17.77881C142.962,57.67981,137.79876,46.13867,128.88177,36.469,115.89556,21.96338,99.46893,14.78943,79.91137,14.6333A64.57,64.57,0,0,0,54.56774,19.78162Z"/><path class="cls-2" d="M4.97253,58.30615A79.56615,79.56615,0,0,0,2,80.45154a66.60613,66.60613,0,0,0,.31177,7.64319A76.27443,76.27443,0,0,0,5.91137,104.626a2.67956,2.67956,0,0,0,2.65869,2.02856c2.66095.15552,3.91284-1.87231,3.13092-4.68042a70.50594,70.50594,0,0,1-.62634-41.79858V60.178A3.312,3.312,0,0,0,8.8839,55.81055C7.16326,55.3418,5.59887,56.43384,4.97253,58.30615Z"/><path class="cls-2" d="M23.15173,110A74.91063,74.91063,0,0,0,22.338,94.48828c-1.09424-7.019-2.03235-13.88354-1.09424-21.05456A59.14035,59.14035,0,0,1,46.11944,31.47681a3.29665,3.29665,0,0,0,1.56445-3.90015c-.78271-2.184-2.97351-2.65186-5.16424-1.24731A60.84242,60.84242,0,0,0,29.37823,38.49683,64.52217,64.52217,0,0,0,14.67144,78.26746c-.31177,7.64343,1.72284,15.1289,2.19073,22.61462A59.2241,59.2241,0,0,1,16.90051,110Z"/><path class="cls-2" d="M147.83147,110c.01563-.76367.01514-1.51831-.02-2.25562a31.74131,31.74131,0,0,0,0-5.4602v.00244a3.08455,3.08455,0,0,0-3.44116-2.9646,3.01957,3.01957,0,0,0-2.81653,3.27612c.07532,2.49268.03876,4.94776-.0343,7.40186Z"/><path class="cls-2" d="M135.45751,110c.00281-.75769.008-1.51831-.00567-2.25562a217.74154,217.74154,0,0,0-2.6587-34.62316c-2.0346-12.79175-7.51043-23.55115-17.053-32.2865A46.09888,46.09888,0,0,0,105.571,33.66089a3.00191,3.00191,0,0,0-4.22516,1.092c-.93884,1.55981-.46869,3.27588,1.25189,4.36792a3.92179,3.92179,0,0,0,1.09424.62427c10.4837,6.39355,17.83551,15.283,21.279,27.13659,3.12885,11.38807,3.91077,23.08326,4.22308,34.78064q.11738,4.17.0279,8.33765Z"/><path class="cls-2" d="M71.15051,82.94714v-.00232a11.40213,11.40213,0,0,1,0-5.61389,9.11068,9.11068,0,0,1,9.70123-6.55139c4.2229.15552,7.66638,3.27612,8.60217,7.95581A150.64126,150.64126,0,0,1,92.11486,105.25a3.12524,3.12524,0,0,0,3.12885,3.43237c1.879,0,2.97253-1.40356,3.12872-3.276v-2.80823h.15631c-.3125-4.05542-.4679-8.11193-.93579-12.16528-.47022-4.05566-1.09656-8.11206-1.7229-12.1654a15.95811,15.95811,0,0,0-17.67926-13.726c-8.13452.93653-14.70685,9.04761-13.454,17.002.62408,4.83593,1.40814,9.66967,1.876,14.50561A115.64049,115.64049,0,0,1,66.75665,110h6.08563A125.08914,125.08914,0,0,0,71.15051,82.94714Z"/><path class="cls-2" d="M157.04247,67.03784Q147.65475,20.24817,102.12988,5.276A45.0092,45.0092,0,0,0,91.80236,3.09192c-1.8783-.15613-3.12866.78039-3.28424,2.49573A2.876,2.876,0,0,0,91.02062,9.176c.62409.15564,1.25043.15564,1.72058.31176a70.72924,70.72924,0,0,1,40.36347,22.457A69.1805,69.1805,0,0,1,147.0288,54.56006a74.06052,74.06052,0,0,1,4.694,23.2395c.1554,2.33948,1.8783,3.7439,4.06677,3.11987,1.56446-.46789,2.34711-1.71618,2.1908-4.21191A41.3474,41.3474,0,0,0,157.04247,67.03784Z"/><path class="cls-2" d="M85.63354,110c.07037-1.946.10138-3.89441.06744-5.84424a75.85951,75.85951,0,0,0-.46789-9.98364,114.49913,114.49913,0,0,0-2.1908-14.65942,3.09175,3.09175,0,0,0-3.59961-2.49585,3.03675,3.03675,0,0,0-2.34619,3.90026,116.66963,116.66963,0,0,1,2.34619,18.2472q.23969,5.425.00525,10.83569Z"/><path class="cls-2" d="M123.05425,110c.03546-1.5769.05506-3.1582.03772-4.75a159.07167,159.07167,0,0,0-2.03235-26.98254A60.29592,60.29592,0,0,0,118.555,67.19324a3.10566,3.10566,0,0,0-3.91138-2.02771,2.97017,2.97017,0,0,0-2.03229,3.9c2.5025,9.35962,3.44037,19.0271,4.067,28.85291q.29535,6.08184.11456,12.08154Z"/><path class="cls-2" d="M108.0736,76.39514c-2.03461-11.07348-7.97833-18.87146-18.30566-22.77087v.00219a28.15763,28.15763,0,0,0-18.92914-.15625c-2.66077.78052-3.44348,3.58558-1.72058,5.30176,1.24981,1.248,2.5025,1.09192,3.91058.624a21.72724,21.72724,0,0,1,28.47247,16.84277,163.59068,163.59068,0,0,1,2.34693,17.31372,128.85744,128.85744,0,0,1,.42,16.44751h6.39728c.03955-1.323.06677-2.64624.06677-3.96948A167.06591,167.06591,0,0,0,108.0736,76.39514Z"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/fingervein0.svg b/polkit-agent/assets/biowaiting/fingervein0.svg
+new file mode 100644
+index 0000000..746aba7
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/fingervein0.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}</style></defs><g id="文字标注"><g class="cls-1"><path d="M114.27147,96.46253a2.28536,2.28536,0,0,0-2.28534,2.28534v14.1233a2.28534,2.28534,0,1,0,4.57068,0V98.74787A2.28536,2.28536,0,0,0,114.27147,96.46253Z"/><path d="M65.6855,39.7409a33.36686,33.36686,0,0,1,14.30613-3.15372l.03571-.00119a30.94322,30.94322,0,0,1,31.95879,29.89309v22.6704a2.29317,2.29317,0,1,0,4.57068-.2742v-22.579A35.514,35.514,0,0,0,79.99163,32.0165a37.88963,37.88963,0,0,0-16.22581,3.56516A2.29044,2.29044,0,1,0,65.6855,39.7409Z"/><path d="M56.72706,42.9404a2.295,2.295,0,0,0-3.24518-.04578A33.09153,33.09153,0,0,0,43.42645,66.47908v47.21479a2.2853,2.2853,0,1,0,4.57059,0V66.47908a28.567,28.567,0,0,1,8.68424-20.29359A2.29484,2.29484,0,0,0,56.72706,42.9404Z"/><path d="M86.80188,42.84894a27.92679,27.92679,0,0,0-12.29509-.2742A27.14962,27.14962,0,0,0,52.56772,68.90157v53.11088a2.28534,2.28534,0,1,0,4.57068,0V93.63914a17.4489,17.4489,0,0,0,2.97089,4.19458,20.85342,20.85342,0,0,1,6.17039,11.86918v6.78754a2.25125,2.25125,0,0,0,0,.24985v8.97437a2.2853,2.2853,0,1,0,4.57059,0v-8.773a25.4804,25.4804,0,0,0,.30615-5.15689c.59317-6.03013,2.33194-16.46175,7.41825-23.59508,6.51407-9.13551,6.12479-15.36586,5.911-17.32271h4.63651a55.70992,55.70992,0,0,0,.01071,6.69315v48.15458a2.28535,2.28535,0,0,0,4.57069,0V94.87812a25.77379,25.77379,0,0,0,1.554,2.45288,45.685,45.685,0,0,1,7.58726,21.88753v2.79392a2.2853,2.2853,0,1,0,4.57059,0V68.90157A27.05818,27.05818,0,0,0,86.80188,42.84894ZM66.27968,97.80616a25.48236,25.48236,0,0,0-2.97089-3.40036c-5.02772-5.25632-6.17039-18.694-6.17039-23.53887h9.14128Zm8.59278-12.26743a36.49909,36.49909,0,0,0-4.02219,7.30536V70.86693h9.09742a2.31209,2.31209,0,0,0,.04394.5485C79.99163,71.46111,81.1343,76.763,74.87246,85.53873Zm27.9724,16.12006a49.905,49.905,0,0,0-3.885-6.97879c-6.49036-9.09559-5.11917-23.58455-5.11917-23.58455l.00229-.02271c.00659-.06985-.00156-.137-.00119-.20581h9.00312ZM57.36573,66.29625A22.52238,22.52238,0,0,1,75.37526,47.28247a23.67615,23.67615,0,0,1,10.284,0,22.431,22.431,0,0,1,16.99293,19.01378Z"/><path d="M82.27688,91.43482a2.28527,2.28527,0,0,0-2.28525,2.28534v31.9945a2.2853,2.2853,0,1,0,4.57059,0V93.72016A2.28535,2.28535,0,0,0,82.27688,91.43482Z"/></g><path class="cls-2" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-2" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-2" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-2" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/fingervein1.svg b/polkit-agent/assets/biowaiting/fingervein1.svg
+new file mode 100644
+index 0000000..cda8446
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/fingervein1.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="27" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><g class="cls-1"><path d="M114.27147,96.46253a2.28536,2.28536,0,0,0-2.28534,2.28534v14.1233a2.28534,2.28534,0,1,0,4.57068,0V98.74787A2.28536,2.28536,0,0,0,114.27147,96.46253Z"/><path d="M65.6855,39.7409a33.36686,33.36686,0,0,1,14.30613-3.15372l.03571-.00119a30.94322,30.94322,0,0,1,31.95879,29.89309v22.6704a2.29317,2.29317,0,1,0,4.57068-.2742v-22.579A35.514,35.514,0,0,0,79.99163,32.0165a37.88963,37.88963,0,0,0-16.22581,3.56516A2.29044,2.29044,0,1,0,65.6855,39.7409Z"/><path d="M56.72706,42.9404a2.295,2.295,0,0,0-3.24518-.04578A33.09153,33.09153,0,0,0,43.42645,66.47908v47.21479a2.2853,2.2853,0,1,0,4.57059,0V66.47908a28.567,28.567,0,0,1,8.68424-20.29359A2.29484,2.29484,0,0,0,56.72706,42.9404Z"/><path d="M86.80188,42.84894a27.92679,27.92679,0,0,0-12.29509-.2742A27.14962,27.14962,0,0,0,52.56772,68.90157v53.11088a2.28534,2.28534,0,1,0,4.57068,0V93.63914a17.4489,17.4489,0,0,0,2.97089,4.19458,20.85342,20.85342,0,0,1,6.17039,11.86918v6.78754a2.25125,2.25125,0,0,0,0,.24985v8.97437a2.2853,2.2853,0,1,0,4.57059,0v-8.773a25.4804,25.4804,0,0,0,.30615-5.15689c.59317-6.03013,2.33194-16.46175,7.41825-23.59508,6.51407-9.13551,6.12479-15.36586,5.911-17.32271h4.63651a55.70992,55.70992,0,0,0,.01071,6.69315v48.15458a2.28535,2.28535,0,0,0,4.57069,0V94.87812a25.77379,25.77379,0,0,0,1.554,2.45288,45.685,45.685,0,0,1,7.58726,21.88753v2.79392a2.2853,2.2853,0,1,0,4.57059,0V68.90157A27.05818,27.05818,0,0,0,86.80188,42.84894ZM66.27968,97.80616a25.48236,25.48236,0,0,0-2.97089-3.40036c-5.02772-5.25632-6.17039-18.694-6.17039-23.53887h9.14128Zm8.59278-12.26743a36.49909,36.49909,0,0,0-4.02219,7.30536V70.86693h9.09742a2.31209,2.31209,0,0,0,.04394.5485C79.99163,71.46111,81.1343,76.763,74.87246,85.53873Zm27.9724,16.12006a49.905,49.905,0,0,0-3.885-6.97879c-6.49036-9.09559-5.11917-23.58455-5.11917-23.58455l.00229-.02271c.00659-.06985-.00156-.137-.00119-.20581h9.00312ZM57.36573,66.29625A22.52238,22.52238,0,0,1,75.37526,47.28247a23.67615,23.67615,0,0,1,10.284,0,22.431,22.431,0,0,1,16.99293,19.01378Z"/><path d="M82.27688,91.43482a2.28527,2.28527,0,0,0-2.28525,2.28534v31.9945a2.2853,2.2853,0,1,0,4.57059,0V93.72016A2.28535,2.28535,0,0,0,82.27688,91.43482Z"/></g><path class="cls-2" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-2" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-2" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-2" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><rect class="cls-3" x="22" y="11" width="116" height="16"/><rect class="cls-2" x="22" y="24" width="116" height="4"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/fingervein10.svg b/polkit-agent/assets/biowaiting/fingervein10.svg
+new file mode 100644
+index 0000000..ecc78f5
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/fingervein10.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="126" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><g class="cls-1"><path d="M114.27147,96.46253a2.28536,2.28536,0,0,0-2.28534,2.28534v14.1233a2.28534,2.28534,0,1,0,4.57068,0V98.74787A2.28536,2.28536,0,0,0,114.27147,96.46253Z"/><path d="M65.6855,39.7409a33.36686,33.36686,0,0,1,14.30613-3.15372l.03571-.00119a30.94322,30.94322,0,0,1,31.95879,29.89309v22.6704a2.29317,2.29317,0,1,0,4.57068-.2742v-22.579A35.514,35.514,0,0,0,79.99163,32.0165a37.88963,37.88963,0,0,0-16.22581,3.56516A2.29044,2.29044,0,1,0,65.6855,39.7409Z"/><path d="M56.72706,42.9404a2.295,2.295,0,0,0-3.24518-.04578A33.09153,33.09153,0,0,0,43.42645,66.47908v47.21479a2.2853,2.2853,0,1,0,4.57059,0V66.47908a28.567,28.567,0,0,1,8.68424-20.29359A2.29484,2.29484,0,0,0,56.72706,42.9404Z"/><path d="M86.80188,42.84894a27.92679,27.92679,0,0,0-12.29509-.2742A27.14962,27.14962,0,0,0,52.56772,68.90157v53.11088a2.28534,2.28534,0,1,0,4.57068,0V93.63914a17.4489,17.4489,0,0,0,2.97089,4.19458,20.85342,20.85342,0,0,1,6.17039,11.86918v6.78754a2.25125,2.25125,0,0,0,0,.24985v8.97437a2.2853,2.2853,0,1,0,4.57059,0v-8.773a25.4804,25.4804,0,0,0,.30615-5.15689c.59317-6.03013,2.33194-16.46175,7.41825-23.59508,6.51407-9.13551,6.12479-15.36586,5.911-17.32271h4.63651a55.70992,55.70992,0,0,0,.01071,6.69315v48.15458a2.28535,2.28535,0,0,0,4.57069,0V94.87812a25.77379,25.77379,0,0,0,1.554,2.45288,45.685,45.685,0,0,1,7.58726,21.88753v2.79392a2.2853,2.2853,0,1,0,4.57059,0V68.90157A27.05818,27.05818,0,0,0,86.80188,42.84894ZM66.27968,97.80616a25.48236,25.48236,0,0,0-2.97089-3.40036c-5.02772-5.25632-6.17039-18.694-6.17039-23.53887h9.14128Zm8.59278-12.26743a36.49909,36.49909,0,0,0-4.02219,7.30536V70.86693h9.09742a2.31209,2.31209,0,0,0,.04394.5485C79.99163,71.46111,81.1343,76.763,74.87246,85.53873Zm27.9724,16.12006a49.905,49.905,0,0,0-3.885-6.97879c-6.49036-9.09559-5.11917-23.58455-5.11917-23.58455l.00229-.02271c.00659-.06985-.00156-.137-.00119-.20581h9.00312ZM57.36573,66.29625A22.52238,22.52238,0,0,1,75.37526,47.28247a23.67615,23.67615,0,0,1,10.284,0,22.431,22.431,0,0,1,16.99293,19.01378Z"/><path d="M82.27688,91.43482a2.28527,2.28527,0,0,0-2.28525,2.28534v31.9945a2.2853,2.2853,0,1,0,4.57059,0V93.72016A2.28535,2.28535,0,0,0,82.27688,91.43482Z"/></g><path class="cls-2" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-2" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-2" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-2" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><rect class="cls-3" x="22" y="11" width="116" height="115"/><rect class="cls-2" x="22" y="123" width="116" height="4"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/fingervein11.svg b/polkit-agent/assets/biowaiting/fingervein11.svg
+new file mode 100644
+index 0000000..478d000
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/fingervein11.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="137" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><g class="cls-1"><path d="M114.27147,96.46253a2.28536,2.28536,0,0,0-2.28534,2.28534v14.1233a2.28534,2.28534,0,1,0,4.57068,0V98.74787A2.28536,2.28536,0,0,0,114.27147,96.46253Z"/><path d="M65.6855,39.7409a33.36686,33.36686,0,0,1,14.30613-3.15372l.03571-.00119a30.94322,30.94322,0,0,1,31.95879,29.89309v22.6704a2.29317,2.29317,0,1,0,4.57068-.2742v-22.579A35.514,35.514,0,0,0,79.99163,32.0165a37.88963,37.88963,0,0,0-16.22581,3.56516A2.29044,2.29044,0,1,0,65.6855,39.7409Z"/><path d="M56.72706,42.9404a2.295,2.295,0,0,0-3.24518-.04578A33.09153,33.09153,0,0,0,43.42645,66.47908v47.21479a2.2853,2.2853,0,1,0,4.57059,0V66.47908a28.567,28.567,0,0,1,8.68424-20.29359A2.29484,2.29484,0,0,0,56.72706,42.9404Z"/><path d="M86.80188,42.84894a27.92679,27.92679,0,0,0-12.29509-.2742A27.14962,27.14962,0,0,0,52.56772,68.90157v53.11088a2.28534,2.28534,0,1,0,4.57068,0V93.63914a17.4489,17.4489,0,0,0,2.97089,4.19458,20.85342,20.85342,0,0,1,6.17039,11.86918v6.78754a2.25125,2.25125,0,0,0,0,.24985v8.97437a2.2853,2.2853,0,1,0,4.57059,0v-8.773a25.4804,25.4804,0,0,0,.30615-5.15689c.59317-6.03013,2.33194-16.46175,7.41825-23.59508,6.51407-9.13551,6.12479-15.36586,5.911-17.32271h4.63651a55.70992,55.70992,0,0,0,.01071,6.69315v48.15458a2.28535,2.28535,0,0,0,4.57069,0V94.87812a25.77379,25.77379,0,0,0,1.554,2.45288,45.685,45.685,0,0,1,7.58726,21.88753v2.79392a2.2853,2.2853,0,1,0,4.57059,0V68.90157A27.05818,27.05818,0,0,0,86.80188,42.84894ZM66.27968,97.80616a25.48236,25.48236,0,0,0-2.97089-3.40036c-5.02772-5.25632-6.17039-18.694-6.17039-23.53887h9.14128Zm8.59278-12.26743a36.49909,36.49909,0,0,0-4.02219,7.30536V70.86693h9.09742a2.31209,2.31209,0,0,0,.04394.5485C79.99163,71.46111,81.1343,76.763,74.87246,85.53873Zm27.9724,16.12006a49.905,49.905,0,0,0-3.885-6.97879c-6.49036-9.09559-5.11917-23.58455-5.11917-23.58455l.00229-.02271c.00659-.06985-.00156-.137-.00119-.20581h9.00312ZM57.36573,66.29625A22.52238,22.52238,0,0,1,75.37526,47.28247a23.67615,23.67615,0,0,1,10.284,0,22.431,22.431,0,0,1,16.99293,19.01378Z"/><path d="M82.27688,91.43482a2.28527,2.28527,0,0,0-2.28525,2.28534v31.9945a2.2853,2.2853,0,1,0,4.57059,0V93.72016A2.28535,2.28535,0,0,0,82.27688,91.43482Z"/></g><path class="cls-2" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-2" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-2" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-2" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><rect class="cls-3" x="22" y="11" width="116" height="126"/><rect class="cls-2" x="22" y="134" width="116" height="4"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/fingervein2.svg b/polkit-agent/assets/biowaiting/fingervein2.svg
+new file mode 100644
+index 0000000..b04c496
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/fingervein2.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="38" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><g class="cls-1"><path d="M114.27147,96.46253a2.28536,2.28536,0,0,0-2.28534,2.28534v14.1233a2.28534,2.28534,0,1,0,4.57068,0V98.74787A2.28536,2.28536,0,0,0,114.27147,96.46253Z"/><path d="M65.6855,39.7409a33.36686,33.36686,0,0,1,14.30613-3.15372l.03571-.00119a30.94322,30.94322,0,0,1,31.95879,29.89309v22.6704a2.29317,2.29317,0,1,0,4.57068-.2742v-22.579A35.514,35.514,0,0,0,79.99163,32.0165a37.88963,37.88963,0,0,0-16.22581,3.56516A2.29044,2.29044,0,1,0,65.6855,39.7409Z"/><path d="M56.72706,42.9404a2.295,2.295,0,0,0-3.24518-.04578A33.09153,33.09153,0,0,0,43.42645,66.47908v47.21479a2.2853,2.2853,0,1,0,4.57059,0V66.47908a28.567,28.567,0,0,1,8.68424-20.29359A2.29484,2.29484,0,0,0,56.72706,42.9404Z"/><path d="M86.80188,42.84894a27.92679,27.92679,0,0,0-12.29509-.2742A27.14962,27.14962,0,0,0,52.56772,68.90157v53.11088a2.28534,2.28534,0,1,0,4.57068,0V93.63914a17.4489,17.4489,0,0,0,2.97089,4.19458,20.85342,20.85342,0,0,1,6.17039,11.86918v6.78754a2.25125,2.25125,0,0,0,0,.24985v8.97437a2.2853,2.2853,0,1,0,4.57059,0v-8.773a25.4804,25.4804,0,0,0,.30615-5.15689c.59317-6.03013,2.33194-16.46175,7.41825-23.59508,6.51407-9.13551,6.12479-15.36586,5.911-17.32271h4.63651a55.70992,55.70992,0,0,0,.01071,6.69315v48.15458a2.28535,2.28535,0,0,0,4.57069,0V94.87812a25.77379,25.77379,0,0,0,1.554,2.45288,45.685,45.685,0,0,1,7.58726,21.88753v2.79392a2.2853,2.2853,0,1,0,4.57059,0V68.90157A27.05818,27.05818,0,0,0,86.80188,42.84894ZM66.27968,97.80616a25.48236,25.48236,0,0,0-2.97089-3.40036c-5.02772-5.25632-6.17039-18.694-6.17039-23.53887h9.14128Zm8.59278-12.26743a36.49909,36.49909,0,0,0-4.02219,7.30536V70.86693h9.09742a2.31209,2.31209,0,0,0,.04394.5485C79.99163,71.46111,81.1343,76.763,74.87246,85.53873Zm27.9724,16.12006a49.905,49.905,0,0,0-3.885-6.97879c-6.49036-9.09559-5.11917-23.58455-5.11917-23.58455l.00229-.02271c.00659-.06985-.00156-.137-.00119-.20581h9.00312ZM57.36573,66.29625A22.52238,22.52238,0,0,1,75.37526,47.28247a23.67615,23.67615,0,0,1,10.284,0,22.431,22.431,0,0,1,16.99293,19.01378Z"/><path d="M82.27688,91.43482a2.28527,2.28527,0,0,0-2.28525,2.28534v31.9945a2.2853,2.2853,0,1,0,4.57059,0V93.72016A2.28535,2.28535,0,0,0,82.27688,91.43482Z"/></g><path class="cls-2" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-2" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-2" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-2" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><rect class="cls-3" x="22" y="11" width="116" height="27"/><rect class="cls-2" x="22" y="35" width="116" height="4"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/fingervein3.svg b/polkit-agent/assets/biowaiting/fingervein3.svg
+new file mode 100644
+index 0000000..7217db0
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/fingervein3.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="49" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><g class="cls-1"><path d="M114.27147,96.46253a2.28536,2.28536,0,0,0-2.28534,2.28534v14.1233a2.28534,2.28534,0,1,0,4.57068,0V98.74787A2.28536,2.28536,0,0,0,114.27147,96.46253Z"/><path d="M65.6855,39.7409a33.36686,33.36686,0,0,1,14.30613-3.15372l.03571-.00119a30.94322,30.94322,0,0,1,31.95879,29.89309v22.6704a2.29317,2.29317,0,1,0,4.57068-.2742v-22.579A35.514,35.514,0,0,0,79.99163,32.0165a37.88963,37.88963,0,0,0-16.22581,3.56516A2.29044,2.29044,0,1,0,65.6855,39.7409Z"/><path d="M56.72706,42.9404a2.295,2.295,0,0,0-3.24518-.04578A33.09153,33.09153,0,0,0,43.42645,66.47908v47.21479a2.2853,2.2853,0,1,0,4.57059,0V66.47908a28.567,28.567,0,0,1,8.68424-20.29359A2.29484,2.29484,0,0,0,56.72706,42.9404Z"/><path d="M86.80188,42.84894a27.92679,27.92679,0,0,0-12.29509-.2742A27.14962,27.14962,0,0,0,52.56772,68.90157v53.11088a2.28534,2.28534,0,1,0,4.57068,0V93.63914a17.4489,17.4489,0,0,0,2.97089,4.19458,20.85342,20.85342,0,0,1,6.17039,11.86918v6.78754a2.25125,2.25125,0,0,0,0,.24985v8.97437a2.2853,2.2853,0,1,0,4.57059,0v-8.773a25.4804,25.4804,0,0,0,.30615-5.15689c.59317-6.03013,2.33194-16.46175,7.41825-23.59508,6.51407-9.13551,6.12479-15.36586,5.911-17.32271h4.63651a55.70992,55.70992,0,0,0,.01071,6.69315v48.15458a2.28535,2.28535,0,0,0,4.57069,0V94.87812a25.77379,25.77379,0,0,0,1.554,2.45288,45.685,45.685,0,0,1,7.58726,21.88753v2.79392a2.2853,2.2853,0,1,0,4.57059,0V68.90157A27.05818,27.05818,0,0,0,86.80188,42.84894ZM66.27968,97.80616a25.48236,25.48236,0,0,0-2.97089-3.40036c-5.02772-5.25632-6.17039-18.694-6.17039-23.53887h9.14128Zm8.59278-12.26743a36.49909,36.49909,0,0,0-4.02219,7.30536V70.86693h9.09742a2.31209,2.31209,0,0,0,.04394.5485C79.99163,71.46111,81.1343,76.763,74.87246,85.53873Zm27.9724,16.12006a49.905,49.905,0,0,0-3.885-6.97879c-6.49036-9.09559-5.11917-23.58455-5.11917-23.58455l.00229-.02271c.00659-.06985-.00156-.137-.00119-.20581h9.00312ZM57.36573,66.29625A22.52238,22.52238,0,0,1,75.37526,47.28247a23.67615,23.67615,0,0,1,10.284,0,22.431,22.431,0,0,1,16.99293,19.01378Z"/><path d="M82.27688,91.43482a2.28527,2.28527,0,0,0-2.28525,2.28534v31.9945a2.2853,2.2853,0,1,0,4.57059,0V93.72016A2.28535,2.28535,0,0,0,82.27688,91.43482Z"/></g><path class="cls-2" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-2" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-2" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-2" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><rect class="cls-3" x="22" y="11" width="116" height="38"/><rect class="cls-2" x="22" y="46" width="116" height="4"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/fingervein4.svg b/polkit-agent/assets/biowaiting/fingervein4.svg
+new file mode 100644
+index 0000000..92d47ea
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/fingervein4.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="60" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><g class="cls-1"><path d="M114.27147,96.46253a2.28536,2.28536,0,0,0-2.28534,2.28534v14.1233a2.28534,2.28534,0,1,0,4.57068,0V98.74787A2.28536,2.28536,0,0,0,114.27147,96.46253Z"/><path d="M65.6855,39.7409a33.36686,33.36686,0,0,1,14.30613-3.15372l.03571-.00119a30.94322,30.94322,0,0,1,31.95879,29.89309v22.6704a2.29317,2.29317,0,1,0,4.57068-.2742v-22.579A35.514,35.514,0,0,0,79.99163,32.0165a37.88963,37.88963,0,0,0-16.22581,3.56516A2.29044,2.29044,0,1,0,65.6855,39.7409Z"/><path d="M56.72706,42.9404a2.295,2.295,0,0,0-3.24518-.04578A33.09153,33.09153,0,0,0,43.42645,66.47908v47.21479a2.2853,2.2853,0,1,0,4.57059,0V66.47908a28.567,28.567,0,0,1,8.68424-20.29359A2.29484,2.29484,0,0,0,56.72706,42.9404Z"/><path d="M86.80188,42.84894a27.92679,27.92679,0,0,0-12.29509-.2742A27.14962,27.14962,0,0,0,52.56772,68.90157v53.11088a2.28534,2.28534,0,1,0,4.57068,0V93.63914a17.4489,17.4489,0,0,0,2.97089,4.19458,20.85342,20.85342,0,0,1,6.17039,11.86918v6.78754a2.25125,2.25125,0,0,0,0,.24985v8.97437a2.2853,2.2853,0,1,0,4.57059,0v-8.773a25.4804,25.4804,0,0,0,.30615-5.15689c.59317-6.03013,2.33194-16.46175,7.41825-23.59508,6.51407-9.13551,6.12479-15.36586,5.911-17.32271h4.63651a55.70992,55.70992,0,0,0,.01071,6.69315v48.15458a2.28535,2.28535,0,0,0,4.57069,0V94.87812a25.77379,25.77379,0,0,0,1.554,2.45288,45.685,45.685,0,0,1,7.58726,21.88753v2.79392a2.2853,2.2853,0,1,0,4.57059,0V68.90157A27.05818,27.05818,0,0,0,86.80188,42.84894ZM66.27968,97.80616a25.48236,25.48236,0,0,0-2.97089-3.40036c-5.02772-5.25632-6.17039-18.694-6.17039-23.53887h9.14128Zm8.59278-12.26743a36.49909,36.49909,0,0,0-4.02219,7.30536V70.86693h9.09742a2.31209,2.31209,0,0,0,.04394.5485C79.99163,71.46111,81.1343,76.763,74.87246,85.53873Zm27.9724,16.12006a49.905,49.905,0,0,0-3.885-6.97879c-6.49036-9.09559-5.11917-23.58455-5.11917-23.58455l.00229-.02271c.00659-.06985-.00156-.137-.00119-.20581h9.00312ZM57.36573,66.29625A22.52238,22.52238,0,0,1,75.37526,47.28247a23.67615,23.67615,0,0,1,10.284,0,22.431,22.431,0,0,1,16.99293,19.01378Z"/><path d="M82.27688,91.43482a2.28527,2.28527,0,0,0-2.28525,2.28534v31.9945a2.2853,2.2853,0,1,0,4.57059,0V93.72016A2.28535,2.28535,0,0,0,82.27688,91.43482Z"/></g><path class="cls-2" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-2" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-2" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-2" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><rect class="cls-3" x="22" y="11" width="116" height="49"/><rect class="cls-2" x="22" y="57" width="116" height="4"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/fingervein5.svg b/polkit-agent/assets/biowaiting/fingervein5.svg
+new file mode 100644
+index 0000000..7f53c6c
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/fingervein5.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="71" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><g class="cls-1"><path d="M114.27147,96.46253a2.28536,2.28536,0,0,0-2.28534,2.28534v14.1233a2.28534,2.28534,0,1,0,4.57068,0V98.74787A2.28536,2.28536,0,0,0,114.27147,96.46253Z"/><path d="M65.6855,39.7409a33.36686,33.36686,0,0,1,14.30613-3.15372l.03571-.00119a30.94322,30.94322,0,0,1,31.95879,29.89309v22.6704a2.29317,2.29317,0,1,0,4.57068-.2742v-22.579A35.514,35.514,0,0,0,79.99163,32.0165a37.88963,37.88963,0,0,0-16.22581,3.56516A2.29044,2.29044,0,1,0,65.6855,39.7409Z"/><path d="M56.72706,42.9404a2.295,2.295,0,0,0-3.24518-.04578A33.09153,33.09153,0,0,0,43.42645,66.47908v47.21479a2.2853,2.2853,0,1,0,4.57059,0V66.47908a28.567,28.567,0,0,1,8.68424-20.29359A2.29484,2.29484,0,0,0,56.72706,42.9404Z"/><path d="M86.80188,42.84894a27.92679,27.92679,0,0,0-12.29509-.2742A27.14962,27.14962,0,0,0,52.56772,68.90157v53.11088a2.28534,2.28534,0,1,0,4.57068,0V93.63914a17.4489,17.4489,0,0,0,2.97089,4.19458,20.85342,20.85342,0,0,1,6.17039,11.86918v6.78754a2.25125,2.25125,0,0,0,0,.24985v8.97437a2.2853,2.2853,0,1,0,4.57059,0v-8.773a25.4804,25.4804,0,0,0,.30615-5.15689c.59317-6.03013,2.33194-16.46175,7.41825-23.59508,6.51407-9.13551,6.12479-15.36586,5.911-17.32271h4.63651a55.70992,55.70992,0,0,0,.01071,6.69315v48.15458a2.28535,2.28535,0,0,0,4.57069,0V94.87812a25.77379,25.77379,0,0,0,1.554,2.45288,45.685,45.685,0,0,1,7.58726,21.88753v2.79392a2.2853,2.2853,0,1,0,4.57059,0V68.90157A27.05818,27.05818,0,0,0,86.80188,42.84894ZM66.27968,97.80616a25.48236,25.48236,0,0,0-2.97089-3.40036c-5.02772-5.25632-6.17039-18.694-6.17039-23.53887h9.14128Zm8.59278-12.26743a36.49909,36.49909,0,0,0-4.02219,7.30536V70.86693h9.09742a2.31209,2.31209,0,0,0,.04394.5485C79.99163,71.46111,81.1343,76.763,74.87246,85.53873Zm27.9724,16.12006a49.905,49.905,0,0,0-3.885-6.97879c-6.49036-9.09559-5.11917-23.58455-5.11917-23.58455l.00229-.02271c.00659-.06985-.00156-.137-.00119-.20581h9.00312ZM57.36573,66.29625A22.52238,22.52238,0,0,1,75.37526,47.28247a23.67615,23.67615,0,0,1,10.284,0,22.431,22.431,0,0,1,16.99293,19.01378Z"/><path d="M82.27688,91.43482a2.28527,2.28527,0,0,0-2.28525,2.28534v31.9945a2.2853,2.2853,0,1,0,4.57059,0V93.72016A2.28535,2.28535,0,0,0,82.27688,91.43482Z"/></g><path class="cls-2" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-2" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-2" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-2" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><rect class="cls-3" x="22" y="11" width="116" height="60"/><rect class="cls-2" x="22" y="68" width="116" height="4"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/fingervein6.svg b/polkit-agent/assets/biowaiting/fingervein6.svg
+new file mode 100644
+index 0000000..4a6776e
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/fingervein6.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="82" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><g class="cls-1"><path d="M114.27147,96.46253a2.28536,2.28536,0,0,0-2.28534,2.28534v14.1233a2.28534,2.28534,0,1,0,4.57068,0V98.74787A2.28536,2.28536,0,0,0,114.27147,96.46253Z"/><path d="M65.6855,39.7409a33.36686,33.36686,0,0,1,14.30613-3.15372l.03571-.00119a30.94322,30.94322,0,0,1,31.95879,29.89309v22.6704a2.29317,2.29317,0,1,0,4.57068-.2742v-22.579A35.514,35.514,0,0,0,79.99163,32.0165a37.88963,37.88963,0,0,0-16.22581,3.56516A2.29044,2.29044,0,1,0,65.6855,39.7409Z"/><path d="M56.72706,42.9404a2.295,2.295,0,0,0-3.24518-.04578A33.09153,33.09153,0,0,0,43.42645,66.47908v47.21479a2.2853,2.2853,0,1,0,4.57059,0V66.47908a28.567,28.567,0,0,1,8.68424-20.29359A2.29484,2.29484,0,0,0,56.72706,42.9404Z"/><path d="M86.80188,42.84894a27.92679,27.92679,0,0,0-12.29509-.2742A27.14962,27.14962,0,0,0,52.56772,68.90157v53.11088a2.28534,2.28534,0,1,0,4.57068,0V93.63914a17.4489,17.4489,0,0,0,2.97089,4.19458,20.85342,20.85342,0,0,1,6.17039,11.86918v6.78754a2.25125,2.25125,0,0,0,0,.24985v8.97437a2.2853,2.2853,0,1,0,4.57059,0v-8.773a25.4804,25.4804,0,0,0,.30615-5.15689c.59317-6.03013,2.33194-16.46175,7.41825-23.59508,6.51407-9.13551,6.12479-15.36586,5.911-17.32271h4.63651a55.70992,55.70992,0,0,0,.01071,6.69315v48.15458a2.28535,2.28535,0,0,0,4.57069,0V94.87812a25.77379,25.77379,0,0,0,1.554,2.45288,45.685,45.685,0,0,1,7.58726,21.88753v2.79392a2.2853,2.2853,0,1,0,4.57059,0V68.90157A27.05818,27.05818,0,0,0,86.80188,42.84894ZM66.27968,97.80616a25.48236,25.48236,0,0,0-2.97089-3.40036c-5.02772-5.25632-6.17039-18.694-6.17039-23.53887h9.14128Zm8.59278-12.26743a36.49909,36.49909,0,0,0-4.02219,7.30536V70.86693h9.09742a2.31209,2.31209,0,0,0,.04394.5485C79.99163,71.46111,81.1343,76.763,74.87246,85.53873Zm27.9724,16.12006a49.905,49.905,0,0,0-3.885-6.97879c-6.49036-9.09559-5.11917-23.58455-5.11917-23.58455l.00229-.02271c.00659-.06985-.00156-.137-.00119-.20581h9.00312ZM57.36573,66.29625A22.52238,22.52238,0,0,1,75.37526,47.28247a23.67615,23.67615,0,0,1,10.284,0,22.431,22.431,0,0,1,16.99293,19.01378Z"/><path d="M82.27688,91.43482a2.28527,2.28527,0,0,0-2.28525,2.28534v31.9945a2.2853,2.2853,0,1,0,4.57059,0V93.72016A2.28535,2.28535,0,0,0,82.27688,91.43482Z"/></g><path class="cls-2" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-2" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-2" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-2" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><rect class="cls-3" x="22" y="11" width="116" height="71"/><rect class="cls-2" x="22" y="79" width="116" height="4"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/fingervein7.svg b/polkit-agent/assets/biowaiting/fingervein7.svg
+new file mode 100644
+index 0000000..f7adf46
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/fingervein7.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="93" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><g class="cls-1"><path d="M114.27147,96.46253a2.28536,2.28536,0,0,0-2.28534,2.28534v14.1233a2.28534,2.28534,0,1,0,4.57068,0V98.74787A2.28536,2.28536,0,0,0,114.27147,96.46253Z"/><path d="M65.6855,39.7409a33.36686,33.36686,0,0,1,14.30613-3.15372l.03571-.00119a30.94322,30.94322,0,0,1,31.95879,29.89309v22.6704a2.29317,2.29317,0,1,0,4.57068-.2742v-22.579A35.514,35.514,0,0,0,79.99163,32.0165a37.88963,37.88963,0,0,0-16.22581,3.56516A2.29044,2.29044,0,1,0,65.6855,39.7409Z"/><path d="M56.72706,42.9404a2.295,2.295,0,0,0-3.24518-.04578A33.09153,33.09153,0,0,0,43.42645,66.47908v47.21479a2.2853,2.2853,0,1,0,4.57059,0V66.47908a28.567,28.567,0,0,1,8.68424-20.29359A2.29484,2.29484,0,0,0,56.72706,42.9404Z"/><path d="M86.80188,42.84894a27.92679,27.92679,0,0,0-12.29509-.2742A27.14962,27.14962,0,0,0,52.56772,68.90157v53.11088a2.28534,2.28534,0,1,0,4.57068,0V93.63914a17.4489,17.4489,0,0,0,2.97089,4.19458,20.85342,20.85342,0,0,1,6.17039,11.86918v6.78754a2.25125,2.25125,0,0,0,0,.24985v8.97437a2.2853,2.2853,0,1,0,4.57059,0v-8.773a25.4804,25.4804,0,0,0,.30615-5.15689c.59317-6.03013,2.33194-16.46175,7.41825-23.59508,6.51407-9.13551,6.12479-15.36586,5.911-17.32271h4.63651a55.70992,55.70992,0,0,0,.01071,6.69315v48.15458a2.28535,2.28535,0,0,0,4.57069,0V94.87812a25.77379,25.77379,0,0,0,1.554,2.45288,45.685,45.685,0,0,1,7.58726,21.88753v2.79392a2.2853,2.2853,0,1,0,4.57059,0V68.90157A27.05818,27.05818,0,0,0,86.80188,42.84894ZM66.27968,97.80616a25.48236,25.48236,0,0,0-2.97089-3.40036c-5.02772-5.25632-6.17039-18.694-6.17039-23.53887h9.14128Zm8.59278-12.26743a36.49909,36.49909,0,0,0-4.02219,7.30536V70.86693h9.09742a2.31209,2.31209,0,0,0,.04394.5485C79.99163,71.46111,81.1343,76.763,74.87246,85.53873Zm27.9724,16.12006a49.905,49.905,0,0,0-3.885-6.97879c-6.49036-9.09559-5.11917-23.58455-5.11917-23.58455l.00229-.02271c.00659-.06985-.00156-.137-.00119-.20581h9.00312ZM57.36573,66.29625A22.52238,22.52238,0,0,1,75.37526,47.28247a23.67615,23.67615,0,0,1,10.284,0,22.431,22.431,0,0,1,16.99293,19.01378Z"/><path d="M82.27688,91.43482a2.28527,2.28527,0,0,0-2.28525,2.28534v31.9945a2.2853,2.2853,0,1,0,4.57059,0V93.72016A2.28535,2.28535,0,0,0,82.27688,91.43482Z"/></g><path class="cls-2" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-2" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-2" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-2" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><rect class="cls-3" x="22" y="11" width="116" height="82"/><rect class="cls-2" x="22" y="90" width="116" height="4"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/fingervein8.svg b/polkit-agent/assets/biowaiting/fingervein8.svg
+new file mode 100644
+index 0000000..1ea6843
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/fingervein8.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="104" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><g class="cls-1"><path d="M114.27147,96.46253a2.28536,2.28536,0,0,0-2.28534,2.28534v14.1233a2.28534,2.28534,0,1,0,4.57068,0V98.74787A2.28536,2.28536,0,0,0,114.27147,96.46253Z"/><path d="M65.6855,39.7409a33.36686,33.36686,0,0,1,14.30613-3.15372l.03571-.00119a30.94322,30.94322,0,0,1,31.95879,29.89309v22.6704a2.29317,2.29317,0,1,0,4.57068-.2742v-22.579A35.514,35.514,0,0,0,79.99163,32.0165a37.88963,37.88963,0,0,0-16.22581,3.56516A2.29044,2.29044,0,1,0,65.6855,39.7409Z"/><path d="M56.72706,42.9404a2.295,2.295,0,0,0-3.24518-.04578A33.09153,33.09153,0,0,0,43.42645,66.47908v47.21479a2.2853,2.2853,0,1,0,4.57059,0V66.47908a28.567,28.567,0,0,1,8.68424-20.29359A2.29484,2.29484,0,0,0,56.72706,42.9404Z"/><path d="M86.80188,42.84894a27.92679,27.92679,0,0,0-12.29509-.2742A27.14962,27.14962,0,0,0,52.56772,68.90157v53.11088a2.28534,2.28534,0,1,0,4.57068,0V93.63914a17.4489,17.4489,0,0,0,2.97089,4.19458,20.85342,20.85342,0,0,1,6.17039,11.86918v6.78754a2.25125,2.25125,0,0,0,0,.24985v8.97437a2.2853,2.2853,0,1,0,4.57059,0v-8.773a25.4804,25.4804,0,0,0,.30615-5.15689c.59317-6.03013,2.33194-16.46175,7.41825-23.59508,6.51407-9.13551,6.12479-15.36586,5.911-17.32271h4.63651a55.70992,55.70992,0,0,0,.01071,6.69315v48.15458a2.28535,2.28535,0,0,0,4.57069,0V94.87812a25.77379,25.77379,0,0,0,1.554,2.45288,45.685,45.685,0,0,1,7.58726,21.88753v2.79392a2.2853,2.2853,0,1,0,4.57059,0V68.90157A27.05818,27.05818,0,0,0,86.80188,42.84894ZM66.27968,97.80616a25.48236,25.48236,0,0,0-2.97089-3.40036c-5.02772-5.25632-6.17039-18.694-6.17039-23.53887h9.14128Zm8.59278-12.26743a36.49909,36.49909,0,0,0-4.02219,7.30536V70.86693h9.09742a2.31209,2.31209,0,0,0,.04394.5485C79.99163,71.46111,81.1343,76.763,74.87246,85.53873Zm27.9724,16.12006a49.905,49.905,0,0,0-3.885-6.97879c-6.49036-9.09559-5.11917-23.58455-5.11917-23.58455l.00229-.02271c.00659-.06985-.00156-.137-.00119-.20581h9.00312ZM57.36573,66.29625A22.52238,22.52238,0,0,1,75.37526,47.28247a23.67615,23.67615,0,0,1,10.284,0,22.431,22.431,0,0,1,16.99293,19.01378Z"/><path d="M82.27688,91.43482a2.28527,2.28527,0,0,0-2.28525,2.28534v31.9945a2.2853,2.2853,0,1,0,4.57059,0V93.72016A2.28535,2.28535,0,0,0,82.27688,91.43482Z"/></g><path class="cls-2" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-2" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-2" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-2" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><rect class="cls-3" x="22" y="11" width="116" height="93"/><rect class="cls-2" x="22" y="101" width="116" height="4"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/fingervein9.svg b/polkit-agent/assets/biowaiting/fingervein9.svg
+new file mode 100644
+index 0000000..6e00868
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/fingervein9.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{opacity:0.2;}.cls-2{fill:#3790fa;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="116" x2="80" y2="12" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><g class="cls-1"><path d="M114.27147,96.46253a2.28536,2.28536,0,0,0-2.28534,2.28534v14.1233a2.28534,2.28534,0,1,0,4.57068,0V98.74787A2.28536,2.28536,0,0,0,114.27147,96.46253Z"/><path d="M65.6855,39.7409a33.36686,33.36686,0,0,1,14.30613-3.15372l.03571-.00119a30.94322,30.94322,0,0,1,31.95879,29.89309v22.6704a2.29317,2.29317,0,1,0,4.57068-.2742v-22.579A35.514,35.514,0,0,0,79.99163,32.0165a37.88963,37.88963,0,0,0-16.22581,3.56516A2.29044,2.29044,0,1,0,65.6855,39.7409Z"/><path d="M56.72706,42.9404a2.295,2.295,0,0,0-3.24518-.04578A33.09153,33.09153,0,0,0,43.42645,66.47908v47.21479a2.2853,2.2853,0,1,0,4.57059,0V66.47908a28.567,28.567,0,0,1,8.68424-20.29359A2.29484,2.29484,0,0,0,56.72706,42.9404Z"/><path d="M86.80188,42.84894a27.92679,27.92679,0,0,0-12.29509-.2742A27.14962,27.14962,0,0,0,52.56772,68.90157v53.11088a2.28534,2.28534,0,1,0,4.57068,0V93.63914a17.4489,17.4489,0,0,0,2.97089,4.19458,20.85342,20.85342,0,0,1,6.17039,11.86918v6.78754a2.25125,2.25125,0,0,0,0,.24985v8.97437a2.2853,2.2853,0,1,0,4.57059,0v-8.773a25.4804,25.4804,0,0,0,.30615-5.15689c.59317-6.03013,2.33194-16.46175,7.41825-23.59508,6.51407-9.13551,6.12479-15.36586,5.911-17.32271h4.63651a55.70992,55.70992,0,0,0,.01071,6.69315v48.15458a2.28535,2.28535,0,0,0,4.57069,0V94.87812a25.77379,25.77379,0,0,0,1.554,2.45288,45.685,45.685,0,0,1,7.58726,21.88753v2.79392a2.2853,2.2853,0,1,0,4.57059,0V68.90157A27.05818,27.05818,0,0,0,86.80188,42.84894ZM66.27968,97.80616a25.48236,25.48236,0,0,0-2.97089-3.40036c-5.02772-5.25632-6.17039-18.694-6.17039-23.53887h9.14128Zm8.59278-12.26743a36.49909,36.49909,0,0,0-4.02219,7.30536V70.86693h9.09742a2.31209,2.31209,0,0,0,.04394.5485C79.99163,71.46111,81.1343,76.763,74.87246,85.53873Zm27.9724,16.12006a49.905,49.905,0,0,0-3.885-6.97879c-6.49036-9.09559-5.11917-23.58455-5.11917-23.58455l.00229-.02271c.00659-.06985-.00156-.137-.00119-.20581h9.00312ZM57.36573,66.29625A22.52238,22.52238,0,0,1,75.37526,47.28247a23.67615,23.67615,0,0,1,10.284,0,22.431,22.431,0,0,1,16.99293,19.01378Z"/><path d="M82.27688,91.43482a2.28527,2.28527,0,0,0-2.28525,2.28534v31.9945a2.2853,2.2853,0,1,0,4.57059,0V93.72016A2.28535,2.28535,0,0,0,82.27688,91.43482Z"/></g><path class="cls-2" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-2" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-2" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-2" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><rect class="cls-3" x="22" y="12" width="116" height="104"/><rect class="cls-2" x="22" y="112" width="116" height="4"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/iris0.svg b/polkit-agent/assets/biowaiting/iris0.svg
+new file mode 100644
+index 0000000..6fb8a60
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/iris0.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160"><defs><style>.cls-1{fill:#3790fa;}.cls-2{opacity:0.2;}</style></defs><g id="文字标注"><path class="cls-1" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-1" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-1" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-1" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><g class="cls-2"><path d="M80,112c-28.1582,0-50.24707-28.35742-51.17285-29.56445L26.958,80l1.86914-2.43555C29.75293,76.35742,51.8418,48,80,48s50.24707,28.35742,51.17285,29.56445L133.042,80l-1.86914,2.43555C130.24707,83.64258,108.1582,112,80,112ZM37.22266,80C42.99512,86.54346,60.249,104,80,104s37.00391-17.45508,42.77734-24C117.00391,73.45508,99.751,56,80,56S42.99609,73.45508,37.22266,80Z"/></g><g class="cls-2"><circle cx="80" cy="80" r="18"/></g></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/iris1.svg b/polkit-agent/assets/biowaiting/iris1.svg
+new file mode 100644
+index 0000000..052eefb
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/iris1.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{fill:#3790fa;}.cls-2{opacity:0.2;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="27" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><path class="cls-1" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-1" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-1" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-1" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><g class="cls-2"><path d="M80,112c-28.1582,0-50.24707-28.35742-51.17285-29.56445L26.958,80l1.86914-2.43555C29.75293,76.35742,51.8418,48,80,48s50.24707,28.35742,51.17285,29.56445L133.042,80l-1.86914,2.43555C130.24707,83.64258,108.1582,112,80,112ZM37.22266,80C42.99512,86.54346,60.249,104,80,104s37.00391-17.45508,42.77734-24C117.00391,73.45508,99.751,56,80,56S42.99609,73.45508,37.22266,80Z"/></g><g class="cls-2"><circle cx="80" cy="80" r="18"/></g><rect class="cls-3" x="22" y="11" width="116" height="16"/><rect class="cls-1" x="22" y="24" width="116" height="4"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/iris10.svg b/polkit-agent/assets/biowaiting/iris10.svg
+new file mode 100644
+index 0000000..0df7826
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/iris10.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{fill:#3790fa;}.cls-2{opacity:0.2;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="126" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><path class="cls-1" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-1" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-1" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-1" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><g class="cls-2"><path d="M80,112c-28.1582,0-50.24707-28.35742-51.17285-29.56445L26.958,80l1.86914-2.43555C29.75293,76.35742,51.8418,48,80,48s50.24707,28.35742,51.17285,29.56445L133.042,80l-1.86914,2.43555C130.24707,83.64258,108.1582,112,80,112ZM37.22266,80C42.99512,86.54346,60.249,104,80,104s37.00391-17.45508,42.77734-24C117.00391,73.45508,99.751,56,80,56S42.99609,73.45508,37.22266,80Z"/></g><g class="cls-2"><circle cx="80" cy="80" r="18"/></g><rect class="cls-3" x="22" y="11" width="116" height="115"/><rect class="cls-1" x="22" y="123" width="116" height="4"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/iris11.svg b/polkit-agent/assets/biowaiting/iris11.svg
+new file mode 100644
+index 0000000..8ab52bd
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/iris11.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{fill:#3790fa;}.cls-2{opacity:0.2;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="137" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><path class="cls-1" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-1" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-1" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-1" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><g class="cls-2"><path d="M80,112c-28.1582,0-50.24707-28.35742-51.17285-29.56445L26.958,80l1.86914-2.43555C29.75293,76.35742,51.8418,48,80,48s50.24707,28.35742,51.17285,29.56445L133.042,80l-1.86914,2.43555C130.24707,83.64258,108.1582,112,80,112ZM37.22266,80C42.99512,86.54346,60.249,104,80,104s37.00391-17.45508,42.77734-24C117.00391,73.45508,99.751,56,80,56S42.99609,73.45508,37.22266,80Z"/></g><g class="cls-2"><circle cx="80" cy="80" r="18"/></g><rect class="cls-3" x="22" y="11" width="116" height="126"/><rect class="cls-1" x="22" y="134" width="116" height="4"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/iris2.svg b/polkit-agent/assets/biowaiting/iris2.svg
+new file mode 100644
+index 0000000..68c4479
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/iris2.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{fill:#3790fa;}.cls-2{opacity:0.2;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="38" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><path class="cls-1" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-1" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-1" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-1" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><g class="cls-2"><path d="M80,112c-28.1582,0-50.24707-28.35742-51.17285-29.56445L26.958,80l1.86914-2.43555C29.75293,76.35742,51.8418,48,80,48s50.24707,28.35742,51.17285,29.56445L133.042,80l-1.86914,2.43555C130.24707,83.64258,108.1582,112,80,112ZM37.22266,80C42.99512,86.54346,60.249,104,80,104s37.00391-17.45508,42.77734-24C117.00391,73.45508,99.751,56,80,56S42.99609,73.45508,37.22266,80Z"/></g><g class="cls-2"><circle cx="80" cy="80" r="18"/></g><rect class="cls-3" x="22" y="11" width="116" height="27"/><rect class="cls-1" x="22" y="35" width="116" height="4"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/iris3.svg b/polkit-agent/assets/biowaiting/iris3.svg
+new file mode 100644
+index 0000000..b750b2e
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/iris3.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{fill:#3790fa;}.cls-2{opacity:0.2;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="49" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><path class="cls-1" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-1" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-1" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-1" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><g class="cls-2"><path d="M80,112c-28.1582,0-50.24707-28.35742-51.17285-29.56445L26.958,80l1.86914-2.43555C29.75293,76.35742,51.8418,48,80,48s50.24707,28.35742,51.17285,29.56445L133.042,80l-1.86914,2.43555C130.24707,83.64258,108.1582,112,80,112ZM37.22266,80C42.99512,86.54346,60.249,104,80,104s37.00391-17.45508,42.77734-24C117.00391,73.45508,99.751,56,80,56S42.99609,73.45508,37.22266,80Z"/></g><g class="cls-2"><circle cx="80" cy="80" r="18"/></g><rect class="cls-3" x="22" y="11" width="116" height="38"/><rect class="cls-1" x="22" y="46" width="116" height="4"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/iris4.svg b/polkit-agent/assets/biowaiting/iris4.svg
+new file mode 100644
+index 0000000..141450c
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/iris4.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{fill:#3790fa;}.cls-2{opacity:0.2;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="60" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><path class="cls-1" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-1" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-1" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-1" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><g class="cls-2"><path d="M80,112c-28.1582,0-50.24707-28.35742-51.17285-29.56445L26.958,80l1.86914-2.43555C29.75293,76.35742,51.8418,48,80,48s50.24707,28.35742,51.17285,29.56445L133.042,80l-1.86914,2.43555C130.24707,83.64258,108.1582,112,80,112ZM37.22266,80C42.99512,86.54346,60.249,104,80,104s37.00391-17.45508,42.77734-24C117.00391,73.45508,99.751,56,80,56S42.99609,73.45508,37.22266,80Z"/></g><g class="cls-2"><circle cx="80" cy="80" r="18"/></g><rect class="cls-3" x="22" y="11" width="116" height="49"/><rect class="cls-1" x="22" y="57" width="116" height="4"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/iris5.svg b/polkit-agent/assets/biowaiting/iris5.svg
+new file mode 100644
+index 0000000..e879021
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/iris5.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{fill:#3790fa;}.cls-2{opacity:0.2;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="71" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><path class="cls-1" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-1" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-1" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-1" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><g class="cls-2"><path d="M80,112c-28.1582,0-50.24707-28.35742-51.17285-29.56445L26.958,80l1.86914-2.43555C29.75293,76.35742,51.8418,48,80,48s50.24707,28.35742,51.17285,29.56445L133.042,80l-1.86914,2.43555C130.24707,83.64258,108.1582,112,80,112ZM37.22266,80C42.99512,86.54346,60.249,104,80,104s37.00391-17.45508,42.77734-24C117.00391,73.45508,99.751,56,80,56S42.99609,73.45508,37.22266,80Z"/></g><g class="cls-2"><circle cx="80" cy="80" r="18"/></g><rect class="cls-3" x="22" y="11" width="116" height="60"/><rect class="cls-1" x="22" y="68" width="116" height="4"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/iris6.svg b/polkit-agent/assets/biowaiting/iris6.svg
+new file mode 100644
+index 0000000..f4e971d
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/iris6.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{fill:#3790fa;}.cls-2{opacity:0.2;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="82" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><path class="cls-1" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-1" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-1" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-1" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><g class="cls-2"><path d="M80,112c-28.1582,0-50.24707-28.35742-51.17285-29.56445L26.958,80l1.86914-2.43555C29.75293,76.35742,51.8418,48,80,48s50.24707,28.35742,51.17285,29.56445L133.042,80l-1.86914,2.43555C130.24707,83.64258,108.1582,112,80,112ZM37.22266,80C42.99512,86.54346,60.249,104,80,104s37.00391-17.45508,42.77734-24C117.00391,73.45508,99.751,56,80,56S42.99609,73.45508,37.22266,80Z"/></g><g class="cls-2"><circle cx="80" cy="80" r="18"/></g><rect class="cls-3" x="22" y="11" width="116" height="71"/><rect class="cls-1" x="22" y="79" width="116" height="4"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/iris7.svg b/polkit-agent/assets/biowaiting/iris7.svg
+new file mode 100644
+index 0000000..9cf5557
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/iris7.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{fill:#3790fa;}.cls-2{opacity:0.2;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="93" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><path class="cls-1" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-1" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-1" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-1" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><g class="cls-2"><path d="M80,112c-28.1582,0-50.24707-28.35742-51.17285-29.56445L26.958,80l1.86914-2.43555C29.75293,76.35742,51.8418,48,80,48s50.24707,28.35742,51.17285,29.56445L133.042,80l-1.86914,2.43555C130.24707,83.64258,108.1582,112,80,112ZM37.22266,80C42.99512,86.54346,60.249,104,80,104s37.00391-17.45508,42.77734-24C117.00391,73.45508,99.751,56,80,56S42.99609,73.45508,37.22266,80Z"/></g><g class="cls-2"><circle cx="80" cy="80" r="18"/></g><rect class="cls-3" x="22" y="11" width="116" height="82"/><rect class="cls-1" x="22" y="90" width="116" height="4"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/iris8.svg b/polkit-agent/assets/biowaiting/iris8.svg
+new file mode 100644
+index 0000000..551dddd
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/iris8.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{fill:#3790fa;}.cls-2{opacity:0.2;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="104" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><path class="cls-1" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-1" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-1" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-1" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><g class="cls-2"><path d="M80,112c-28.1582,0-50.24707-28.35742-51.17285-29.56445L26.958,80l1.86914-2.43555C29.75293,76.35742,51.8418,48,80,48s50.24707,28.35742,51.17285,29.56445L133.042,80l-1.86914,2.43555C130.24707,83.64258,108.1582,112,80,112ZM37.22266,80C42.99512,86.54346,60.249,104,80,104s37.00391-17.45508,42.77734-24C117.00391,73.45508,99.751,56,80,56S42.99609,73.45508,37.22266,80Z"/></g><g class="cls-2"><circle cx="80" cy="80" r="18"/></g><rect class="cls-3" x="22" y="11" width="116" height="93"/><rect class="cls-1" x="22" y="101" width="116" height="4"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/iris9.svg b/polkit-agent/assets/biowaiting/iris9.svg
+new file mode 100644
+index 0000000..4304442
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/iris9.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 160"><defs><style>.cls-1{fill:#3790fa;}.cls-2{opacity:0.2;}.cls-3{fill:url(#未命名的渐变_8);}</style><linearGradient id="未命名的渐变_8" x1="80" y1="115" x2="80" y2="11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3790fa"/><stop offset="1" stop-color="#3790fa" stop-opacity="0"/></linearGradient></defs><g id="文字标注"><path class="cls-1" d="M154,52h-8V35a21.0239,21.0239,0,0,0-21-21H108V6h17a29.03307,29.03307,0,0,1,29,29Z"/><path class="cls-1" d="M125,154H108v-8h17a21.02422,21.02422,0,0,0,21-21V108h8v17A29.03339,29.03339,0,0,1,125,154Z"/><path class="cls-1" d="M52,154H35A29.03339,29.03339,0,0,1,6,125V108h8v17a21.02422,21.02422,0,0,0,21,21H52Z"/><path class="cls-1" d="M14,52H6V35A29.03307,29.03307,0,0,1,35,6H52v8H35A21.0239,21.0239,0,0,0,14,35Z"/><g class="cls-2"><path d="M80,112c-28.1582,0-50.24707-28.35742-51.17285-29.56445L26.958,80l1.86914-2.43555C29.75293,76.35742,51.8418,48,80,48s50.24707,28.35742,51.17285,29.56445L133.042,80l-1.86914,2.43555C130.24707,83.64258,108.1582,112,80,112ZM37.22266,80C42.99512,86.54346,60.249,104,80,104s37.00391-17.45508,42.77734-24C117.00391,73.45508,99.751,56,80,56S42.99609,73.45508,37.22266,80Z"/></g><g class="cls-2"><circle cx="80" cy="80" r="18"/></g><rect class="cls-3" x="22" y="11" width="116" height="104"/><rect class="cls-1" x="22" y="112" width="116" height="4"/></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/voiceprint0.svg b/polkit-agent/assets/biowaiting/voiceprint0.svg
+new file mode 100644
+index 0000000..73e5a92
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/voiceprint0.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="160" height="160" viewBox="0 0 160 160"><defs><clipPath id="master_svg0_137_7562"><rect x="0" y="0" width="160" height="160" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_137_7562)"><g><g><g><path d="M39.1124,148.054703125C38.3444,148.057703125,37.5922,147.836703125,36.9481,147.418703125C13.901,132.702703125,-0.0330976,107.240403125,0.0000590405,79.902203125C0.0332156,52.564003125,14.029,27.135703125,37.1117,12.475633125C38.975,11.285731125,41.4504,11.831117025,42.6407,13.693793125C43.831,15.556463125,43.2855,18.031063125,41.4222,19.220963125C20.6552,32.425603124999995,8.06623,55.312603125,8.03676,79.916303125C8.00729,104.520003125,20.5414,127.436703125,41.2767,140.691703125C42.7693,141.651703125,43.4507,143.479703125,42.9503,145.182703125C42.4499,146.884703125,40.8874,148.054703125,39.1124,148.054703125C39.1124,148.054703125,39.1124,148.054703125,39.1124,148.054703125Z" fill="#FFFFFF" fill-opacity="0.6000000238418579"/></g></g><g><path d="M54.426225703125,155.8C62.681345703125004,158.59,71.33814570312501,160.009,80.052345703125,160C111.653345703125,159.969,140.27674570312502,141.35,153.106345703125,112.48C165.936345703125,83.6103,160.569345703125,49.8964,139.409045703125,26.4337C118.248745703125,2.97097,85.25804570312499,-5.84615,55.208285703125,3.93015C53.103925703125,4.61296,51.951713703125,6.87185,52.634750703125,8.97552C53.317795703125,11.0792,55.577425703125,12.231,57.681785703125,11.5482C74.305345703125,6.12797,91.821545703125,7.05037,107.241245703125,13.3413C104.384245703125,18.2636,102.508145703125,24.9989,100.931645703125,30.675C100.222345703125,33.2932,99.604045703125,35.4568,99.022045703125,36.9295C97.858045703125,40.1658,91.747045703125,41.8567,86.290745703125,43.3475C83.87184570312499,44.0203,81.507445703125,44.6748,79.43404570312501,45.4566C76.981445703125,46.4019,75.100245703125,48.4228,74.333145703125,50.9362C73.566045703125,53.4496,73.998445703125,56.1761,75.505545703125,58.3291C77.248545703125,61.0296,79.239545703125,63.5617,81.452845703125,65.8926C81.64074570312499,66.1836,81.724145703125,66.5298,81.689345703125,66.8744C81.69724570312499,67.3998,81.501745703125,67.9079,81.143745703125,68.2925C78.030645703125,70.5412,75.901445703125,73.9,75.196345703125,77.6742C74.915645703125,79.7922,75.580745703125,81.9265,77.015145703125,83.5104C77.480045703125,84.0259,78.005145703125,84.4837,78.579245703125,84.874C77.672745703125,85.892,76.941445703125,87.0532,76.414945703125,88.3103C74.619145703125,92.3514,75.88354570312501,97.0974,79.452245703125,99.7101C80.798145703125,100.765,80.961845703125,101.31,80.961845703125,101.31C80.461645703125,102.431,79.772645703125,103.458,78.924845703125,104.346L78.921645703125,104.35C76.847845703125,106.914,73.378945703125,111.203,75.905745703125,116.419C80.543545703125,125.928,95.439045703125,123.31,107.406445703125,121.201C110.573145703125,120.664,113.766745703125,120.3,116.973045703125,120.11C118.773645703125,122.492,112.789945703125,137.655,105.223945703125,145.237C104.505245703125,145.97,104.121245703125,146.909,104.071845703125,147.862C89.216745703125,153.122,72.674945703125,153.508,56.990645703125,148.218C54.896325703125,147.51,52.624489703125,148.634,51.916344703125,150.727C51.208198703125,152.821,52.331908703125,155.092,54.426225703125,155.8ZM118.214745703125,141.04C125.744545703125,136.334,132.481545703125,130.184,137.979745703125,122.731C156.564345703125,97.5395,156.73734570312502,63.2309,138.408945703125,37.8528C131.961945703125,28.926,123.745345703125,21.8237,114.506145703125,16.7893C112.015545703125,20.7283,110.012045703125,27.868,108.55224570312501,32.8205C107.751945703125,35.6931,107.042645703125,38.184,106.387945703125,39.8567C103.659845703125,46.802,95.47544570312499,49.0565,88.200445703125,51.0565C86.036145703125,51.6565,83.908245703125,52.2383,82.05304570312501,52.8746L81.834845703125,53.6928C83.269445703125,55.936,84.90064570312501,58.0473,86.709045703125,60.0018C88.579145703125,61.8519,89.571445703125,64.4113,89.437145703125,67.038C89.380645703125,69.8333,88.145345703125,72.4746,86.036145703125,74.3106C83.380745703125,76.5287,82.944245703125,77.9469,82.889745703125,78.5105C84.961245703125,79.2751,87.13984570312499,79.7107,89.34624570312499,79.8014C90.336245703125,79.7545,91.328445703125,79.7971,92.310845703125,79.9287C94.381045703125,80.2054,95.890145703125,82.0273,95.775845703125,84.1122C95.661645703125,86.197,93.962445703125,87.8433,91.874345703125,87.8922L89.309845703125,87.8922C86.925045703125,87.9384,84.74394570312501,89.2466,83.580845703125,91.3285C83.192945703125,92.0487,83.441545703125,92.9464,84.14464570312501,93.3648C86.572445703125,94.9684,88.220545703125,97.5122,88.691545703125,100.383C89.128045703125,104.183,86.87274570312499,107.055,84.926745703125,109.364C83.326245703125,111.31,82.616845703125,112.346,82.889745703125,112.874C84.872145703125,116.964,98.494545703125,114.583,105.80594570312499,113.292C109.114045703125,112.596,112.470145703125,112.152,115.845445703125,111.964C119.436245703125,111.744,122.778145703125,113.803,124.193545703125,117.11C126.866245703125,123.257,122.894845703125,133.21,118.214745703125,141.04Z" fill-rule="evenodd" fill="#FFFFFF" fill-opacity="0.6000000238418579"/></g></g><g><g><rect x="63" y="70" width="8" height="20" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="15" y="70" width="8" height="20" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="51" y="60" width="8" height="40" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="27" y="60" width="8" height="40" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="39" y="50" width="8" height="60" rx="4" fill="#3790FA" fill-opacity="1"/></g></g></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/voiceprint1.svg b/polkit-agent/assets/biowaiting/voiceprint1.svg
+new file mode 100644
+index 0000000..083798e
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/voiceprint1.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="160" height="160" viewBox="0 0 160 160"><defs><clipPath id="master_svg0_137_7581"><rect x="0" y="0" width="160" height="160" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_137_7581)"><g><g><rect x="63" y="68" width="8" height="24" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="15" y="68" width="8" height="24" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="51" y="65" width="8" height="30" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="27" y="65" width="8" height="30" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="39" y="56" width="8" height="48" rx="4" fill="#3790FA" fill-opacity="1"/></g></g><g><g><g><path d="M39.1124,148.054703125C38.3444,148.057703125,37.5922,147.836703125,36.9481,147.418703125C13.901,132.702703125,-0.0330976,107.240403125,0.0000590405,79.902203125C0.0332156,52.564003125,14.029,27.135703125,37.1117,12.475633125C38.975,11.285731125,41.4504,11.831117025,42.6407,13.693793125C43.831,15.556463125,43.2855,18.031063125,41.4222,19.220963125C20.6552,32.425603124999995,8.06623,55.312603125,8.03676,79.916303125C8.00729,104.520003125,20.5414,127.436703125,41.2767,140.691703125C42.7693,141.651703125,43.4507,143.479703125,42.9503,145.182703125C42.4499,146.884703125,40.8874,148.054703125,39.1124,148.054703125C39.1124,148.054703125,39.1124,148.054703125,39.1124,148.054703125Z" fill="#FFFFFF" fill-opacity="0.6000000238418579"/></g></g><g><path d="M54.426225703125,155.8C62.681345703125004,158.59,71.33814570312501,160.009,80.052345703125,160C111.653345703125,159.969,140.27674570312502,141.35,153.106345703125,112.48C165.936345703125,83.6103,160.569345703125,49.8964,139.409045703125,26.4337C118.248745703125,2.97097,85.25804570312499,-5.84615,55.208285703125,3.93015C53.103925703125,4.61296,51.951713703125,6.87185,52.634750703125,8.97552C53.317795703125,11.0792,55.577425703125,12.231,57.681785703125,11.5482C74.305345703125,6.12797,91.821545703125,7.05037,107.241245703125,13.3413C104.384245703125,18.2636,102.508145703125,24.9989,100.931645703125,30.675C100.222345703125,33.2932,99.604045703125,35.4568,99.022045703125,36.9295C97.858045703125,40.1658,91.747045703125,41.8567,86.290745703125,43.3475C83.87184570312499,44.0203,81.507445703125,44.6748,79.43404570312501,45.4566C76.981445703125,46.4019,75.100245703125,48.4228,74.333145703125,50.9362C73.566045703125,53.4496,73.998445703125,56.1761,75.505545703125,58.3291C77.248545703125,61.0296,79.239545703125,63.5617,81.452845703125,65.8926C81.64074570312499,66.1836,81.724145703125,66.5298,81.689345703125,66.8744C81.69724570312499,67.3998,81.501745703125,67.9079,81.143745703125,68.2925C78.030645703125,70.5412,75.901445703125,73.9,75.196345703125,77.6742C74.915645703125,79.7922,75.580745703125,81.9265,77.015145703125,83.5104C77.480045703125,84.0259,78.005145703125,84.4837,78.579245703125,84.874C77.672745703125,85.892,76.941445703125,87.0532,76.414945703125,88.3103C74.619145703125,92.3514,75.88354570312501,97.0974,79.452245703125,99.7101C80.798145703125,100.765,80.961845703125,101.31,80.961845703125,101.31C80.461645703125,102.431,79.772645703125,103.458,78.924845703125,104.346L78.921645703125,104.35C76.847845703125,106.914,73.378945703125,111.203,75.905745703125,116.419C80.543545703125,125.928,95.439045703125,123.31,107.406445703125,121.201C110.573145703125,120.664,113.766745703125,120.3,116.973045703125,120.11C118.773645703125,122.492,112.789945703125,137.655,105.223945703125,145.237C104.505245703125,145.97,104.121245703125,146.909,104.071845703125,147.862C89.216745703125,153.122,72.674945703125,153.508,56.990645703125,148.218C54.896325703125,147.51,52.624489703125,148.634,51.916344703125,150.727C51.208198703125,152.821,52.331908703125,155.092,54.426225703125,155.8ZM118.214745703125,141.04C125.744545703125,136.334,132.481545703125,130.184,137.979745703125,122.731C156.564345703125,97.5395,156.73734570312502,63.2309,138.408945703125,37.8528C131.961945703125,28.926,123.745345703125,21.8237,114.506145703125,16.7893C112.015545703125,20.7283,110.012045703125,27.868,108.55224570312501,32.8205C107.751945703125,35.6931,107.042645703125,38.184,106.387945703125,39.8567C103.659845703125,46.802,95.47544570312499,49.0565,88.200445703125,51.0565C86.036145703125,51.6565,83.908245703125,52.2383,82.05304570312501,52.8746L81.834845703125,53.6928C83.269445703125,55.936,84.90064570312501,58.0473,86.709045703125,60.0018C88.579145703125,61.8519,89.571445703125,64.4113,89.437145703125,67.038C89.380645703125,69.8333,88.145345703125,72.4746,86.036145703125,74.3106C83.380745703125,76.5287,82.944245703125,77.9469,82.889745703125,78.5105C84.961245703125,79.2751,87.13984570312499,79.7107,89.34624570312499,79.8014C90.336245703125,79.7545,91.328445703125,79.7971,92.310845703125,79.9287C94.381045703125,80.2054,95.890145703125,82.0273,95.775845703125,84.1122C95.661645703125,86.197,93.962445703125,87.8433,91.874345703125,87.8922L89.309845703125,87.8922C86.925045703125,87.9384,84.74394570312501,89.2466,83.580845703125,91.3285C83.192945703125,92.0487,83.441545703125,92.9464,84.14464570312501,93.3648C86.572445703125,94.9684,88.220545703125,97.5122,88.691545703125,100.383C89.128045703125,104.183,86.87274570312499,107.055,84.926745703125,109.364C83.326245703125,111.31,82.616845703125,112.346,82.889745703125,112.874C84.872145703125,116.964,98.494545703125,114.583,105.80594570312499,113.292C109.114045703125,112.596,112.470145703125,112.152,115.845445703125,111.964C119.436245703125,111.744,122.778145703125,113.803,124.193545703125,117.11C126.866245703125,123.257,122.894845703125,133.21,118.214745703125,141.04Z" fill-rule="evenodd" fill="#FFFFFF" fill-opacity="0.6000000238418579"/></g></g></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/voiceprint2.svg b/polkit-agent/assets/biowaiting/voiceprint2.svg
+new file mode 100644
+index 0000000..16883e1
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/voiceprint2.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="160" height="160" viewBox="0 0 160 160"><defs><clipPath id="master_svg0_137_7619"><rect x="0" y="0" width="160" height="160" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_137_7619)"><g><g><rect x="63" y="65" width="8" height="30" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="15" y="65" width="8" height="30" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="51" y="68" width="8" height="24" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="27" y="68" width="8" height="24" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="39" y="62" width="8" height="36" rx="4" fill="#3790FA" fill-opacity="1"/></g></g><g><g><g><path d="M39.1124,148.054703125C38.3444,148.057703125,37.5922,147.836703125,36.9481,147.418703125C13.901,132.702703125,-0.0330976,107.240403125,0.0000590405,79.902203125C0.0332156,52.564003125,14.029,27.135703125,37.1117,12.475633125C38.975,11.285731125,41.4504,11.831117025,42.6407,13.693793125C43.831,15.556463125,43.2855,18.031063125,41.4222,19.220963125C20.6552,32.425603124999995,8.06623,55.312603125,8.03676,79.916303125C8.00729,104.520003125,20.5414,127.436703125,41.2767,140.691703125C42.7693,141.651703125,43.4507,143.479703125,42.9503,145.182703125C42.4499,146.884703125,40.8874,148.054703125,39.1124,148.054703125C39.1124,148.054703125,39.1124,148.054703125,39.1124,148.054703125Z" fill="#FFFFFF" fill-opacity="0.6000000238418579"/></g></g><g><path d="M54.426225703125,155.8C62.681345703125004,158.59,71.33814570312501,160.009,80.052345703125,160C111.653345703125,159.969,140.27674570312502,141.35,153.106345703125,112.48C165.936345703125,83.6103,160.569345703125,49.8964,139.409045703125,26.4337C118.248745703125,2.97097,85.25804570312499,-5.84615,55.208285703125,3.93015C53.103925703125,4.61296,51.951713703125,6.87185,52.634750703125,8.97552C53.317795703125,11.0792,55.577425703125,12.231,57.681785703125,11.5482C74.305345703125,6.12797,91.821545703125,7.05037,107.241245703125,13.3413C104.384245703125,18.2636,102.508145703125,24.9989,100.931645703125,30.675C100.222345703125,33.2932,99.604045703125,35.4568,99.022045703125,36.9295C97.858045703125,40.1658,91.747045703125,41.8567,86.290745703125,43.3475C83.87184570312499,44.0203,81.507445703125,44.6748,79.43404570312501,45.4566C76.981445703125,46.4019,75.100245703125,48.4228,74.333145703125,50.9362C73.566045703125,53.4496,73.998445703125,56.1761,75.505545703125,58.3291C77.248545703125,61.0296,79.239545703125,63.5617,81.452845703125,65.8926C81.64074570312499,66.1836,81.724145703125,66.5298,81.689345703125,66.8744C81.69724570312499,67.3998,81.501745703125,67.9079,81.143745703125,68.2925C78.030645703125,70.5412,75.901445703125,73.9,75.196345703125,77.6742C74.915645703125,79.7922,75.580745703125,81.9265,77.015145703125,83.5104C77.480045703125,84.0259,78.005145703125,84.4837,78.579245703125,84.874C77.672745703125,85.892,76.941445703125,87.0532,76.414945703125,88.3103C74.619145703125,92.3514,75.88354570312501,97.0974,79.452245703125,99.7101C80.798145703125,100.765,80.961845703125,101.31,80.961845703125,101.31C80.461645703125,102.431,79.772645703125,103.458,78.924845703125,104.346L78.921645703125,104.35C76.847845703125,106.914,73.378945703125,111.203,75.905745703125,116.419C80.543545703125,125.928,95.439045703125,123.31,107.406445703125,121.201C110.573145703125,120.664,113.766745703125,120.3,116.973045703125,120.11C118.773645703125,122.492,112.789945703125,137.655,105.223945703125,145.237C104.505245703125,145.97,104.121245703125,146.909,104.071845703125,147.862C89.216745703125,153.122,72.674945703125,153.508,56.990645703125,148.218C54.896325703125,147.51,52.624489703125,148.634,51.916344703125,150.727C51.208198703125,152.821,52.331908703125,155.092,54.426225703125,155.8ZM118.214745703125,141.04C125.744545703125,136.334,132.481545703125,130.184,137.979745703125,122.731C156.564345703125,97.5395,156.73734570312502,63.2309,138.408945703125,37.8528C131.961945703125,28.926,123.745345703125,21.8237,114.506145703125,16.7893C112.015545703125,20.7283,110.012045703125,27.868,108.55224570312501,32.8205C107.751945703125,35.6931,107.042645703125,38.184,106.387945703125,39.8567C103.659845703125,46.802,95.47544570312499,49.0565,88.200445703125,51.0565C86.036145703125,51.6565,83.908245703125,52.2383,82.05304570312501,52.8746L81.834845703125,53.6928C83.269445703125,55.936,84.90064570312501,58.0473,86.709045703125,60.0018C88.579145703125,61.8519,89.571445703125,64.4113,89.437145703125,67.038C89.380645703125,69.8333,88.145345703125,72.4746,86.036145703125,74.3106C83.380745703125,76.5287,82.944245703125,77.9469,82.889745703125,78.5105C84.961245703125,79.2751,87.13984570312499,79.7107,89.34624570312499,79.8014C90.336245703125,79.7545,91.328445703125,79.7971,92.310845703125,79.9287C94.381045703125,80.2054,95.890145703125,82.0273,95.775845703125,84.1122C95.661645703125,86.197,93.962445703125,87.8433,91.874345703125,87.8922L89.309845703125,87.8922C86.925045703125,87.9384,84.74394570312501,89.2466,83.580845703125,91.3285C83.192945703125,92.0487,83.441545703125,92.9464,84.14464570312501,93.3648C86.572445703125,94.9684,88.220545703125,97.5122,88.691545703125,100.383C89.128045703125,104.183,86.87274570312499,107.055,84.926745703125,109.364C83.326245703125,111.31,82.616845703125,112.346,82.889745703125,112.874C84.872145703125,116.964,98.494545703125,114.583,105.80594570312499,113.292C109.114045703125,112.596,112.470145703125,112.152,115.845445703125,111.964C119.436245703125,111.744,122.778145703125,113.803,124.193545703125,117.11C126.866245703125,123.257,122.894845703125,133.21,118.214745703125,141.04Z" fill-rule="evenodd" fill="#FFFFFF" fill-opacity="0.6000000238418579"/></g></g></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/voiceprint3.svg b/polkit-agent/assets/biowaiting/voiceprint3.svg
+new file mode 100644
+index 0000000..509ceae
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/voiceprint3.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="160" height="160" viewBox="0 0 160 160"><defs><clipPath id="master_svg0_137_7657"><rect x="0" y="0" width="160" height="160" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_137_7657)"><g><g><rect x="63" y="60" width="8" height="40" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="15" y="60" width="8" height="40" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="51" y="72" width="8" height="16" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="27" y="72" width="8" height="16" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="39" y="66" width="8" height="28" rx="4" fill="#3790FA" fill-opacity="1"/></g></g><g><g><g><path d="M39.1124,148.054703125C38.3444,148.057703125,37.5922,147.836703125,36.9481,147.418703125C13.901,132.702703125,-0.0330976,107.240403125,0.0000590405,79.902203125C0.0332156,52.564003125,14.029,27.135703125,37.1117,12.475633125C38.975,11.285731125,41.4504,11.831117025,42.6407,13.693793125C43.831,15.556463125,43.2855,18.031063125,41.4222,19.220963125C20.6552,32.425603124999995,8.06623,55.312603125,8.03676,79.916303125C8.00729,104.520003125,20.5414,127.436703125,41.2767,140.691703125C42.7693,141.651703125,43.4507,143.479703125,42.9503,145.182703125C42.4499,146.884703125,40.8874,148.054703125,39.1124,148.054703125C39.1124,148.054703125,39.1124,148.054703125,39.1124,148.054703125Z" fill="#FFFFFF" fill-opacity="0.6000000238418579"/></g></g><g><path d="M54.426225703125,155.8C62.681345703125004,158.59,71.33814570312501,160.009,80.052345703125,160C111.653345703125,159.969,140.27674570312502,141.35,153.106345703125,112.48C165.936345703125,83.6103,160.569345703125,49.8964,139.409045703125,26.4337C118.248745703125,2.97097,85.25804570312499,-5.84615,55.208285703125,3.93015C53.103925703125,4.61296,51.951713703125,6.87185,52.634750703125,8.97552C53.317795703125,11.0792,55.577425703125,12.231,57.681785703125,11.5482C74.305345703125,6.12797,91.821545703125,7.05037,107.241245703125,13.3413C104.384245703125,18.2636,102.508145703125,24.9989,100.931645703125,30.675C100.222345703125,33.2932,99.604045703125,35.4568,99.022045703125,36.9295C97.858045703125,40.1658,91.747045703125,41.8567,86.290745703125,43.3475C83.87184570312499,44.0203,81.507445703125,44.6748,79.43404570312501,45.4566C76.981445703125,46.4019,75.100245703125,48.4228,74.333145703125,50.9362C73.566045703125,53.4496,73.998445703125,56.1761,75.505545703125,58.3291C77.248545703125,61.0296,79.239545703125,63.5617,81.452845703125,65.8926C81.64074570312499,66.1836,81.724145703125,66.5298,81.689345703125,66.8744C81.69724570312499,67.3998,81.501745703125,67.9079,81.143745703125,68.2925C78.030645703125,70.5412,75.901445703125,73.9,75.196345703125,77.6742C74.915645703125,79.7922,75.580745703125,81.9265,77.015145703125,83.5104C77.480045703125,84.0259,78.005145703125,84.4837,78.579245703125,84.874C77.672745703125,85.892,76.941445703125,87.0532,76.414945703125,88.3103C74.619145703125,92.3514,75.88354570312501,97.0974,79.452245703125,99.7101C80.798145703125,100.765,80.961845703125,101.31,80.961845703125,101.31C80.461645703125,102.431,79.772645703125,103.458,78.924845703125,104.346L78.921645703125,104.35C76.847845703125,106.914,73.378945703125,111.203,75.905745703125,116.419C80.543545703125,125.928,95.439045703125,123.31,107.406445703125,121.201C110.573145703125,120.664,113.766745703125,120.3,116.973045703125,120.11C118.773645703125,122.492,112.789945703125,137.655,105.223945703125,145.237C104.505245703125,145.97,104.121245703125,146.909,104.071845703125,147.862C89.216745703125,153.122,72.674945703125,153.508,56.990645703125,148.218C54.896325703125,147.51,52.624489703125,148.634,51.916344703125,150.727C51.208198703125,152.821,52.331908703125,155.092,54.426225703125,155.8ZM118.214745703125,141.04C125.744545703125,136.334,132.481545703125,130.184,137.979745703125,122.731C156.564345703125,97.5395,156.73734570312502,63.2309,138.408945703125,37.8528C131.961945703125,28.926,123.745345703125,21.8237,114.506145703125,16.7893C112.015545703125,20.7283,110.012045703125,27.868,108.55224570312501,32.8205C107.751945703125,35.6931,107.042645703125,38.184,106.387945703125,39.8567C103.659845703125,46.802,95.47544570312499,49.0565,88.200445703125,51.0565C86.036145703125,51.6565,83.908245703125,52.2383,82.05304570312501,52.8746L81.834845703125,53.6928C83.269445703125,55.936,84.90064570312501,58.0473,86.709045703125,60.0018C88.579145703125,61.8519,89.571445703125,64.4113,89.437145703125,67.038C89.380645703125,69.8333,88.145345703125,72.4746,86.036145703125,74.3106C83.380745703125,76.5287,82.944245703125,77.9469,82.889745703125,78.5105C84.961245703125,79.2751,87.13984570312499,79.7107,89.34624570312499,79.8014C90.336245703125,79.7545,91.328445703125,79.7971,92.310845703125,79.9287C94.381045703125,80.2054,95.890145703125,82.0273,95.775845703125,84.1122C95.661645703125,86.197,93.962445703125,87.8433,91.874345703125,87.8922L89.309845703125,87.8922C86.925045703125,87.9384,84.74394570312501,89.2466,83.580845703125,91.3285C83.192945703125,92.0487,83.441545703125,92.9464,84.14464570312501,93.3648C86.572445703125,94.9684,88.220545703125,97.5122,88.691545703125,100.383C89.128045703125,104.183,86.87274570312499,107.055,84.926745703125,109.364C83.326245703125,111.31,82.616845703125,112.346,82.889745703125,112.874C84.872145703125,116.964,98.494545703125,114.583,105.80594570312499,113.292C109.114045703125,112.596,112.470145703125,112.152,115.845445703125,111.964C119.436245703125,111.744,122.778145703125,113.803,124.193545703125,117.11C126.866245703125,123.257,122.894845703125,133.21,118.214745703125,141.04Z" fill-rule="evenodd" fill="#FFFFFF" fill-opacity="0.6000000238418579"/></g></g></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/voiceprint4.svg b/polkit-agent/assets/biowaiting/voiceprint4.svg
+new file mode 100644
+index 0000000..5208d79
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/voiceprint4.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="160" height="160" viewBox="0 0 160 160"><defs><clipPath id="master_svg0_137_7695"><rect x="0" y="0" width="160" height="160" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_137_7695)"><g><g><rect x="63" y="64" width="8" height="32" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="15" y="64" width="8" height="32" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="51" y="68" width="8" height="24" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="27" y="68" width="8" height="24" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="39" y="72" width="8" height="16" rx="4" fill="#3790FA" fill-opacity="1"/></g></g><g><g><g><path d="M39.1124,148.054703125C38.3444,148.057703125,37.5922,147.836703125,36.9481,147.418703125C13.901,132.702703125,-0.0330976,107.240403125,0.0000590405,79.902203125C0.0332156,52.564003125,14.029,27.135703125,37.1117,12.475633125C38.975,11.285731125,41.4504,11.831117025,42.6407,13.693793125C43.831,15.556463125,43.2855,18.031063125,41.4222,19.220963125C20.6552,32.425603124999995,8.06623,55.312603125,8.03676,79.916303125C8.00729,104.520003125,20.5414,127.436703125,41.2767,140.691703125C42.7693,141.651703125,43.4507,143.479703125,42.9503,145.182703125C42.4499,146.884703125,40.8874,148.054703125,39.1124,148.054703125C39.1124,148.054703125,39.1124,148.054703125,39.1124,148.054703125Z" fill="#FFFFFF" fill-opacity="0.6000000238418579"/></g></g><g><path d="M54.426225703125,155.8C62.681345703125004,158.59,71.33814570312501,160.009,80.052345703125,160C111.653345703125,159.969,140.27674570312502,141.35,153.106345703125,112.48C165.936345703125,83.6103,160.569345703125,49.8964,139.409045703125,26.4337C118.248745703125,2.97097,85.25804570312499,-5.84615,55.208285703125,3.93015C53.103925703125,4.61296,51.951713703125,6.87185,52.634750703125,8.97552C53.317795703125,11.0792,55.577425703125,12.231,57.681785703125,11.5482C74.305345703125,6.12797,91.821545703125,7.05037,107.241245703125,13.3413C104.384245703125,18.2636,102.508145703125,24.9989,100.931645703125,30.675C100.222345703125,33.2932,99.604045703125,35.4568,99.022045703125,36.9295C97.858045703125,40.1658,91.747045703125,41.8567,86.290745703125,43.3475C83.87184570312499,44.0203,81.507445703125,44.6748,79.43404570312501,45.4566C76.981445703125,46.4019,75.100245703125,48.4228,74.333145703125,50.9362C73.566045703125,53.4496,73.998445703125,56.1761,75.505545703125,58.3291C77.248545703125,61.0296,79.239545703125,63.5617,81.452845703125,65.8926C81.64074570312499,66.1836,81.724145703125,66.5298,81.689345703125,66.8744C81.69724570312499,67.3998,81.501745703125,67.9079,81.143745703125,68.2925C78.030645703125,70.5412,75.901445703125,73.9,75.196345703125,77.6742C74.915645703125,79.7922,75.580745703125,81.9265,77.015145703125,83.5104C77.480045703125,84.0259,78.005145703125,84.4837,78.579245703125,84.874C77.672745703125,85.892,76.941445703125,87.0532,76.414945703125,88.3103C74.619145703125,92.3514,75.88354570312501,97.0974,79.452245703125,99.7101C80.798145703125,100.765,80.961845703125,101.31,80.961845703125,101.31C80.461645703125,102.431,79.772645703125,103.458,78.924845703125,104.346L78.921645703125,104.35C76.847845703125,106.914,73.378945703125,111.203,75.905745703125,116.419C80.543545703125,125.928,95.439045703125,123.31,107.406445703125,121.201C110.573145703125,120.664,113.766745703125,120.3,116.973045703125,120.11C118.773645703125,122.492,112.789945703125,137.655,105.223945703125,145.237C104.505245703125,145.97,104.121245703125,146.909,104.071845703125,147.862C89.216745703125,153.122,72.674945703125,153.508,56.990645703125,148.218C54.896325703125,147.51,52.624489703125,148.634,51.916344703125,150.727C51.208198703125,152.821,52.331908703125,155.092,54.426225703125,155.8ZM118.214745703125,141.04C125.744545703125,136.334,132.481545703125,130.184,137.979745703125,122.731C156.564345703125,97.5395,156.73734570312502,63.2309,138.408945703125,37.8528C131.961945703125,28.926,123.745345703125,21.8237,114.506145703125,16.7893C112.015545703125,20.7283,110.012045703125,27.868,108.55224570312501,32.8205C107.751945703125,35.6931,107.042645703125,38.184,106.387945703125,39.8567C103.659845703125,46.802,95.47544570312499,49.0565,88.200445703125,51.0565C86.036145703125,51.6565,83.908245703125,52.2383,82.05304570312501,52.8746L81.834845703125,53.6928C83.269445703125,55.936,84.90064570312501,58.0473,86.709045703125,60.0018C88.579145703125,61.8519,89.571445703125,64.4113,89.437145703125,67.038C89.380645703125,69.8333,88.145345703125,72.4746,86.036145703125,74.3106C83.380745703125,76.5287,82.944245703125,77.9469,82.889745703125,78.5105C84.961245703125,79.2751,87.13984570312499,79.7107,89.34624570312499,79.8014C90.336245703125,79.7545,91.328445703125,79.7971,92.310845703125,79.9287C94.381045703125,80.2054,95.890145703125,82.0273,95.775845703125,84.1122C95.661645703125,86.197,93.962445703125,87.8433,91.874345703125,87.8922L89.309845703125,87.8922C86.925045703125,87.9384,84.74394570312501,89.2466,83.580845703125,91.3285C83.192945703125,92.0487,83.441545703125,92.9464,84.14464570312501,93.3648C86.572445703125,94.9684,88.220545703125,97.5122,88.691545703125,100.383C89.128045703125,104.183,86.87274570312499,107.055,84.926745703125,109.364C83.326245703125,111.31,82.616845703125,112.346,82.889745703125,112.874C84.872145703125,116.964,98.494545703125,114.583,105.80594570312499,113.292C109.114045703125,112.596,112.470145703125,112.152,115.845445703125,111.964C119.436245703125,111.744,122.778145703125,113.803,124.193545703125,117.11C126.866245703125,123.257,122.894845703125,133.21,118.214745703125,141.04Z" fill-rule="evenodd" fill="#FFFFFF" fill-opacity="0.6000000238418579"/></g></g></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/voiceprint5.svg b/polkit-agent/assets/biowaiting/voiceprint5.svg
+new file mode 100644
+index 0000000..19be4b0
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/voiceprint5.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="160" height="160" viewBox="0 0 160 160"><defs><clipPath id="master_svg0_137_7676"><rect x="0" y="0" width="160" height="160" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_137_7676)"><g><g><rect x="63" y="60" width="8" height="40" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="15" y="60" width="8" height="40" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="51" y="72" width="8" height="16" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="27" y="72" width="8" height="16" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="39" y="66" width="8" height="28" rx="4" fill="#3790FA" fill-opacity="1"/></g></g><g><g><g><path d="M39.1124,148.054703125C38.3444,148.057703125,37.5922,147.836703125,36.9481,147.418703125C13.901,132.702703125,-0.0330976,107.240403125,0.0000590405,79.902203125C0.0332156,52.564003125,14.029,27.135703125,37.1117,12.475633125C38.975,11.285731125,41.4504,11.831117025,42.6407,13.693793125C43.831,15.556463125,43.2855,18.031063125,41.4222,19.220963125C20.6552,32.425603124999995,8.06623,55.312603125,8.03676,79.916303125C8.00729,104.520003125,20.5414,127.436703125,41.2767,140.691703125C42.7693,141.651703125,43.4507,143.479703125,42.9503,145.182703125C42.4499,146.884703125,40.8874,148.054703125,39.1124,148.054703125C39.1124,148.054703125,39.1124,148.054703125,39.1124,148.054703125Z" fill="#FFFFFF" fill-opacity="0.6000000238418579"/></g></g><g><path d="M54.426225703125,155.8C62.681345703125004,158.59,71.33814570312501,160.009,80.052345703125,160C111.653345703125,159.969,140.27674570312502,141.35,153.106345703125,112.48C165.936345703125,83.6103,160.569345703125,49.8964,139.409045703125,26.4337C118.248745703125,2.97097,85.25804570312499,-5.84615,55.208285703125,3.93015C53.103925703125,4.61296,51.951713703125,6.87185,52.634750703125,8.97552C53.317795703125,11.0792,55.577425703125,12.231,57.681785703125,11.5482C74.305345703125,6.12797,91.821545703125,7.05037,107.241245703125,13.3413C104.384245703125,18.2636,102.508145703125,24.9989,100.931645703125,30.675C100.222345703125,33.2932,99.604045703125,35.4568,99.022045703125,36.9295C97.858045703125,40.1658,91.747045703125,41.8567,86.290745703125,43.3475C83.87184570312499,44.0203,81.507445703125,44.6748,79.43404570312501,45.4566C76.981445703125,46.4019,75.100245703125,48.4228,74.333145703125,50.9362C73.566045703125,53.4496,73.998445703125,56.1761,75.505545703125,58.3291C77.248545703125,61.0296,79.239545703125,63.5617,81.452845703125,65.8926C81.64074570312499,66.1836,81.724145703125,66.5298,81.689345703125,66.8744C81.69724570312499,67.3998,81.501745703125,67.9079,81.143745703125,68.2925C78.030645703125,70.5412,75.901445703125,73.9,75.196345703125,77.6742C74.915645703125,79.7922,75.580745703125,81.9265,77.015145703125,83.5104C77.480045703125,84.0259,78.005145703125,84.4837,78.579245703125,84.874C77.672745703125,85.892,76.941445703125,87.0532,76.414945703125,88.3103C74.619145703125,92.3514,75.88354570312501,97.0974,79.452245703125,99.7101C80.798145703125,100.765,80.961845703125,101.31,80.961845703125,101.31C80.461645703125,102.431,79.772645703125,103.458,78.924845703125,104.346L78.921645703125,104.35C76.847845703125,106.914,73.378945703125,111.203,75.905745703125,116.419C80.543545703125,125.928,95.439045703125,123.31,107.406445703125,121.201C110.573145703125,120.664,113.766745703125,120.3,116.973045703125,120.11C118.773645703125,122.492,112.789945703125,137.655,105.223945703125,145.237C104.505245703125,145.97,104.121245703125,146.909,104.071845703125,147.862C89.216745703125,153.122,72.674945703125,153.508,56.990645703125,148.218C54.896325703125,147.51,52.624489703125,148.634,51.916344703125,150.727C51.208198703125,152.821,52.331908703125,155.092,54.426225703125,155.8ZM118.214745703125,141.04C125.744545703125,136.334,132.481545703125,130.184,137.979745703125,122.731C156.564345703125,97.5395,156.73734570312502,63.2309,138.408945703125,37.8528C131.961945703125,28.926,123.745345703125,21.8237,114.506145703125,16.7893C112.015545703125,20.7283,110.012045703125,27.868,108.55224570312501,32.8205C107.751945703125,35.6931,107.042645703125,38.184,106.387945703125,39.8567C103.659845703125,46.802,95.47544570312499,49.0565,88.200445703125,51.0565C86.036145703125,51.6565,83.908245703125,52.2383,82.05304570312501,52.8746L81.834845703125,53.6928C83.269445703125,55.936,84.90064570312501,58.0473,86.709045703125,60.0018C88.579145703125,61.8519,89.571445703125,64.4113,89.437145703125,67.038C89.380645703125,69.8333,88.145345703125,72.4746,86.036145703125,74.3106C83.380745703125,76.5287,82.944245703125,77.9469,82.889745703125,78.5105C84.961245703125,79.2751,87.13984570312499,79.7107,89.34624570312499,79.8014C90.336245703125,79.7545,91.328445703125,79.7971,92.310845703125,79.9287C94.381045703125,80.2054,95.890145703125,82.0273,95.775845703125,84.1122C95.661645703125,86.197,93.962445703125,87.8433,91.874345703125,87.8922L89.309845703125,87.8922C86.925045703125,87.9384,84.74394570312501,89.2466,83.580845703125,91.3285C83.192945703125,92.0487,83.441545703125,92.9464,84.14464570312501,93.3648C86.572445703125,94.9684,88.220545703125,97.5122,88.691545703125,100.383C89.128045703125,104.183,86.87274570312499,107.055,84.926745703125,109.364C83.326245703125,111.31,82.616845703125,112.346,82.889745703125,112.874C84.872145703125,116.964,98.494545703125,114.583,105.80594570312499,113.292C109.114045703125,112.596,112.470145703125,112.152,115.845445703125,111.964C119.436245703125,111.744,122.778145703125,113.803,124.193545703125,117.11C126.866245703125,123.257,122.894845703125,133.21,118.214745703125,141.04Z" fill-rule="evenodd" fill="#FFFFFF" fill-opacity="0.6000000238418579"/></g></g></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/voiceprint6.svg b/polkit-agent/assets/biowaiting/voiceprint6.svg
+new file mode 100644
+index 0000000..9304c58
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/voiceprint6.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="160" height="160" viewBox="0 0 160 160"><defs><clipPath id="master_svg0_137_7638"><rect x="0" y="0" width="160" height="160" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_137_7638)"><g><g><rect x="63" y="65" width="8" height="30" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="15" y="65" width="8" height="30" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="51" y="68" width="8" height="24" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="27" y="68" width="8" height="24" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="39" y="62" width="8" height="36" rx="4" fill="#3790FA" fill-opacity="1"/></g></g><g><g><g><path d="M39.1124,148.054703125C38.3444,148.057703125,37.5922,147.836703125,36.9481,147.418703125C13.901,132.702703125,-0.0330976,107.240403125,0.0000590405,79.902203125C0.0332156,52.564003125,14.029,27.135703125,37.1117,12.475633125C38.975,11.285731125,41.4504,11.831117025,42.6407,13.693793125C43.831,15.556463125,43.2855,18.031063125,41.4222,19.220963125C20.6552,32.425603124999995,8.06623,55.312603125,8.03676,79.916303125C8.00729,104.520003125,20.5414,127.436703125,41.2767,140.691703125C42.7693,141.651703125,43.4507,143.479703125,42.9503,145.182703125C42.4499,146.884703125,40.8874,148.054703125,39.1124,148.054703125C39.1124,148.054703125,39.1124,148.054703125,39.1124,148.054703125Z" fill="#FFFFFF" fill-opacity="0.6000000238418579"/></g></g><g><path d="M54.426225703125,155.8C62.681345703125004,158.59,71.33814570312501,160.009,80.052345703125,160C111.653345703125,159.969,140.27674570312502,141.35,153.106345703125,112.48C165.936345703125,83.6103,160.569345703125,49.8964,139.409045703125,26.4337C118.248745703125,2.97097,85.25804570312499,-5.84615,55.208285703125,3.93015C53.103925703125,4.61296,51.951713703125,6.87185,52.634750703125,8.97552C53.317795703125,11.0792,55.577425703125,12.231,57.681785703125,11.5482C74.305345703125,6.12797,91.821545703125,7.05037,107.241245703125,13.3413C104.384245703125,18.2636,102.508145703125,24.9989,100.931645703125,30.675C100.222345703125,33.2932,99.604045703125,35.4568,99.022045703125,36.9295C97.858045703125,40.1658,91.747045703125,41.8567,86.290745703125,43.3475C83.87184570312499,44.0203,81.507445703125,44.6748,79.43404570312501,45.4566C76.981445703125,46.4019,75.100245703125,48.4228,74.333145703125,50.9362C73.566045703125,53.4496,73.998445703125,56.1761,75.505545703125,58.3291C77.248545703125,61.0296,79.239545703125,63.5617,81.452845703125,65.8926C81.64074570312499,66.1836,81.724145703125,66.5298,81.689345703125,66.8744C81.69724570312499,67.3998,81.501745703125,67.9079,81.143745703125,68.2925C78.030645703125,70.5412,75.901445703125,73.9,75.196345703125,77.6742C74.915645703125,79.7922,75.580745703125,81.9265,77.015145703125,83.5104C77.480045703125,84.0259,78.005145703125,84.4837,78.579245703125,84.874C77.672745703125,85.892,76.941445703125,87.0532,76.414945703125,88.3103C74.619145703125,92.3514,75.88354570312501,97.0974,79.452245703125,99.7101C80.798145703125,100.765,80.961845703125,101.31,80.961845703125,101.31C80.461645703125,102.431,79.772645703125,103.458,78.924845703125,104.346L78.921645703125,104.35C76.847845703125,106.914,73.378945703125,111.203,75.905745703125,116.419C80.543545703125,125.928,95.439045703125,123.31,107.406445703125,121.201C110.573145703125,120.664,113.766745703125,120.3,116.973045703125,120.11C118.773645703125,122.492,112.789945703125,137.655,105.223945703125,145.237C104.505245703125,145.97,104.121245703125,146.909,104.071845703125,147.862C89.216745703125,153.122,72.674945703125,153.508,56.990645703125,148.218C54.896325703125,147.51,52.624489703125,148.634,51.916344703125,150.727C51.208198703125,152.821,52.331908703125,155.092,54.426225703125,155.8ZM118.214745703125,141.04C125.744545703125,136.334,132.481545703125,130.184,137.979745703125,122.731C156.564345703125,97.5395,156.73734570312502,63.2309,138.408945703125,37.8528C131.961945703125,28.926,123.745345703125,21.8237,114.506145703125,16.7893C112.015545703125,20.7283,110.012045703125,27.868,108.55224570312501,32.8205C107.751945703125,35.6931,107.042645703125,38.184,106.387945703125,39.8567C103.659845703125,46.802,95.47544570312499,49.0565,88.200445703125,51.0565C86.036145703125,51.6565,83.908245703125,52.2383,82.05304570312501,52.8746L81.834845703125,53.6928C83.269445703125,55.936,84.90064570312501,58.0473,86.709045703125,60.0018C88.579145703125,61.8519,89.571445703125,64.4113,89.437145703125,67.038C89.380645703125,69.8333,88.145345703125,72.4746,86.036145703125,74.3106C83.380745703125,76.5287,82.944245703125,77.9469,82.889745703125,78.5105C84.961245703125,79.2751,87.13984570312499,79.7107,89.34624570312499,79.8014C90.336245703125,79.7545,91.328445703125,79.7971,92.310845703125,79.9287C94.381045703125,80.2054,95.890145703125,82.0273,95.775845703125,84.1122C95.661645703125,86.197,93.962445703125,87.8433,91.874345703125,87.8922L89.309845703125,87.8922C86.925045703125,87.9384,84.74394570312501,89.2466,83.580845703125,91.3285C83.192945703125,92.0487,83.441545703125,92.9464,84.14464570312501,93.3648C86.572445703125,94.9684,88.220545703125,97.5122,88.691545703125,100.383C89.128045703125,104.183,86.87274570312499,107.055,84.926745703125,109.364C83.326245703125,111.31,82.616845703125,112.346,82.889745703125,112.874C84.872145703125,116.964,98.494545703125,114.583,105.80594570312499,113.292C109.114045703125,112.596,112.470145703125,112.152,115.845445703125,111.964C119.436245703125,111.744,122.778145703125,113.803,124.193545703125,117.11C126.866245703125,123.257,122.894845703125,133.21,118.214745703125,141.04Z" fill-rule="evenodd" fill="#FFFFFF" fill-opacity="0.6000000238418579"/></g></g></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/assets/biowaiting/voiceprint7.svg b/polkit-agent/assets/biowaiting/voiceprint7.svg
+new file mode 100644
+index 0000000..dc96601
+--- /dev/null
++++ b/polkit-agent/assets/biowaiting/voiceprint7.svg
+@@ -0,0 +1 @@
++<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="160" height="160" viewBox="0 0 160 160"><defs><clipPath id="master_svg0_137_7600"><rect x="0" y="0" width="160" height="160" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_137_7600)"><g><g><rect x="63" y="68" width="8" height="24" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="15" y="68" width="8" height="24" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="51" y="65" width="8" height="30" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="27" y="65" width="8" height="30" rx="4" fill="#3790FA" fill-opacity="1"/></g><g><rect x="39" y="56" width="8" height="48" rx="4" fill="#3790FA" fill-opacity="1"/></g></g><g><g><g><path d="M39.1124,148.054703125C38.3444,148.057703125,37.5922,147.836703125,36.9481,147.418703125C13.901,132.702703125,-0.0330976,107.240403125,0.0000590405,79.902203125C0.0332156,52.564003125,14.029,27.135703125,37.1117,12.475633125C38.975,11.285731125,41.4504,11.831117025,42.6407,13.693793125C43.831,15.556463125,43.2855,18.031063125,41.4222,19.220963125C20.6552,32.425603124999995,8.06623,55.312603125,8.03676,79.916303125C8.00729,104.520003125,20.5414,127.436703125,41.2767,140.691703125C42.7693,141.651703125,43.4507,143.479703125,42.9503,145.182703125C42.4499,146.884703125,40.8874,148.054703125,39.1124,148.054703125C39.1124,148.054703125,39.1124,148.054703125,39.1124,148.054703125Z" fill="#FFFFFF" fill-opacity="0.6000000238418579"/></g></g><g><path d="M54.426225703125,155.8C62.681345703125004,158.59,71.33814570312501,160.009,80.052345703125,160C111.653345703125,159.969,140.27674570312502,141.35,153.106345703125,112.48C165.936345703125,83.6103,160.569345703125,49.8964,139.409045703125,26.4337C118.248745703125,2.97097,85.25804570312499,-5.84615,55.208285703125,3.93015C53.103925703125,4.61296,51.951713703125,6.87185,52.634750703125,8.97552C53.317795703125,11.0792,55.577425703125,12.231,57.681785703125,11.5482C74.305345703125,6.12797,91.821545703125,7.05037,107.241245703125,13.3413C104.384245703125,18.2636,102.508145703125,24.9989,100.931645703125,30.675C100.222345703125,33.2932,99.604045703125,35.4568,99.022045703125,36.9295C97.858045703125,40.1658,91.747045703125,41.8567,86.290745703125,43.3475C83.87184570312499,44.0203,81.507445703125,44.6748,79.43404570312501,45.4566C76.981445703125,46.4019,75.100245703125,48.4228,74.333145703125,50.9362C73.566045703125,53.4496,73.998445703125,56.1761,75.505545703125,58.3291C77.248545703125,61.0296,79.239545703125,63.5617,81.452845703125,65.8926C81.64074570312499,66.1836,81.724145703125,66.5298,81.689345703125,66.8744C81.69724570312499,67.3998,81.501745703125,67.9079,81.143745703125,68.2925C78.030645703125,70.5412,75.901445703125,73.9,75.196345703125,77.6742C74.915645703125,79.7922,75.580745703125,81.9265,77.015145703125,83.5104C77.480045703125,84.0259,78.005145703125,84.4837,78.579245703125,84.874C77.672745703125,85.892,76.941445703125,87.0532,76.414945703125,88.3103C74.619145703125,92.3514,75.88354570312501,97.0974,79.452245703125,99.7101C80.798145703125,100.765,80.961845703125,101.31,80.961845703125,101.31C80.461645703125,102.431,79.772645703125,103.458,78.924845703125,104.346L78.921645703125,104.35C76.847845703125,106.914,73.378945703125,111.203,75.905745703125,116.419C80.543545703125,125.928,95.439045703125,123.31,107.406445703125,121.201C110.573145703125,120.664,113.766745703125,120.3,116.973045703125,120.11C118.773645703125,122.492,112.789945703125,137.655,105.223945703125,145.237C104.505245703125,145.97,104.121245703125,146.909,104.071845703125,147.862C89.216745703125,153.122,72.674945703125,153.508,56.990645703125,148.218C54.896325703125,147.51,52.624489703125,148.634,51.916344703125,150.727C51.208198703125,152.821,52.331908703125,155.092,54.426225703125,155.8ZM118.214745703125,141.04C125.744545703125,136.334,132.481545703125,130.184,137.979745703125,122.731C156.564345703125,97.5395,156.73734570312502,63.2309,138.408945703125,37.8528C131.961945703125,28.926,123.745345703125,21.8237,114.506145703125,16.7893C112.015545703125,20.7283,110.012045703125,27.868,108.55224570312501,32.8205C107.751945703125,35.6931,107.042645703125,38.184,106.387945703125,39.8567C103.659845703125,46.802,95.47544570312499,49.0565,88.200445703125,51.0565C86.036145703125,51.6565,83.908245703125,52.2383,82.05304570312501,52.8746L81.834845703125,53.6928C83.269445703125,55.936,84.90064570312501,58.0473,86.709045703125,60.0018C88.579145703125,61.8519,89.571445703125,64.4113,89.437145703125,67.038C89.380645703125,69.8333,88.145345703125,72.4746,86.036145703125,74.3106C83.380745703125,76.5287,82.944245703125,77.9469,82.889745703125,78.5105C84.961245703125,79.2751,87.13984570312499,79.7107,89.34624570312499,79.8014C90.336245703125,79.7545,91.328445703125,79.7971,92.310845703125,79.9287C94.381045703125,80.2054,95.890145703125,82.0273,95.775845703125,84.1122C95.661645703125,86.197,93.962445703125,87.8433,91.874345703125,87.8922L89.309845703125,87.8922C86.925045703125,87.9384,84.74394570312501,89.2466,83.580845703125,91.3285C83.192945703125,92.0487,83.441545703125,92.9464,84.14464570312501,93.3648C86.572445703125,94.9684,88.220545703125,97.5122,88.691545703125,100.383C89.128045703125,104.183,86.87274570312499,107.055,84.926745703125,109.364C83.326245703125,111.31,82.616845703125,112.346,82.889745703125,112.874C84.872145703125,116.964,98.494545703125,114.583,105.80594570312499,113.292C109.114045703125,112.596,112.470145703125,112.152,115.845445703125,111.964C119.436245703125,111.744,122.778145703125,113.803,124.193545703125,117.11C126.866245703125,123.257,122.894845703125,133.21,118.214745703125,141.04Z" fill-rule="evenodd" fill="#FFFFFF" fill-opacity="0.6000000238418579"/></g></g></g></svg>
+\ No newline at end of file
+diff --git a/polkit-agent/i18n_ts/bo.ts b/polkit-agent/i18n_ts/bo.ts
+index 50e8ba8..bc85390 100644
+--- a/polkit-agent/i18n_ts/bo.ts
++++ b/polkit-agent/i18n_ts/bo.ts
+@@ -1,6 +1,15 @@
+ <?xml version="1.0" encoding="utf-8"?>
+ <!DOCTYPE TS>
+ <TS version="2.1">
++<context>
++    <name>FullScreenBackground</name>
++    <message>
++        <location filename="../src/fullscreenbackground.cpp" line="75"/>
++        <location filename="../src/fullscreenbackground.cpp" line="104"/>
++        <source>Authentication</source>
++        <translation type="unfinished"></translation>
++    </message>
++</context>
+ <context>
+     <name>MainWindow</name>
+     <message>
+@@ -9,205 +18,210 @@
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="409"/>
+-        <location filename="../src/mainwindow.cpp" line="1075"/>
+-        <location filename="../src/mainwindow.cpp" line="1143"/>
++        <location filename="../src/mainwindow.ui" line="398"/>
++        <location filename="../src/mainwindow.cpp" line="874"/>
++        <location filename="../src/mainwindow.cpp" line="943"/>
+         <source>Biometric</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="480"/>
++        <location filename="../src/mainwindow.ui" line="493"/>
+         <source>use password</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="441"/>
+-        <location filename="../src/mainwindow.cpp" line="1077"/>
++        <location filename="../src/mainwindow.ui" line="436"/>
++        <location filename="../src/mainwindow.cpp" line="875"/>
+         <source>Cancel</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="460"/>
+-        <location filename="../src/mainwindow.cpp" line="1073"/>
++        <location filename="../src/mainwindow.ui" line="461"/>
++        <location filename="../src/mainwindow.cpp" line="873"/>
+         <source>Authenticate</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="66"/>
+-        <source>Authentication</source>
++        <location filename="../src/mainwindow.cpp" line="85"/>
++        <source>Insert the ukey into the USB port</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="105"/>
+-        <source>Insert the ukey into the USB port</source>
++        <location filename="../src/mainwindow.cpp" line="87"/>
++        <source>Enter the ukey password</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="107"/>
+-        <source>Enter the ukey password</source>
++        <location filename="../src/mainwindow.cpp" line="93"/>
++        <source>Close</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="226"/>
+-        <location filename="../src/mainwindow.cpp" line="1415"/>
+-        <location filename="../src/mainwindow.cpp" line="1417"/>
++        <location filename="../src/mainwindow.cpp" line="1243"/>
++        <location filename="../src/mainwindow.cpp" line="1246"/>
++        <location filename="../src/mainwindow.cpp" line="1539"/>
+         <source>Failed to verify %1, please enter password to unlock</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="231"/>
+-        <location filename="../src/mainwindow.cpp" line="233"/>
+-        <location filename="../src/mainwindow.cpp" line="1419"/>
++        <location filename="../src/mainwindow.cpp" line="1249"/>
++        <location filename="../src/mainwindow.cpp" line="1545"/>
++        <location filename="../src/mainwindow.cpp" line="1548"/>
+         <source>Unable to verify %1, please enter password to unlock</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="242"/>
+-        <location filename="../src/mainwindow.cpp" line="246"/>
+-        <source>Failed to verify %1, you still have %2 verification opportunities</source>
++        <location filename="../src/mainwindow.cpp" line="1261"/>
++        <source>Facial recognition to authorization</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="335"/>
+-        <source>Please enter your password or enroll your fingerprint </source>
++        <location filename="../src/mainwindow.cpp" line="1264"/>
++        <source>Fingerprint recognition to authorization</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="665"/>
+-        <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
++        <location filename="../src/mainwindow.cpp" line="1267"/>
++        <source>Voiceprint recognition to authorization</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="671"/>
+-        <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
++        <location filename="../src/mainwindow.cpp" line="1270"/>
++        <source>Finger veins recognition to authorization</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="731"/>
+-        <source>Password: </source>
++        <location filename="../src/mainwindow.cpp" line="1273"/>
++        <source>Iris recognition to authorization</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="733"/>
+-        <source>_Password: </source>
++        <location filename="../src/mainwindow.cpp" line="1276"/>
++        <source>Use the bound wechat scanning code to authorization</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="735"/>
+-        <source>_Password:</source>
++        <location filename="../src/mainwindow.cpp" line="1558"/>
++        <location filename="../src/mainwindow.cpp" line="1562"/>
++        <source>Failed to verify %1, you still have %2 verification opportunities</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="779"/>
+-        <location filename="../src/mainwindow.cpp" line="783"/>
+-        <location filename="../src/mainwindow.cpp" line="787"/>
+-        <location filename="../src/mainwindow.cpp" line="791"/>
+-        <source>Account locked,</source>
++        <location filename="../src/mainwindow.cpp" line="1579"/>
++        <source>Acquisition failure</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="779"/>
+-        <source>days left</source>
++        <location filename="../src/mainwindow.cpp" line="165"/>
++        <source>Please enter your password or enroll your fingerprint </source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="783"/>
+-        <source>hours left</source>
++        <location filename="../src/mainwindow.cpp" line="517"/>
++        <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="787"/>
+-        <source>minutes left</source>
++        <location filename="../src/mainwindow.cpp" line="522"/>
++        <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="791"/>
+-        <source>seconds left</source>
++        <location filename="../src/mainwindow.cpp" line="582"/>
++        <source>Password: </source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="834"/>
+-        <location filename="../src/mainwindow.cpp" line="835"/>
+-        <source>Password cannot be empty</source>
++        <location filename="../src/mainwindow.cpp" line="584"/>
++        <source>_Password: </source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="880"/>
+-        <location filename="../src/mainwindow.cpp" line="888"/>
+-        <source>Input your password to authentication</source>
++        <location filename="../src/mainwindow.cpp" line="586"/>
++        <source>_Password:</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1079"/>
+-        <location filename="../src/mainwindow.cpp" line="1183"/>
+-        <source>Use password</source>
++        <location filename="../src/mainwindow.cpp" line="635"/>
++        <location filename="../src/mainwindow.cpp" line="638"/>
++        <location filename="../src/mainwindow.cpp" line="641"/>
++        <location filename="../src/mainwindow.cpp" line="644"/>
++        <source>Account locked,</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1219"/>
+-        <location filename="../src/mainwindow.cpp" line="1292"/>
+-        <location filename="../src/mainwindow.cpp" line="1293"/>
+-        <source>Please try again in %1 minutes.</source>
++        <location filename="../src/mainwindow.cpp" line="635"/>
++        <source>days left</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1230"/>
+-        <location filename="../src/mainwindow.cpp" line="1302"/>
+-        <location filename="../src/mainwindow.cpp" line="1303"/>
+-        <source>Please try again in %1 seconds.</source>
++        <location filename="../src/mainwindow.cpp" line="638"/>
++        <source>hours left</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1240"/>
+-        <location filename="../src/mainwindow.cpp" line="1241"/>
+-        <location filename="../src/mainwindow.cpp" line="1311"/>
+-        <location filename="../src/mainwindow.cpp" line="1312"/>
+-        <source>Account locked permanently.</source>
++        <location filename="../src/mainwindow.cpp" line="641"/>
++        <source>minutes left</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="644"/>
++        <source>seconds left</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1434"/>
+-        <source>Verify face recognition or enter password to unlock</source>
++        <location filename="../src/mainwindow.cpp" line="688"/>
++        <location filename="../src/mainwindow.cpp" line="689"/>
++        <source>Password cannot be empty</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1439"/>
+-        <source>Press fingerprint or enter password to unlock</source>
++        <location filename="../src/mainwindow.cpp" line="734"/>
++        <location filename="../src/mainwindow.cpp" line="742"/>
++        <location filename="../src/mainwindow.cpp" line="1258"/>
++        <source>Input your password to authentication</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1444"/>
+-        <source>Verify voiceprint or enter password to unlock</source>
++        <location filename="../src/mainwindow.cpp" line="876"/>
++        <source>Use password</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1449"/>
+-        <source>Verify finger vein or enter password to unlock</source>
++        <location filename="../src/mainwindow.cpp" line="1003"/>
++        <location filename="../src/mainwindow.cpp" line="1081"/>
++        <location filename="../src/mainwindow.cpp" line="1082"/>
++        <source>Please try again in %1 minutes.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1454"/>
+-        <source>Verify iris or enter password to unlock</source>
++        <location filename="../src/mainwindow.cpp" line="1015"/>
++        <location filename="../src/mainwindow.cpp" line="1093"/>
++        <location filename="../src/mainwindow.cpp" line="1094"/>
++        <source>Please try again in %1 seconds.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1459"/>
+-        <source>Use the bound wechat scanning code or enter the password to unlock</source>
++        <location filename="../src/mainwindow.cpp" line="1026"/>
++        <location filename="../src/mainwindow.cpp" line="1027"/>
++        <location filename="../src/mainwindow.cpp" line="1104"/>
++        <location filename="../src/mainwindow.cpp" line="1105"/>
++        <source>Account locked permanently.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="108"/>
+-        <location filename="../src/mainwindow.cpp" line="729"/>
++        <location filename="../src/mainwindow.cpp" line="88"/>
++        <location filename="../src/mainwindow.cpp" line="580"/>
+         <source>Input Password</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="259"/>
++        <location filename="../src/mainwindow.cpp" line="1575"/>
+         <source>Abnormal network</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="850"/>
++        <location filename="../src/mainwindow.cpp" line="704"/>
+         <source>Authentication failed, please try again.</source>
+         <translation type="unfinished"></translation>
+     </message>
+@@ -215,17 +229,17 @@
+ <context>
+     <name>PolkitListener</name>
+     <message>
+-        <location filename="../src/PolkitListener.cpp" line="88"/>
++        <location filename="../src/PolkitListener.cpp" line="86"/>
+         <source>Another client is already authenticating, please try again later.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/PolkitListener.cpp" line="265"/>
++        <location filename="../src/PolkitListener.cpp" line="253"/>
+         <source>Authentication failure, please try again.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/PolkitListener.cpp" line="272"/>
++        <location filename="../src/PolkitListener.cpp" line="259"/>
+         <source>Password input error!</source>
+         <translation type="unfinished"></translation>
+     </message>
+diff --git a/polkit-agent/i18n_ts/bo_CN.ts b/polkit-agent/i18n_ts/bo_CN.ts
+index e0a54e7..deb149d 100644
+--- a/polkit-agent/i18n_ts/bo_CN.ts
++++ b/polkit-agent/i18n_ts/bo_CN.ts
+@@ -51,6 +51,15 @@
+         <translation type="vanished">二维码</translation>
+     </message>
+ </context>
++<context>
++    <name>FullScreenBackground</name>
++    <message>
++        <location filename="../src/fullscreenbackground.cpp" line="75"/>
++        <location filename="../src/fullscreenbackground.cpp" line="104"/>
++        <source>Authentication</source>
++        <translation type="unfinished">དབང་བསྐུར།</translation>
++    </message>
++</context>
+ <context>
+     <name>LoginOptionsWidget</name>
+     <message>
+@@ -65,9 +74,8 @@
+ <context>
+     <name>MainWindow</name>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="66"/>
+         <source>Authentication</source>
+-        <translation>དབང་བསྐུར།</translation>
++        <translation type="vanished">དབང་བསྐུར།</translation>
+     </message>
+     <message>
+         <source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
+@@ -91,14 +99,14 @@
+         <translation type="vanished">密码</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="409"/>
+-        <location filename="../src/mainwindow.cpp" line="1075"/>
+-        <location filename="../src/mainwindow.cpp" line="1143"/>
++        <location filename="../src/mainwindow.ui" line="398"/>
++        <location filename="../src/mainwindow.cpp" line="874"/>
++        <location filename="../src/mainwindow.cpp" line="943"/>
+         <source>Biometric</source>
+         <translation>སྐྱེ་དངོས་དབྱེ་འབྱེད་བཀོལ་བ།</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="480"/>
++        <location filename="../src/mainwindow.ui" line="493"/>
+         <source>use password</source>
+         <translation>གསང་གྲངས་བེད་སྤྱོད་བྱ་དགོས།</translation>
+     </message>
+@@ -147,20 +155,19 @@
+         <translation type="vanished">Polkit.caller-pid:</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="441"/>
+-        <location filename="../src/mainwindow.cpp" line="1077"/>
++        <location filename="../src/mainwindow.ui" line="436"/>
++        <location filename="../src/mainwindow.cpp" line="875"/>
+         <source>Cancel</source>
+         <translation>ཕྱིར་འཐེན།</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="460"/>
+-        <location filename="../src/mainwindow.cpp" line="1073"/>
++        <location filename="../src/mainwindow.ui" line="461"/>
++        <location filename="../src/mainwindow.cpp" line="873"/>
+         <source>Authenticate</source>
+         <translation>དབང་བསྐུར་བ།</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1079"/>
+-        <location filename="../src/mainwindow.cpp" line="1183"/>
++        <location filename="../src/mainwindow.cpp" line="876"/>
+         <source>Use password</source>
+         <translation>གསང་གྲངས་བེད་སྤྱོད་བྱ་དགོས།</translation>
+     </message>
+@@ -185,30 +192,30 @@
+         <translation type="vanished">认证中,请稍等...</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1219"/>
+-        <location filename="../src/mainwindow.cpp" line="1292"/>
+-        <location filename="../src/mainwindow.cpp" line="1293"/>
++        <location filename="../src/mainwindow.cpp" line="1003"/>
++        <location filename="../src/mainwindow.cpp" line="1081"/>
++        <location filename="../src/mainwindow.cpp" line="1082"/>
+         <source>Please try again in %1 minutes.</source>
+         <translation>%1ཡང་བསྐྱར་ཚོད་ལྟ་ཞིག་བྱེད་རོགས།</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1230"/>
+-        <location filename="../src/mainwindow.cpp" line="1302"/>
+-        <location filename="../src/mainwindow.cpp" line="1303"/>
++        <location filename="../src/mainwindow.cpp" line="1015"/>
++        <location filename="../src/mainwindow.cpp" line="1093"/>
++        <location filename="../src/mainwindow.cpp" line="1094"/>
+         <source>Please try again in %1 seconds.</source>
+         <translation>ཁྱོད་ཀྱིས་དུས་ཚོད་སྐར་ཆ་གཅིག་གི་ནང་དུ་ཡང་བསྐྱར་ཚོད་ལྟ་ཞིག་བྱེད་རོགས།</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1240"/>
+-        <location filename="../src/mainwindow.cpp" line="1241"/>
+-        <location filename="../src/mainwindow.cpp" line="1311"/>
+-        <location filename="../src/mainwindow.cpp" line="1312"/>
++        <location filename="../src/mainwindow.cpp" line="1026"/>
++        <location filename="../src/mainwindow.cpp" line="1027"/>
++        <location filename="../src/mainwindow.cpp" line="1104"/>
++        <location filename="../src/mainwindow.cpp" line="1105"/>
+         <source>Account locked permanently.</source>
+         <translation>དུས་གཏན་དུ་ཟྭ་བརྒྱབ་པའི་རྩིས་ཐོ།</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="834"/>
+-        <location filename="../src/mainwindow.cpp" line="835"/>
++        <location filename="../src/mainwindow.cpp" line="688"/>
++        <location filename="../src/mainwindow.cpp" line="689"/>
+         <source>Password cannot be empty</source>
+         <translation>གསང་གྲངས་སྟོང་པ་ཡིན་མི་སྲིད།</translation>
+     </message>
+@@ -221,8 +228,8 @@
+         <translation type="vanished">无法验证%1,请输入密码.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="242"/>
+-        <location filename="../src/mainwindow.cpp" line="246"/>
++        <location filename="../src/mainwindow.cpp" line="1558"/>
++        <location filename="../src/mainwindow.cpp" line="1562"/>
+         <source>Failed to verify %1, you still have %2 verification opportunities</source>
+         <translation>%1ལ་ཞིབ་བཤེར་བྱེད་མ་ཐུབ་ན། ཁྱེད་ཚོར་ད་དུང་%2ལ་ཞིབ་བཤེར་བྱེད་པའི་གོ་སྐབས་ཡོད།</translation>
+     </message>
+@@ -231,42 +238,42 @@
+         <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="731"/>
++        <location filename="../src/mainwindow.cpp" line="582"/>
+         <source>Password: </source>
+         <translation>གསང་གྲངས་ནི། </translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="335"/>
++        <location filename="../src/mainwindow.cpp" line="165"/>
+         <source>Please enter your password or enroll your fingerprint </source>
+         <translation>ཁྱེད་ཀྱི་གསང་གྲངས་ནང་འཇུག་བྱེད་པའམ་ཡང་ན་ཁྱེད་ཀྱི་མཛུབ་རིས་ནང་འཇུག་བྱེད་པ། </translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="259"/>
++        <location filename="../src/mainwindow.cpp" line="1575"/>
+         <source>Abnormal network</source>
+         <translation>རྒྱུན་ལྡན་མིན་པའི་དྲ་བ།</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="665"/>
++        <location filename="../src/mainwindow.cpp" line="517"/>
+         <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
+         <translation>ཐེངས་འདིའི་བཀོལ་སྤྱོད་ལ་དོ་དམ་པའི་དབང་ཆ་ཐོབ་ན་ད་གཟོད་མུ་མཐུད་དུ་ལག་བསྟར་བྱེད་ཐུབ།གསང་གྲངས་ནང་འཇུག་བྱས་ནས་ཐེངས་འདིའི་བཀོལ་སྤྱོད་བྱེད་ཆོག</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="733"/>
++        <location filename="../src/mainwindow.cpp" line="584"/>
+         <source>_Password: </source>
+         <translation>གསང་གྲངས། </translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="735"/>
++        <location filename="../src/mainwindow.cpp" line="586"/>
+         <source>_Password:</source>
+         <translation>གསང་གྲངས།:</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="850"/>
++        <location filename="../src/mainwindow.cpp" line="704"/>
+         <source>Authentication failed, please try again.</source>
+         <translation>བདེན་དཔང་ར་སྤྲོད་ལ་ཕམ་ཁ་བྱུང་བས་ཡང་བསྐྱར་ཚོད་ལྟ་བྱོས།</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="779"/>
++        <location filename="../src/mainwindow.cpp" line="635"/>
+         <source>days left</source>
+         <translation>གནམ་རྒྱབ་ཟྭ་འབྱེད།</translation>
+     </message>
+@@ -279,16 +286,16 @@
+         <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="226"/>
+-        <location filename="../src/mainwindow.cpp" line="1415"/>
+-        <location filename="../src/mainwindow.cpp" line="1417"/>
++        <location filename="../src/mainwindow.cpp" line="1243"/>
++        <location filename="../src/mainwindow.cpp" line="1246"/>
++        <location filename="../src/mainwindow.cpp" line="1539"/>
+         <source>Failed to verify %1, please enter password to unlock</source>
+         <translation>%1ལ་ཞིབ་བཤེར་བྱེད་མ་ཐུབ་ན། གསང་གྲངས་ནང་འཇུག་བྱས་ནས་ཟྭ་རྒྱག་རོགས།</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="231"/>
+-        <location filename="../src/mainwindow.cpp" line="233"/>
+-        <location filename="../src/mainwindow.cpp" line="1419"/>
++        <location filename="../src/mainwindow.cpp" line="1249"/>
++        <location filename="../src/mainwindow.cpp" line="1545"/>
++        <location filename="../src/mainwindow.cpp" line="1548"/>
+         <source>Unable to verify %1, please enter password to unlock</source>
+         <translation>%1ལ་ཞིབ་བཤེར་བྱེད་ཐབས་བྲལ་བ་དང་། གསང་གྲངས་ནང་འཇུག་བྱས་ནས་ཟྭ་རྒྱག་རོགས།</translation>
+     </message>
+@@ -297,86 +304,121 @@
+         <translation type="vanished">网络异常</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="671"/>
++        <location filename="../src/mainwindow.cpp" line="522"/>
+         <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
+         <translation>གོ་རིམ་ཞིག་གིས་ཁྱད་དབང་དགོས་པའི་འགུལ་སྟངས་ཤིག་ལག་བསྟར་བྱེད་པར་ཚོད་ལྟ་བྱེད་བཞིན་ཡོད་པ་དང་།་འགུལ་སྟངས་འདི་ལག་བསྟར་བྱེད་པའི་དབང་ཆ་སྤྲོད་དགོས་པའི་རེ་བ་བཏོན།</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="108"/>
+-        <location filename="../src/mainwindow.cpp" line="729"/>
++        <location filename="../src/mainwindow.cpp" line="88"/>
++        <location filename="../src/mainwindow.cpp" line="580"/>
+         <source>Input Password</source>
+         <translation>ནང་འཇུག་གི་གསང་གྲངས།</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="105"/>
++        <location filename="../src/mainwindow.cpp" line="85"/>
+         <source>Insert the ukey into the USB port</source>
+         <translation>བདེ་འཇགས་ཀྱི་གསང་བའི་ལྡེ་མིག་དེ་USBཡི་སྣེ་འདྲེན་དུ་འཇུག་རོགས།</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="107"/>
++        <location filename="../src/mainwindow.cpp" line="87"/>
+         <source>Enter the ukey password</source>
+         <translation>གསང་བའི་ཨང་གྲངས་ནང་འཇུག་བྱེད་པ།</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="783"/>
++        <location filename="../src/mainwindow.cpp" line="93"/>
++        <source>Close</source>
++        <translation>སྒོ་རྒྱག་པ་</translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1261"/>
++        <source>Facial recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1264"/>
++        <source>Fingerprint recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1267"/>
++        <source>Voiceprint recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1270"/>
++        <source>Finger veins recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1273"/>
++        <source>Iris recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1276"/>
++        <source>Use the bound wechat scanning code to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1579"/>
++        <source>Acquisition failure</source>
++        <translation>ཕམ་ཉེས་བྱུང་བ་རེད</translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="638"/>
+         <source>hours left</source>
+         <translation>དུས་ཚོད་འགའ་ལས་ལྷག་མེད</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="787"/>
++        <location filename="../src/mainwindow.cpp" line="641"/>
+         <source>minutes left</source>
+         <translation>སྐར་མ་རྗེས་ནས་ཟྭ་ཕྱེ།</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="791"/>
++        <location filename="../src/mainwindow.cpp" line="644"/>
+         <source>seconds left</source>
+         <translation>སྐར་ཆའི་རྗེས་ནས་ཟྭ་ཕྱེ་བ།</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="880"/>
+-        <location filename="../src/mainwindow.cpp" line="888"/>
++        <location filename="../src/mainwindow.cpp" line="734"/>
++        <location filename="../src/mainwindow.cpp" line="742"/>
++        <location filename="../src/mainwindow.cpp" line="1258"/>
+         <source>Input your password to authentication</source>
+         <translation>གསང་བའི་ཨང་གྲངས་ནང་འཇུག་བྱེད་དབང་ཡོད།</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1434"/>
+         <source>Verify face recognition or enter password to unlock</source>
+-        <translation>དཔང་མིའི་གདོང་ལ་ཞིབ་བཤེར་བྱེད་པའམ་ཡང་ན་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་པ།</translation>
++        <translation type="vanished">དཔང་མིའི་གདོང་ལ་ཞིབ་བཤེར་བྱེད་པའམ་ཡང་ན་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་པ།</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1439"/>
+         <source>Press fingerprint or enter password to unlock</source>
+-        <translation>མཛུབ་རིས་མནན་པའམ་ཡང་ན་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་པ།</translation>
++        <translation type="vanished">མཛུབ་རིས་མནན་པའམ་ཡང་ན་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་པ།</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1444"/>
+         <source>Verify voiceprint or enter password to unlock</source>
+-        <translation>སྒྲ་རིས་ར་སྤྲོད་བྱེད་པའམ་ཡང་ན་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་པ།</translation>
++        <translation type="vanished">སྒྲ་རིས་ར་སྤྲོད་བྱེད་པའམ་ཡང་ན་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་པ།</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1449"/>
+         <source>Verify finger vein or enter password to unlock</source>
+-        <translation>ཚོད་ལྟས་ར་སྤྲོད་བྱེད་པ་ནི་སྡོད་རྩ་དང་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་པ་དེ་ཡིན།</translation>
++        <translation type="vanished">ཚོད་ལྟས་ར་སྤྲོད་བྱེད་པ་ནི་སྡོད་རྩ་དང་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་པ་དེ་ཡིན།</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1454"/>
+         <source>Verify iris or enter password to unlock</source>
+-        <translation>འཇའ་སྐྱི་ར་སྤྲོད་བྱེད་པའམ་ཡང་ན་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་པ།</translation>
++        <translation type="vanished">འཇའ་སྐྱི་ར་སྤྲོད་བྱེད་པའམ་ཡང་ན་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་པ།</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1459"/>
+         <source>Use the bound wechat scanning code or enter the password to unlock</source>
+-        <translation>སྦྲེལ་ཡོད་པའི་སྐད་འཕྲིན་གྱི་ཨང་གྲངས་སམ་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་དགོས།</translation>
++        <translation type="vanished">སྦྲེལ་ཡོད་པའི་སྐད་འཕྲིན་གྱི་ཨང་གྲངས་སམ་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་དགོས།</translation>
+     </message>
+     <message>
+         <source>Use the bound wechat scanning code or enter the password to log in</source>
+         <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="779"/>
+-        <location filename="../src/mainwindow.cpp" line="783"/>
+-        <location filename="../src/mainwindow.cpp" line="787"/>
+-        <location filename="../src/mainwindow.cpp" line="791"/>
++        <location filename="../src/mainwindow.cpp" line="635"/>
++        <location filename="../src/mainwindow.cpp" line="638"/>
++        <location filename="../src/mainwindow.cpp" line="641"/>
++        <location filename="../src/mainwindow.cpp" line="644"/>
+         <source>Account locked,</source>
+         <translation>རྩིས་ཐོ་ཟྭ་བརྒྱབ་པ།</translation>
+     </message>
+@@ -388,17 +430,17 @@
+ <context>
+     <name>PolkitListener</name>
+     <message>
+-        <location filename="../src/PolkitListener.cpp" line="88"/>
++        <location filename="../src/PolkitListener.cpp" line="86"/>
+         <source>Another client is already authenticating, please try again later.</source>
+         <translation>མཁོ་མཁན་གཞན་པ་ཞིག་གིས་བདེན་དཔང་ར་སྤྲོད་བྱེད་བཞིན་ཡོད།ཅུང་ཙམ་འགོར་རྗེས་ཡང་བསྐྱར་ཚོད་ལྟ་བྱོས།</translation>
+     </message>
+     <message>
+-        <location filename="../src/PolkitListener.cpp" line="265"/>
++        <location filename="../src/PolkitListener.cpp" line="253"/>
+         <source>Authentication failure, please try again.</source>
+         <translation>བདེན་དཔང་ར་སྤྲོད་བྱེད་མ་ཐུབ་ན་ཁྱེད་ཀྱིས་ཡང་བསྐྱར་ཚོད་ལྟ་བྱེད།</translation>
+     </message>
+     <message>
+-        <location filename="../src/PolkitListener.cpp" line="272"/>
++        <location filename="../src/PolkitListener.cpp" line="259"/>
+         <source>Password input error!</source>
+         <translation>གསང་གྲངས་ནང་འཇུག་ནོར་འཁྲུལ་བྱུང་བ་རེད།</translation>
+     </message>
+diff --git a/polkit-agent/i18n_ts/de.ts b/polkit-agent/i18n_ts/de.ts
+index 8521a6d..e17acdc 100644
+--- a/polkit-agent/i18n_ts/de.ts
++++ b/polkit-agent/i18n_ts/de.ts
+@@ -51,6 +51,15 @@
+         <translation type="vanished">二维码</translation>
+     </message>
+ </context>
++<context>
++    <name>FullScreenBackground</name>
++    <message>
++        <location filename="../src/fullscreenbackground.cpp" line="75"/>
++        <location filename="../src/fullscreenbackground.cpp" line="104"/>
++        <source>Authentication</source>
++        <translation type="unfinished">Authentifizierung</translation>
++    </message>
++</context>
+ <context>
+     <name>LoginOptionsWidget</name>
+     <message>
+@@ -65,9 +74,8 @@
+ <context>
+     <name>MainWindow</name>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="66"/>
+         <source>Authentication</source>
+-        <translation>Authentifizierung</translation>
++        <translation type="vanished">Authentifizierung</translation>
+     </message>
+     <message>
+         <source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
+@@ -91,14 +99,14 @@
+         <translation type="vanished">密码</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="409"/>
+-        <location filename="../src/mainwindow.cpp" line="1075"/>
+-        <location filename="../src/mainwindow.cpp" line="1143"/>
++        <location filename="../src/mainwindow.ui" line="398"/>
++        <location filename="../src/mainwindow.cpp" line="874"/>
++        <location filename="../src/mainwindow.cpp" line="943"/>
+         <source>Biometric</source>
+         <translation>Biometrisch</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="480"/>
++        <location filename="../src/mainwindow.ui" line="493"/>
+         <source>use password</source>
+         <translation>Passwort verwenden</translation>
+     </message>
+@@ -147,20 +155,19 @@
+         <translation type="vanished">Polkit.caller-pid:</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="441"/>
+-        <location filename="../src/mainwindow.cpp" line="1077"/>
++        <location filename="../src/mainwindow.ui" line="436"/>
++        <location filename="../src/mainwindow.cpp" line="875"/>
+         <source>Cancel</source>
+         <translation>Abbrechen</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="460"/>
+-        <location filename="../src/mainwindow.cpp" line="1073"/>
++        <location filename="../src/mainwindow.ui" line="461"/>
++        <location filename="../src/mainwindow.cpp" line="873"/>
+         <source>Authenticate</source>
+         <translation>Beglaubigen</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1079"/>
+-        <location filename="../src/mainwindow.cpp" line="1183"/>
++        <location filename="../src/mainwindow.cpp" line="876"/>
+         <source>Use password</source>
+         <translation>Passwort verwenden</translation>
+     </message>
+@@ -185,30 +192,30 @@
+         <translation type="vanished">认证中,请稍等...</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1219"/>
+-        <location filename="../src/mainwindow.cpp" line="1292"/>
+-        <location filename="../src/mainwindow.cpp" line="1293"/>
++        <location filename="../src/mainwindow.cpp" line="1003"/>
++        <location filename="../src/mainwindow.cpp" line="1081"/>
++        <location filename="../src/mainwindow.cpp" line="1082"/>
+         <source>Please try again in %1 minutes.</source>
+         <translation>Versuchen Sie es in %1 Minuten erneut.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1230"/>
+-        <location filename="../src/mainwindow.cpp" line="1302"/>
+-        <location filename="../src/mainwindow.cpp" line="1303"/>
++        <location filename="../src/mainwindow.cpp" line="1015"/>
++        <location filename="../src/mainwindow.cpp" line="1093"/>
++        <location filename="../src/mainwindow.cpp" line="1094"/>
+         <source>Please try again in %1 seconds.</source>
+         <translation>Bitte versuchen Sie es in %1 Sekunden erneut.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1240"/>
+-        <location filename="../src/mainwindow.cpp" line="1241"/>
+-        <location filename="../src/mainwindow.cpp" line="1311"/>
+-        <location filename="../src/mainwindow.cpp" line="1312"/>
++        <location filename="../src/mainwindow.cpp" line="1026"/>
++        <location filename="../src/mainwindow.cpp" line="1027"/>
++        <location filename="../src/mainwindow.cpp" line="1104"/>
++        <location filename="../src/mainwindow.cpp" line="1105"/>
+         <source>Account locked permanently.</source>
+         <translation>Das Konto wurde dauerhaft gesperrt.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="834"/>
+-        <location filename="../src/mainwindow.cpp" line="835"/>
++        <location filename="../src/mainwindow.cpp" line="688"/>
++        <location filename="../src/mainwindow.cpp" line="689"/>
+         <source>Password cannot be empty</source>
+         <translation>Das Kennwort darf nicht leer sein.</translation>
+     </message>
+@@ -221,8 +228,8 @@
+         <translation type="vanished">无法验证%1,请输入密码.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="242"/>
+-        <location filename="../src/mainwindow.cpp" line="246"/>
++        <location filename="../src/mainwindow.cpp" line="1558"/>
++        <location filename="../src/mainwindow.cpp" line="1562"/>
+         <source>Failed to verify %1, you still have %2 verification opportunities</source>
+         <translation>%1 konnte nicht verifiziert werden, Sie haben immer noch %2 Überprüfungsmöglichkeiten</translation>
+     </message>
+@@ -231,42 +238,42 @@
+         <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="731"/>
++        <location filename="../src/mainwindow.cpp" line="582"/>
+         <source>Password: </source>
+         <translation>Passwort: </translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="335"/>
++        <location filename="../src/mainwindow.cpp" line="165"/>
+         <source>Please enter your password or enroll your fingerprint </source>
+         <translation>Bitte geben Sie Ihr Passwort ein oder registrieren Sie Ihren Fingerabdruck </translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="259"/>
++        <location filename="../src/mainwindow.cpp" line="1575"/>
+         <source>Abnormal network</source>
+         <translation>Ungewöhnliches Netzwerk</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="665"/>
++        <location filename="../src/mainwindow.cpp" line="517"/>
+         <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
+         <translation>Für diesen Vorgang ist die Autorisierung des Administrators erforderlich. Bitte geben Sie Ihr Passwort ein, um diesen Vorgang zuzulassen.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="733"/>
++        <location filename="../src/mainwindow.cpp" line="584"/>
+         <source>_Password: </source>
+         <translation>_Passwort: </translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="735"/>
++        <location filename="../src/mainwindow.cpp" line="586"/>
+         <source>_Password:</source>
+         <translation>_Passwort:</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="850"/>
++        <location filename="../src/mainwindow.cpp" line="704"/>
+         <source>Authentication failed, please try again.</source>
+         <translation>Authentifizierung fehlgeschlagen, bitte versuchen Sie es erneut.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="779"/>
++        <location filename="../src/mainwindow.cpp" line="635"/>
+         <source>days left</source>
+         <translation>Verbleibende Tage</translation>
+     </message>
+@@ -279,16 +286,16 @@
+         <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="226"/>
+-        <location filename="../src/mainwindow.cpp" line="1415"/>
+-        <location filename="../src/mainwindow.cpp" line="1417"/>
++        <location filename="../src/mainwindow.cpp" line="1243"/>
++        <location filename="../src/mainwindow.cpp" line="1246"/>
++        <location filename="../src/mainwindow.cpp" line="1539"/>
+         <source>Failed to verify %1, please enter password to unlock</source>
+         <translation>%1 konnte nicht verifiziert werden, bitte geben Sie das Kennwort zum Entsperren ein</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="231"/>
+-        <location filename="../src/mainwindow.cpp" line="233"/>
+-        <location filename="../src/mainwindow.cpp" line="1419"/>
++        <location filename="../src/mainwindow.cpp" line="1249"/>
++        <location filename="../src/mainwindow.cpp" line="1545"/>
++        <location filename="../src/mainwindow.cpp" line="1548"/>
+         <source>Unable to verify %1, please enter password to unlock</source>
+         <translation>%1 kann nicht verifiziert werden, bitte geben Sie das Kennwort zum Entsperren ein</translation>
+     </message>
+@@ -297,86 +304,121 @@
+         <translation type="vanished">网络异常</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="671"/>
++        <location filename="../src/mainwindow.cpp" line="522"/>
+         <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
+         <translation>Ein Programm versucht, eine Aktion auszuführen, für die Berechtigungen erforderlich sind. Zum Ausführen der Aktion ist eine Autorisierung erforderlich.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="108"/>
+-        <location filename="../src/mainwindow.cpp" line="729"/>
++        <location filename="../src/mainwindow.cpp" line="88"/>
++        <location filename="../src/mainwindow.cpp" line="580"/>
+         <source>Input Password</source>
+         <translation>Passwort eingeben</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="105"/>
++        <location filename="../src/mainwindow.cpp" line="85"/>
+         <source>Insert the ukey into the USB port</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="107"/>
++        <location filename="../src/mainwindow.cpp" line="87"/>
+         <source>Enter the ukey password</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="783"/>
++        <location filename="../src/mainwindow.cpp" line="93"/>
++        <source>Close</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1261"/>
++        <source>Facial recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1264"/>
++        <source>Fingerprint recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1267"/>
++        <source>Voiceprint recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1270"/>
++        <source>Finger veins recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1273"/>
++        <source>Iris recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1276"/>
++        <source>Use the bound wechat scanning code to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1579"/>
++        <source>Acquisition failure</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="638"/>
+         <source>hours left</source>
+         <translation>Verbleibende Stunden</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="787"/>
++        <location filename="../src/mainwindow.cpp" line="641"/>
+         <source>minutes left</source>
+         <translation>Noch Minuten</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="791"/>
++        <location filename="../src/mainwindow.cpp" line="644"/>
+         <source>seconds left</source>
+         <translation>Verbleibende Sekunden</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="880"/>
+-        <location filename="../src/mainwindow.cpp" line="888"/>
++        <location filename="../src/mainwindow.cpp" line="734"/>
++        <location filename="../src/mainwindow.cpp" line="742"/>
++        <location filename="../src/mainwindow.cpp" line="1258"/>
+         <source>Input your password to authentication</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1434"/>
+         <source>Verify face recognition or enter password to unlock</source>
+-        <translation>Überprüfen Sie die Gesichtserkennung oder geben Sie das Passwort ein, um zu entsperren</translation>
++        <translation type="vanished">Überprüfen Sie die Gesichtserkennung oder geben Sie das Passwort ein, um zu entsperren</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1439"/>
+         <source>Press fingerprint or enter password to unlock</source>
+-        <translation>Drücken Sie den Fingerabdruck oder geben Sie das Passwort ein, um zu entsperren</translation>
++        <translation type="vanished">Drücken Sie den Fingerabdruck oder geben Sie das Passwort ein, um zu entsperren</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1444"/>
+         <source>Verify voiceprint or enter password to unlock</source>
+-        <translation>Überprüfen Sie den Stimmabdruck oder geben Sie das Passwort ein, um zu entsperren</translation>
++        <translation type="vanished">Überprüfen Sie den Stimmabdruck oder geben Sie das Passwort ein, um zu entsperren</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1449"/>
+         <source>Verify finger vein or enter password to unlock</source>
+-        <translation>Überprüfen Sie die Fingervene oder geben Sie das Passwort ein, um zu entsperren</translation>
++        <translation type="vanished">Überprüfen Sie die Fingervene oder geben Sie das Passwort ein, um zu entsperren</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1454"/>
+         <source>Verify iris or enter password to unlock</source>
+-        <translation>Überprüfen Sie die Iris oder geben Sie das Passwort ein, um zu entsperren</translation>
++        <translation type="vanished">Überprüfen Sie die Iris oder geben Sie das Passwort ein, um zu entsperren</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1459"/>
+         <source>Use the bound wechat scanning code or enter the password to unlock</source>
+-        <translation>Verwenden Sie den gebundenen Wechat-Scan-Code oder geben Sie das Passwort zum Entsperren ein</translation>
++        <translation type="vanished">Verwenden Sie den gebundenen Wechat-Scan-Code oder geben Sie das Passwort zum Entsperren ein</translation>
+     </message>
+     <message>
+         <source>Use the bound wechat scanning code or enter the password to log in</source>
+         <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="779"/>
+-        <location filename="../src/mainwindow.cpp" line="783"/>
+-        <location filename="../src/mainwindow.cpp" line="787"/>
+-        <location filename="../src/mainwindow.cpp" line="791"/>
++        <location filename="../src/mainwindow.cpp" line="635"/>
++        <location filename="../src/mainwindow.cpp" line="638"/>
++        <location filename="../src/mainwindow.cpp" line="641"/>
++        <location filename="../src/mainwindow.cpp" line="644"/>
+         <source>Account locked,</source>
+         <translation>Konto gesperrt,</translation>
+     </message>
+@@ -388,17 +430,17 @@
+ <context>
+     <name>PolkitListener</name>
+     <message>
+-        <location filename="../src/PolkitListener.cpp" line="88"/>
++        <location filename="../src/PolkitListener.cpp" line="86"/>
+         <source>Another client is already authenticating, please try again later.</source>
+         <translation>Ein anderer Client authentifiziert sich bereits, bitte versuchen Sie es später noch einmal.</translation>
+     </message>
+     <message>
+-        <location filename="../src/PolkitListener.cpp" line="265"/>
++        <location filename="../src/PolkitListener.cpp" line="253"/>
+         <source>Authentication failure, please try again.</source>
+         <translation>Authentifizierungsfehler, bitte versuchen Sie es erneut.</translation>
+     </message>
+     <message>
+-        <location filename="../src/PolkitListener.cpp" line="272"/>
++        <location filename="../src/PolkitListener.cpp" line="259"/>
+         <source>Password input error!</source>
+         <translation>Fehler bei der Passworteingabe!</translation>
+     </message>
+diff --git a/polkit-agent/i18n_ts/es.ts b/polkit-agent/i18n_ts/es.ts
+index 133ff59..11060b3 100644
+--- a/polkit-agent/i18n_ts/es.ts
++++ b/polkit-agent/i18n_ts/es.ts
+@@ -51,6 +51,15 @@
+         <translation type="vanished">二维码</translation>
+     </message>
+ </context>
++<context>
++    <name>FullScreenBackground</name>
++    <message>
++        <location filename="../src/fullscreenbackground.cpp" line="75"/>
++        <location filename="../src/fullscreenbackground.cpp" line="104"/>
++        <source>Authentication</source>
++        <translation type="unfinished">Autenticación</translation>
++    </message>
++</context>
+ <context>
+     <name>LoginOptionsWidget</name>
+     <message>
+@@ -65,9 +74,8 @@
+ <context>
+     <name>MainWindow</name>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="66"/>
+         <source>Authentication</source>
+-        <translation>Autenticación</translation>
++        <translation type="vanished">Autenticación</translation>
+     </message>
+     <message>
+         <source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
+@@ -91,14 +99,14 @@
+         <translation type="vanished">密码</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="409"/>
+-        <location filename="../src/mainwindow.cpp" line="1075"/>
+-        <location filename="../src/mainwindow.cpp" line="1143"/>
++        <location filename="../src/mainwindow.ui" line="398"/>
++        <location filename="../src/mainwindow.cpp" line="874"/>
++        <location filename="../src/mainwindow.cpp" line="943"/>
+         <source>Biometric</source>
+         <translation>Biométrico</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="480"/>
++        <location filename="../src/mainwindow.ui" line="493"/>
+         <source>use password</source>
+         <translation>Usar contraseña</translation>
+     </message>
+@@ -147,20 +155,19 @@
+         <translation type="vanished">Polkit.caller-pid:</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="441"/>
+-        <location filename="../src/mainwindow.cpp" line="1077"/>
++        <location filename="../src/mainwindow.ui" line="436"/>
++        <location filename="../src/mainwindow.cpp" line="875"/>
+         <source>Cancel</source>
+         <translation>Cancelar</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="460"/>
+-        <location filename="../src/mainwindow.cpp" line="1073"/>
++        <location filename="../src/mainwindow.ui" line="461"/>
++        <location filename="../src/mainwindow.cpp" line="873"/>
+         <source>Authenticate</source>
+         <translation>Autentificar</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1079"/>
+-        <location filename="../src/mainwindow.cpp" line="1183"/>
++        <location filename="../src/mainwindow.cpp" line="876"/>
+         <source>Use password</source>
+         <translation>Usar contraseña</translation>
+     </message>
+@@ -185,30 +192,30 @@
+         <translation type="vanished">认证中,请稍等...</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1219"/>
+-        <location filename="../src/mainwindow.cpp" line="1292"/>
+-        <location filename="../src/mainwindow.cpp" line="1293"/>
++        <location filename="../src/mainwindow.cpp" line="1003"/>
++        <location filename="../src/mainwindow.cpp" line="1081"/>
++        <location filename="../src/mainwindow.cpp" line="1082"/>
+         <source>Please try again in %1 minutes.</source>
+         <translation>Inténtelo de nuevo en %1 minutos.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1230"/>
+-        <location filename="../src/mainwindow.cpp" line="1302"/>
+-        <location filename="../src/mainwindow.cpp" line="1303"/>
++        <location filename="../src/mainwindow.cpp" line="1015"/>
++        <location filename="../src/mainwindow.cpp" line="1093"/>
++        <location filename="../src/mainwindow.cpp" line="1094"/>
+         <source>Please try again in %1 seconds.</source>
+         <translation>Inténtelo de nuevo en %1 segundos.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1240"/>
+-        <location filename="../src/mainwindow.cpp" line="1241"/>
+-        <location filename="../src/mainwindow.cpp" line="1311"/>
+-        <location filename="../src/mainwindow.cpp" line="1312"/>
++        <location filename="../src/mainwindow.cpp" line="1026"/>
++        <location filename="../src/mainwindow.cpp" line="1027"/>
++        <location filename="../src/mainwindow.cpp" line="1104"/>
++        <location filename="../src/mainwindow.cpp" line="1105"/>
+         <source>Account locked permanently.</source>
+         <translation>Cuenta bloqueada permanentemente.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="834"/>
+-        <location filename="../src/mainwindow.cpp" line="835"/>
++        <location filename="../src/mainwindow.cpp" line="688"/>
++        <location filename="../src/mainwindow.cpp" line="689"/>
+         <source>Password cannot be empty</source>
+         <translation>La contraseña no puede estar vacía</translation>
+     </message>
+@@ -221,8 +228,8 @@
+         <translation type="vanished">无法验证%1,请输入密码.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="242"/>
+-        <location filename="../src/mainwindow.cpp" line="246"/>
++        <location filename="../src/mainwindow.cpp" line="1558"/>
++        <location filename="../src/mainwindow.cpp" line="1562"/>
+         <source>Failed to verify %1, you still have %2 verification opportunities</source>
+         <translation>No se pudo verificar %1, todavía tiene %2 oportunidades de verificación</translation>
+     </message>
+@@ -231,42 +238,42 @@
+         <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="731"/>
++        <location filename="../src/mainwindow.cpp" line="582"/>
+         <source>Password: </source>
+         <translation>Contraseña: </translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="335"/>
++        <location filename="../src/mainwindow.cpp" line="165"/>
+         <source>Please enter your password or enroll your fingerprint </source>
+         <translation>Ingrese su contraseña o registre su huella dactilar </translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="259"/>
++        <location filename="../src/mainwindow.cpp" line="1575"/>
+         <source>Abnormal network</source>
+         <translation>Red anormal</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="665"/>
++        <location filename="../src/mainwindow.cpp" line="517"/>
+         <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
+         <translation>Esta operación requiere la autorización del administrador. Introduzca su contraseña para permitir esta operación.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="733"/>
++        <location filename="../src/mainwindow.cpp" line="584"/>
+         <source>_Password: </source>
+         <translation>_Contraseña: </translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="735"/>
++        <location filename="../src/mainwindow.cpp" line="586"/>
+         <source>_Password:</source>
+         <translation>_Contraseña:</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="850"/>
++        <location filename="../src/mainwindow.cpp" line="704"/>
+         <source>Authentication failed, please try again.</source>
+         <translation>Error de autenticación, inténtelo de nuevo.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="779"/>
++        <location filename="../src/mainwindow.cpp" line="635"/>
+         <source>days left</source>
+         <translation>Días restantes</translation>
+     </message>
+@@ -279,16 +286,16 @@
+         <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="226"/>
+-        <location filename="../src/mainwindow.cpp" line="1415"/>
+-        <location filename="../src/mainwindow.cpp" line="1417"/>
++        <location filename="../src/mainwindow.cpp" line="1243"/>
++        <location filename="../src/mainwindow.cpp" line="1246"/>
++        <location filename="../src/mainwindow.cpp" line="1539"/>
+         <source>Failed to verify %1, please enter password to unlock</source>
+         <translation>No se pudo verificar %1, ingrese la contraseña para desbloquear</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="231"/>
+-        <location filename="../src/mainwindow.cpp" line="233"/>
+-        <location filename="../src/mainwindow.cpp" line="1419"/>
++        <location filename="../src/mainwindow.cpp" line="1249"/>
++        <location filename="../src/mainwindow.cpp" line="1545"/>
++        <location filename="../src/mainwindow.cpp" line="1548"/>
+         <source>Unable to verify %1, please enter password to unlock</source>
+         <translation>No se puede verificar %1, ingrese la contraseña para desbloquear</translation>
+     </message>
+@@ -297,86 +304,121 @@
+         <translation type="vanished">网络异常</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="671"/>
++        <location filename="../src/mainwindow.cpp" line="522"/>
+         <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
+         <translation>Un programa está intentando realizar una acción que requiere privilegios. Requiere autorización para realizar la acción.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="108"/>
+-        <location filename="../src/mainwindow.cpp" line="729"/>
++        <location filename="../src/mainwindow.cpp" line="88"/>
++        <location filename="../src/mainwindow.cpp" line="580"/>
+         <source>Input Password</source>
+         <translation>Contraseña de entrada</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="105"/>
++        <location filename="../src/mainwindow.cpp" line="85"/>
+         <source>Insert the ukey into the USB port</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="107"/>
++        <location filename="../src/mainwindow.cpp" line="87"/>
+         <source>Enter the ukey password</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="783"/>
++        <location filename="../src/mainwindow.cpp" line="93"/>
++        <source>Close</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1261"/>
++        <source>Facial recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1264"/>
++        <source>Fingerprint recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1267"/>
++        <source>Voiceprint recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1270"/>
++        <source>Finger veins recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1273"/>
++        <source>Iris recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1276"/>
++        <source>Use the bound wechat scanning code to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1579"/>
++        <source>Acquisition failure</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="638"/>
+         <source>hours left</source>
+         <translation>horas restantes</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="787"/>
++        <location filename="../src/mainwindow.cpp" line="641"/>
+         <source>minutes left</source>
+         <translation>Quedan minutos</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="791"/>
++        <location filename="../src/mainwindow.cpp" line="644"/>
+         <source>seconds left</source>
+         <translation>segundos restantes</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="880"/>
+-        <location filename="../src/mainwindow.cpp" line="888"/>
++        <location filename="../src/mainwindow.cpp" line="734"/>
++        <location filename="../src/mainwindow.cpp" line="742"/>
++        <location filename="../src/mainwindow.cpp" line="1258"/>
+         <source>Input your password to authentication</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1434"/>
+         <source>Verify face recognition or enter password to unlock</source>
+-        <translation>Verifique el reconocimiento facial o ingrese la contraseña para desbloquear</translation>
++        <translation type="vanished">Verifique el reconocimiento facial o ingrese la contraseña para desbloquear</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1439"/>
+         <source>Press fingerprint or enter password to unlock</source>
+-        <translation>Presione la huella dactilar o ingrese la contraseña para desbloquear</translation>
++        <translation type="vanished">Presione la huella dactilar o ingrese la contraseña para desbloquear</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1444"/>
+         <source>Verify voiceprint or enter password to unlock</source>
+-        <translation>Verifica la huella de voz o ingresa la contraseña para desbloquear</translation>
++        <translation type="vanished">Verifica la huella de voz o ingresa la contraseña para desbloquear</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1449"/>
+         <source>Verify finger vein or enter password to unlock</source>
+-        <translation>Verifique la vena del dedo o ingrese la contraseña para desbloquear</translation>
++        <translation type="vanished">Verifique la vena del dedo o ingrese la contraseña para desbloquear</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1454"/>
+         <source>Verify iris or enter password to unlock</source>
+-        <translation>Verifique el iris o ingrese la contraseña para desbloquear</translation>
++        <translation type="vanished">Verifique el iris o ingrese la contraseña para desbloquear</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1459"/>
+         <source>Use the bound wechat scanning code or enter the password to unlock</source>
+-        <translation>Use el código de escaneo de wechat vinculado o ingrese la contraseña para desbloquear</translation>
++        <translation type="vanished">Use el código de escaneo de wechat vinculado o ingrese la contraseña para desbloquear</translation>
+     </message>
+     <message>
+         <source>Use the bound wechat scanning code or enter the password to log in</source>
+         <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="779"/>
+-        <location filename="../src/mainwindow.cpp" line="783"/>
+-        <location filename="../src/mainwindow.cpp" line="787"/>
+-        <location filename="../src/mainwindow.cpp" line="791"/>
++        <location filename="../src/mainwindow.cpp" line="635"/>
++        <location filename="../src/mainwindow.cpp" line="638"/>
++        <location filename="../src/mainwindow.cpp" line="641"/>
++        <location filename="../src/mainwindow.cpp" line="644"/>
+         <source>Account locked,</source>
+         <translation>Cuenta bloqueada,</translation>
+     </message>
+@@ -388,17 +430,17 @@
+ <context>
+     <name>PolkitListener</name>
+     <message>
+-        <location filename="../src/PolkitListener.cpp" line="88"/>
++        <location filename="../src/PolkitListener.cpp" line="86"/>
+         <source>Another client is already authenticating, please try again later.</source>
+         <translation>Otro cliente ya se está autenticando, inténtelo de nuevo más tarde.</translation>
+     </message>
+     <message>
+-        <location filename="../src/PolkitListener.cpp" line="265"/>
++        <location filename="../src/PolkitListener.cpp" line="253"/>
+         <source>Authentication failure, please try again.</source>
+         <translation>Error de autenticación, inténtelo de nuevo.</translation>
+     </message>
+     <message>
+-        <location filename="../src/PolkitListener.cpp" line="272"/>
++        <location filename="../src/PolkitListener.cpp" line="259"/>
+         <source>Password input error!</source>
+         <translation>¡Error de entrada de contraseña!</translation>
+     </message>
+diff --git a/polkit-agent/i18n_ts/fr.ts b/polkit-agent/i18n_ts/fr.ts
+index 357fb71..f1c41cf 100644
+--- a/polkit-agent/i18n_ts/fr.ts
++++ b/polkit-agent/i18n_ts/fr.ts
+@@ -51,6 +51,15 @@
+         <translation type="vanished">二维码</translation>
+     </message>
+ </context>
++<context>
++    <name>FullScreenBackground</name>
++    <message>
++        <location filename="../src/fullscreenbackground.cpp" line="75"/>
++        <location filename="../src/fullscreenbackground.cpp" line="104"/>
++        <source>Authentication</source>
++        <translation type="unfinished">Authentification</translation>
++    </message>
++</context>
+ <context>
+     <name>LoginOptionsWidget</name>
+     <message>
+@@ -65,9 +74,8 @@
+ <context>
+     <name>MainWindow</name>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="66"/>
+         <source>Authentication</source>
+-        <translation>Authentification</translation>
++        <translation type="vanished">Authentification</translation>
+     </message>
+     <message>
+         <source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
+@@ -91,14 +99,14 @@
+         <translation type="vanished">密码</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="409"/>
+-        <location filename="../src/mainwindow.cpp" line="1075"/>
+-        <location filename="../src/mainwindow.cpp" line="1143"/>
++        <location filename="../src/mainwindow.ui" line="398"/>
++        <location filename="../src/mainwindow.cpp" line="874"/>
++        <location filename="../src/mainwindow.cpp" line="943"/>
+         <source>Biometric</source>
+         <translation>Biométrique</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="480"/>
++        <location filename="../src/mainwindow.ui" line="493"/>
+         <source>use password</source>
+         <translation>Utiliser le mot de passe</translation>
+     </message>
+@@ -147,20 +155,19 @@
+         <translation type="vanished">Polkit.caller-pid:</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="441"/>
+-        <location filename="../src/mainwindow.cpp" line="1077"/>
++        <location filename="../src/mainwindow.ui" line="436"/>
++        <location filename="../src/mainwindow.cpp" line="875"/>
+         <source>Cancel</source>
+         <translation>Annuler</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="460"/>
+-        <location filename="../src/mainwindow.cpp" line="1073"/>
++        <location filename="../src/mainwindow.ui" line="461"/>
++        <location filename="../src/mainwindow.cpp" line="873"/>
+         <source>Authenticate</source>
+         <translation>Authentifier</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1079"/>
+-        <location filename="../src/mainwindow.cpp" line="1183"/>
++        <location filename="../src/mainwindow.cpp" line="876"/>
+         <source>Use password</source>
+         <translation>Utiliser le mot de passe</translation>
+     </message>
+@@ -185,30 +192,30 @@
+         <translation type="vanished">认证中,请稍等...</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1219"/>
+-        <location filename="../src/mainwindow.cpp" line="1292"/>
+-        <location filename="../src/mainwindow.cpp" line="1293"/>
++        <location filename="../src/mainwindow.cpp" line="1003"/>
++        <location filename="../src/mainwindow.cpp" line="1081"/>
++        <location filename="../src/mainwindow.cpp" line="1082"/>
+         <source>Please try again in %1 minutes.</source>
+         <translation>Veuillez réessayer dans %1 minutes.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1230"/>
+-        <location filename="../src/mainwindow.cpp" line="1302"/>
+-        <location filename="../src/mainwindow.cpp" line="1303"/>
++        <location filename="../src/mainwindow.cpp" line="1015"/>
++        <location filename="../src/mainwindow.cpp" line="1093"/>
++        <location filename="../src/mainwindow.cpp" line="1094"/>
+         <source>Please try again in %1 seconds.</source>
+         <translation>Veuillez réessayer dans %1 secondes.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1240"/>
+-        <location filename="../src/mainwindow.cpp" line="1241"/>
+-        <location filename="../src/mainwindow.cpp" line="1311"/>
+-        <location filename="../src/mainwindow.cpp" line="1312"/>
++        <location filename="../src/mainwindow.cpp" line="1026"/>
++        <location filename="../src/mainwindow.cpp" line="1027"/>
++        <location filename="../src/mainwindow.cpp" line="1104"/>
++        <location filename="../src/mainwindow.cpp" line="1105"/>
+         <source>Account locked permanently.</source>
+         <translation>Compte verrouillé définitivement.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="834"/>
+-        <location filename="../src/mainwindow.cpp" line="835"/>
++        <location filename="../src/mainwindow.cpp" line="688"/>
++        <location filename="../src/mainwindow.cpp" line="689"/>
+         <source>Password cannot be empty</source>
+         <translation>Le mot de passe ne peut pas être vide</translation>
+     </message>
+@@ -221,8 +228,8 @@
+         <translation type="vanished">无法验证%1,请输入密码.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="242"/>
+-        <location filename="../src/mainwindow.cpp" line="246"/>
++        <location filename="../src/mainwindow.cpp" line="1558"/>
++        <location filename="../src/mainwindow.cpp" line="1562"/>
+         <source>Failed to verify %1, you still have %2 verification opportunities</source>
+         <translation>Échec de la vérification %1, vous avez encore %2 possibilités de vérification</translation>
+     </message>
+@@ -231,42 +238,42 @@
+         <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="731"/>
++        <location filename="../src/mainwindow.cpp" line="582"/>
+         <source>Password: </source>
+         <translation>Mot de passe: </translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="335"/>
++        <location filename="../src/mainwindow.cpp" line="165"/>
+         <source>Please enter your password or enroll your fingerprint </source>
+         <translation>Veuillez saisir votre mot de passe ou enregistrer votre empreinte digitale </translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="259"/>
++        <location filename="../src/mainwindow.cpp" line="1575"/>
+         <source>Abnormal network</source>
+         <translation>Réseau anormal</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="665"/>
++        <location filename="../src/mainwindow.cpp" line="517"/>
+         <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
+         <translation>Cette opération nécessite l’autorisation de l’administrateur. Veuillez saisir votre mot de passe pour autoriser cette opération.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="733"/>
++        <location filename="../src/mainwindow.cpp" line="584"/>
+         <source>_Password: </source>
+         <translation>_Mot de passe: </translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="735"/>
++        <location filename="../src/mainwindow.cpp" line="586"/>
+         <source>_Password:</source>
+         <translation>_Mot de passe:</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="850"/>
++        <location filename="../src/mainwindow.cpp" line="704"/>
+         <source>Authentication failed, please try again.</source>
+         <translation>L’authentification a échoué, veuillez réessayer.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="779"/>
++        <location filename="../src/mainwindow.cpp" line="635"/>
+         <source>days left</source>
+         <translation>jours restants</translation>
+     </message>
+@@ -279,16 +286,16 @@
+         <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="226"/>
+-        <location filename="../src/mainwindow.cpp" line="1415"/>
+-        <location filename="../src/mainwindow.cpp" line="1417"/>
++        <location filename="../src/mainwindow.cpp" line="1243"/>
++        <location filename="../src/mainwindow.cpp" line="1246"/>
++        <location filename="../src/mainwindow.cpp" line="1539"/>
+         <source>Failed to verify %1, please enter password to unlock</source>
+         <translation>Impossible de vérifier %1, veuillez entrer le mot de passe pour déverrouiller</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="231"/>
+-        <location filename="../src/mainwindow.cpp" line="233"/>
+-        <location filename="../src/mainwindow.cpp" line="1419"/>
++        <location filename="../src/mainwindow.cpp" line="1249"/>
++        <location filename="../src/mainwindow.cpp" line="1545"/>
++        <location filename="../src/mainwindow.cpp" line="1548"/>
+         <source>Unable to verify %1, please enter password to unlock</source>
+         <translation>Impossible de vérifier %1, veuillez entrer le mot de passe pour déverrouiller</translation>
+     </message>
+@@ -297,86 +304,121 @@
+         <translation type="vanished">网络异常</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="671"/>
++        <location filename="../src/mainwindow.cpp" line="522"/>
+         <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
+         <translation>Un programme tente d’effectuer une action qui nécessite des privilèges. Il nécessite une autorisation pour effectuer l’action.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="108"/>
+-        <location filename="../src/mainwindow.cpp" line="729"/>
++        <location filename="../src/mainwindow.cpp" line="88"/>
++        <location filename="../src/mainwindow.cpp" line="580"/>
+         <source>Input Password</source>
+         <translation>Mot de passe d’entrée</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="105"/>
++        <location filename="../src/mainwindow.cpp" line="85"/>
+         <source>Insert the ukey into the USB port</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="107"/>
++        <location filename="../src/mainwindow.cpp" line="87"/>
+         <source>Enter the ukey password</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="783"/>
++        <location filename="../src/mainwindow.cpp" line="93"/>
++        <source>Close</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1261"/>
++        <source>Facial recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1264"/>
++        <source>Fingerprint recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1267"/>
++        <source>Voiceprint recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1270"/>
++        <source>Finger veins recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1273"/>
++        <source>Iris recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1276"/>
++        <source>Use the bound wechat scanning code to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1579"/>
++        <source>Acquisition failure</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="638"/>
+         <source>hours left</source>
+         <translation>Heures restantes</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="787"/>
++        <location filename="../src/mainwindow.cpp" line="641"/>
+         <source>minutes left</source>
+         <translation>minutes restantes</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="791"/>
++        <location filename="../src/mainwindow.cpp" line="644"/>
+         <source>seconds left</source>
+         <translation>secondes restantes</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="880"/>
+-        <location filename="../src/mainwindow.cpp" line="888"/>
++        <location filename="../src/mainwindow.cpp" line="734"/>
++        <location filename="../src/mainwindow.cpp" line="742"/>
++        <location filename="../src/mainwindow.cpp" line="1258"/>
+         <source>Input your password to authentication</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1434"/>
+         <source>Verify face recognition or enter password to unlock</source>
+-        <translation>Vérifier la reconnaissance faciale ou saisir le mot de passe pour déverrouiller</translation>
++        <translation type="vanished">Vérifier la reconnaissance faciale ou saisir le mot de passe pour déverrouiller</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1439"/>
+         <source>Press fingerprint or enter password to unlock</source>
+-        <translation>Appuyez sur l’empreinte digitale ou entrez le mot de passe pour déverrouiller</translation>
++        <translation type="vanished">Appuyez sur l’empreinte digitale ou entrez le mot de passe pour déverrouiller</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1444"/>
+         <source>Verify voiceprint or enter password to unlock</source>
+-        <translation>Vérifier l’empreinte vocale ou saisir le mot de passe pour déverrouiller</translation>
++        <translation type="vanished">Vérifier l’empreinte vocale ou saisir le mot de passe pour déverrouiller</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1449"/>
+         <source>Verify finger vein or enter password to unlock</source>
+-        <translation>Vérifiez la veine du doigt ou entrez le mot de passe pour déverrouiller</translation>
++        <translation type="vanished">Vérifiez la veine du doigt ou entrez le mot de passe pour déverrouiller</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1454"/>
+         <source>Verify iris or enter password to unlock</source>
+-        <translation>Vérifiez l’iris ou entrez le mot de passe pour déverrouiller</translation>
++        <translation type="vanished">Vérifiez l’iris ou entrez le mot de passe pour déverrouiller</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1459"/>
+         <source>Use the bound wechat scanning code or enter the password to unlock</source>
+-        <translation>Utilisez le code d’analyse wechat lié ou entrez le mot de passe pour déverrouiller</translation>
++        <translation type="vanished">Utilisez le code d’analyse wechat lié ou entrez le mot de passe pour déverrouiller</translation>
+     </message>
+     <message>
+         <source>Use the bound wechat scanning code or enter the password to log in</source>
+         <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="779"/>
+-        <location filename="../src/mainwindow.cpp" line="783"/>
+-        <location filename="../src/mainwindow.cpp" line="787"/>
+-        <location filename="../src/mainwindow.cpp" line="791"/>
++        <location filename="../src/mainwindow.cpp" line="635"/>
++        <location filename="../src/mainwindow.cpp" line="638"/>
++        <location filename="../src/mainwindow.cpp" line="641"/>
++        <location filename="../src/mainwindow.cpp" line="644"/>
+         <source>Account locked,</source>
+         <translation>Compte verrouillé,</translation>
+     </message>
+@@ -388,17 +430,17 @@
+ <context>
+     <name>PolkitListener</name>
+     <message>
+-        <location filename="../src/PolkitListener.cpp" line="88"/>
++        <location filename="../src/PolkitListener.cpp" line="86"/>
+         <source>Another client is already authenticating, please try again later.</source>
+         <translation>Un autre client est déjà en train de s’authentifier, veuillez réessayer plus tard.</translation>
+     </message>
+     <message>
+-        <location filename="../src/PolkitListener.cpp" line="265"/>
++        <location filename="../src/PolkitListener.cpp" line="253"/>
+         <source>Authentication failure, please try again.</source>
+         <translation>Échec de l’authentification, veuillez réessayer.</translation>
+     </message>
+     <message>
+-        <location filename="../src/PolkitListener.cpp" line="272"/>
++        <location filename="../src/PolkitListener.cpp" line="259"/>
+         <source>Password input error!</source>
+         <translation>Erreur de saisie du mot de passe !</translation>
+     </message>
+diff --git a/polkit-agent/i18n_ts/kk.ts b/polkit-agent/i18n_ts/kk.ts
+index d112f69..4a77b8f 100644
+--- a/polkit-agent/i18n_ts/kk.ts
++++ b/polkit-agent/i18n_ts/kk.ts
+@@ -51,6 +51,15 @@
+         <translation type="vanished">二维码</translation>
+     </message>
+ </context>
++<context>
++    <name>FullScreenBackground</name>
++    <message>
++        <location filename="../src/fullscreenbackground.cpp" line="75"/>
++        <location filename="../src/fullscreenbackground.cpp" line="104"/>
++        <source>Authentication</source>
++        <translation type="unfinished">شىندىقتى دالەلدەۋ</translation>
++    </message>
++</context>
+ <context>
+     <name>LoginOptionsWidget</name>
+     <message>
+@@ -65,9 +74,8 @@
+ <context>
+     <name>MainWindow</name>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="66"/>
+         <source>Authentication</source>
+-        <translation>شىندىقتى دالەلدەۋ</translation>
++        <translation type="vanished">شىندىقتى دالەلدەۋ</translation>
+     </message>
+     <message>
+         <source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
+@@ -91,14 +99,14 @@
+         <translation type="vanished">密码</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="409"/>
+-        <location filename="../src/mainwindow.cpp" line="1075"/>
+-        <location filename="../src/mainwindow.cpp" line="1143"/>
++        <location filename="../src/mainwindow.ui" line="398"/>
++        <location filename="../src/mainwindow.cpp" line="874"/>
++        <location filename="../src/mainwindow.cpp" line="943"/>
+         <source>Biometric</source>
+         <translation>بىئولەگىيەلىك ەرەكشەلىكتى ٸستەتۋ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="480"/>
++        <location filename="../src/mainwindow.ui" line="493"/>
+         <source>use password</source>
+         <translation>قۇپيا نومەر ٸستەتۋ</translation>
+     </message>
+@@ -147,20 +155,19 @@
+         <translation type="vanished">Polkit.caller-pid:</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="441"/>
+-        <location filename="../src/mainwindow.cpp" line="1077"/>
++        <location filename="../src/mainwindow.ui" line="436"/>
++        <location filename="../src/mainwindow.cpp" line="875"/>
+         <source>Cancel</source>
+         <translation>كۇشىنەن قالدىرۋ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="460"/>
+-        <location filename="../src/mainwindow.cpp" line="1073"/>
++        <location filename="../src/mainwindow.ui" line="461"/>
++        <location filename="../src/mainwindow.cpp" line="873"/>
+         <source>Authenticate</source>
+         <translation>ۇقىق بەرۋ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1079"/>
+-        <location filename="../src/mainwindow.cpp" line="1183"/>
++        <location filename="../src/mainwindow.cpp" line="876"/>
+         <source>Use password</source>
+         <translation>قۇپيا نومەر ٸستەتۋ ارقىلى دالەلدەۋ</translation>
+     </message>
+@@ -185,30 +192,30 @@
+         <translation type="vanished">认证中,请稍等...</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1219"/>
+-        <location filename="../src/mainwindow.cpp" line="1292"/>
+-        <location filename="../src/mainwindow.cpp" line="1293"/>
++        <location filename="../src/mainwindow.cpp" line="1003"/>
++        <location filename="../src/mainwindow.cpp" line="1081"/>
++        <location filename="../src/mainwindow.cpp" line="1082"/>
+         <source>Please try again in %1 minutes.</source>
+         <translation>٪1 مينۋت ٸشٸندە قاتە سىناپ كور.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1230"/>
+-        <location filename="../src/mainwindow.cpp" line="1302"/>
+-        <location filename="../src/mainwindow.cpp" line="1303"/>
++        <location filename="../src/mainwindow.cpp" line="1015"/>
++        <location filename="../src/mainwindow.cpp" line="1093"/>
++        <location filename="../src/mainwindow.cpp" line="1094"/>
+         <source>Please try again in %1 seconds.</source>
+         <translation>٪1 سەكونت ٸشٸندە قاتە سىناپ كور.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1240"/>
+-        <location filename="../src/mainwindow.cpp" line="1241"/>
+-        <location filename="../src/mainwindow.cpp" line="1311"/>
+-        <location filename="../src/mainwindow.cpp" line="1312"/>
++        <location filename="../src/mainwindow.cpp" line="1026"/>
++        <location filename="../src/mainwindow.cpp" line="1027"/>
++        <location filename="../src/mainwindow.cpp" line="1104"/>
++        <location filename="../src/mainwindow.cpp" line="1105"/>
+         <source>Account locked permanently.</source>
+         <translation>ەسەپات ماڭگىلىك قۇلىپتالادى.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="834"/>
+-        <location filename="../src/mainwindow.cpp" line="835"/>
++        <location filename="../src/mainwindow.cpp" line="688"/>
++        <location filename="../src/mainwindow.cpp" line="689"/>
+         <source>Password cannot be empty</source>
+         <translation>قۇپيا نۇمىردى بوس قويۋعا بولمايدى</translation>
+     </message>
+@@ -221,8 +228,8 @@
+         <translation type="vanished">无法验证%1,请输入密码.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="242"/>
+-        <location filename="../src/mainwindow.cpp" line="246"/>
++        <location filename="../src/mainwindow.cpp" line="1558"/>
++        <location filename="../src/mainwindow.cpp" line="1562"/>
+         <source>Failed to verify %1, you still have %2 verification opportunities</source>
+         <translation>٪1 نى دالەلدەۋ جەڭىلىپ قالدى، سىزدە جانەدە ٪2 دالەلدەۋ ورايى بار</translation>
+     </message>
+@@ -231,42 +238,42 @@
+         <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="731"/>
++        <location filename="../src/mainwindow.cpp" line="582"/>
+         <source>Password: </source>
+         <translation>قۇپيا نومەر </translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="335"/>
++        <location filename="../src/mainwindow.cpp" line="165"/>
+         <source>Please enter your password or enroll your fingerprint </source>
+         <translation>قۇپيا نۇمىرىڭىزدى كىرگىزىڭىز ياكي بارماقشى ئىزىڭىزنى تونۇتۇڭ </translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="259"/>
++        <location filename="../src/mainwindow.cpp" line="1575"/>
+         <source>Abnormal network</source>
+         <translation>بينورمال تور</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="665"/>
++        <location filename="../src/mainwindow.cpp" line="517"/>
+         <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
+         <translation>نۇ جوبالاۋ باسقارعٸشتٸڭ ۇقىق بىرىستى تالاپ ىستەيدى.قۇپيا نۇمىردى كىرەۈزۈپ بي رەتكى جوبالاۋنىڭ الىپ بېرىلىشىغا جول قويىڭىز.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="733"/>
++        <location filename="../src/mainwindow.cpp" line="584"/>
+         <source>_Password: </source>
+         <translation>قۇپيا نومەر </translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="735"/>
++        <location filename="../src/mainwindow.cpp" line="586"/>
+         <source>_Password:</source>
+         <translation>قۇپيا نومەر</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="850"/>
++        <location filename="../src/mainwindow.cpp" line="704"/>
+         <source>Authentication failed, please try again.</source>
+         <translation>دالەلدەۋ جەڭىلىپ قالدى، قاتە سىناڭ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="779"/>
++        <location filename="../src/mainwindow.cpp" line="635"/>
+         <source>days left</source>
+         <translation>1 كۇننەن كەيىن سناپ كور</translation>
+     </message>
+@@ -279,16 +286,16 @@
+         <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="226"/>
+-        <location filename="../src/mainwindow.cpp" line="1415"/>
+-        <location filename="../src/mainwindow.cpp" line="1417"/>
++        <location filename="../src/mainwindow.cpp" line="1243"/>
++        <location filename="../src/mainwindow.cpp" line="1246"/>
++        <location filename="../src/mainwindow.cpp" line="1539"/>
+         <source>Failed to verify %1, please enter password to unlock</source>
+         <translation>٪1 نى دالەلدەۋ جەڭىلىپ قالدى، قۇپيا نومەر كىرگىزىڭىز</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="231"/>
+-        <location filename="../src/mainwindow.cpp" line="233"/>
+-        <location filename="../src/mainwindow.cpp" line="1419"/>
++        <location filename="../src/mainwindow.cpp" line="1249"/>
++        <location filename="../src/mainwindow.cpp" line="1545"/>
++        <location filename="../src/mainwindow.cpp" line="1548"/>
+         <source>Unable to verify %1, please enter password to unlock</source>
+         <translation>٪1 نى دالەلدەۋگە امالسٸز، قۇپيا نۇمىردى كىرەۈزۈپ قۇلىبىن ٴٸشڭٸز</translation>
+     </message>
+@@ -297,86 +304,121 @@
+         <translation type="vanished">网络异常</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="671"/>
++        <location filename="../src/mainwindow.cpp" line="522"/>
+         <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
+         <translation>بٸر پٸروگٸرامما ۇقىق تالاپ ىستەيتىن ارەكەتتى ىستەۋگە ئۇرۇنماقتا. نۇ ارەكەتتى اتقار ەتۋ ٷشٸن ۇقىق تالاپ ىستەيدى.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="108"/>
+-        <location filename="../src/mainwindow.cpp" line="729"/>
++        <location filename="../src/mainwindow.cpp" line="88"/>
++        <location filename="../src/mainwindow.cpp" line="580"/>
+         <source>Input Password</source>
+         <translation>قۇپيا نومەر كىرگىزۋ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="105"/>
++        <location filename="../src/mainwindow.cpp" line="85"/>
+         <source>Insert the ukey into the USB port</source>
+         <translation>ukey نى USB اۋزىنا چېتىپ قويىڭىز</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="107"/>
++        <location filename="../src/mainwindow.cpp" line="87"/>
+         <source>Enter the ukey password</source>
+         <translation>ukey قۇپيا نۇمىردى كىرگىزىڭىز</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="783"/>
++        <location filename="../src/mainwindow.cpp" line="93"/>
++        <source>Close</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1261"/>
++        <source>Facial recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1264"/>
++        <source>Fingerprint recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1267"/>
++        <source>Voiceprint recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1270"/>
++        <source>Finger veins recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1273"/>
++        <source>Iris recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1276"/>
++        <source>Use the bound wechat scanning code to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1579"/>
++        <source>Acquisition failure</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="638"/>
+         <source>hours left</source>
+         <translation>بٸر ساعاتتان كەيىن اشٸلدٸ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="787"/>
++        <location filename="../src/mainwindow.cpp" line="641"/>
+         <source>minutes left</source>
+         <translation>بٸر مينوتتىن كەيىن اشٸلدٸ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="791"/>
++        <location filename="../src/mainwindow.cpp" line="644"/>
+         <source>seconds left</source>
+         <translation>بٸر سەكونتىن كەيىن اشٸلدٸ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="880"/>
+-        <location filename="../src/mainwindow.cpp" line="888"/>
++        <location filename="../src/mainwindow.cpp" line="734"/>
++        <location filename="../src/mainwindow.cpp" line="742"/>
++        <location filename="../src/mainwindow.cpp" line="1258"/>
+         <source>Input your password to authentication</source>
+         <translation>قۇپيا نۇمىردى كىرەۈزۈپ ازاماتتىق كۋالىك دالەلدەۋ.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1434"/>
+         <source>Verify face recognition or enter password to unlock</source>
+-        <translation>چىراي تانىسن دالەلدەۋ ياكي قۇپيا نومەر كىرگىزۋ ارقىلى قۇلىپ ٸشٸۋ</translation>
++        <translation type="vanished">چىراي تانىسن دالەلدەۋ ياكي قۇپيا نومەر كىرگىزۋ ارقىلى قۇلىپ ٸشٸۋ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1439"/>
+         <source>Press fingerprint or enter password to unlock</source>
+-        <translation>بارماقشى ٴٸزدٸ باسٸۋ ياكي قۇپيا نومەر كىرگىزۋ ارقىلى قۇلىپ ٸشٸۋ</translation>
++        <translation type="vanished">بارماقشى ٴٸزدٸ باسٸۋ ياكي قۇپيا نومەر كىرگىزۋ ارقىلى قۇلىپ ٸشٸۋ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1444"/>
+         <source>Verify voiceprint or enter password to unlock</source>
+-        <translation>اۋا ٴٸزدٸ دالەلدەۋ ياكي قۇپيا نومەر كىرگىزۋ ارقىلى قۇلىپ ٸشٸۋ</translation>
++        <translation type="vanished">اۋا ٴٸزدٸ دالەلدەۋ ياكي قۇپيا نومەر كىرگىزۋ ارقىلى قۇلىپ ٸشٸۋ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1449"/>
+         <source>Verify finger vein or enter password to unlock</source>
+-        <translation>بارماقشى ٴٸزٸ ارقىلى انىقتاۋ ياكي قۇپيا نومەر كىرگىزۋ ارقىلى قۇلىپ ٸشٸۋ</translation>
++        <translation type="vanished">بارماقشى ٴٸزٸ ارقىلى انىقتاۋ ياكي قۇپيا نومەر كىرگىزۋ ارقىلى قۇلىپ ٸشٸۋ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1454"/>
+         <source>Verify iris or enter password to unlock</source>
+-        <translation>Iris نى انىقتاۋ ياكي قۇپيا نومەر كىرگىزۋ ارقىلى قۇلىپ ٸشٸۋ</translation>
++        <translation type="vanished">Iris نى انىقتاۋ ياكي قۇپيا نومەر كىرگىزۋ ارقىلى قۇلىپ ٸشٸۋ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1459"/>
+         <source>Use the bound wechat scanning code or enter the password to unlock</source>
+-        <translation>بايلانعان ئۈندىدارنى كەسكىندەۋ بەلگىسى ياكي قۇپيا نۇمىردى كىرەۈزۈپ قۇلىپ ٸشٸۋ</translation>
++        <translation type="vanished">بايلانعان ئۈندىدارنى كەسكىندەۋ بەلگىسى ياكي قۇپيا نۇمىردى كىرەۈزۈپ قۇلىپ ٸشٸۋ</translation>
+     </message>
+     <message>
+         <source>Use the bound wechat scanning code or enter the password to log in</source>
+         <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="779"/>
+-        <location filename="../src/mainwindow.cpp" line="783"/>
+-        <location filename="../src/mainwindow.cpp" line="787"/>
+-        <location filename="../src/mainwindow.cpp" line="791"/>
++        <location filename="../src/mainwindow.cpp" line="635"/>
++        <location filename="../src/mainwindow.cpp" line="638"/>
++        <location filename="../src/mainwindow.cpp" line="641"/>
++        <location filename="../src/mainwindow.cpp" line="644"/>
+         <source>Account locked,</source>
+         <translation>ٸستەتۋ نومەرىڭىز قۇلىپتانىپ قالدى</translation>
+     </message>
+@@ -388,17 +430,17 @@
+ <context>
+     <name>PolkitListener</name>
+     <message>
+-        <location filename="../src/PolkitListener.cpp" line="88"/>
++        <location filename="../src/PolkitListener.cpp" line="86"/>
+         <source>Another client is already authenticating, please try again later.</source>
+         <translation>جانە بٸر قاريدار دالەلدەپ جاتىر، سەل تۇرٸپ قاتە سىناڭ.</translation>
+     </message>
+     <message>
+-        <location filename="../src/PolkitListener.cpp" line="265"/>
++        <location filename="../src/PolkitListener.cpp" line="253"/>
+         <source>Authentication failure, please try again.</source>
+         <translation>دالەلدەۋ جەڭىلىپ قالدى، قاتە سىناڭ.</translation>
+     </message>
+     <message>
+-        <location filename="../src/PolkitListener.cpp" line="272"/>
++        <location filename="../src/PolkitListener.cpp" line="259"/>
+         <source>Password input error!</source>
+         <translation>كىرگىزگەن قۇپيا نومەر قاتە قالدى</translation>
+     </message>
+diff --git a/polkit-agent/i18n_ts/ky.ts b/polkit-agent/i18n_ts/ky.ts
+index 8ccad26..47cb3c6 100644
+--- a/polkit-agent/i18n_ts/ky.ts
++++ b/polkit-agent/i18n_ts/ky.ts
+@@ -51,6 +51,15 @@
+         <translation type="vanished">二维码</translation>
+     </message>
+ </context>
++<context>
++    <name>FullScreenBackground</name>
++    <message>
++        <location filename="../src/fullscreenbackground.cpp" line="75"/>
++        <location filename="../src/fullscreenbackground.cpp" line="104"/>
++        <source>Authentication</source>
++        <translation type="unfinished">راستىنى دالىلدۅ</translation>
++    </message>
++</context>
+ <context>
+     <name>LoginOptionsWidget</name>
+     <message>
+@@ -65,9 +74,8 @@
+ <context>
+     <name>MainWindow</name>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="66"/>
+         <source>Authentication</source>
+-        <translation>راستىنى دالىلدۅ</translation>
++        <translation type="vanished">راستىنى دالىلدۅ</translation>
+     </message>
+     <message>
+         <source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
+@@ -91,14 +99,14 @@
+         <translation type="vanished">密码</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="409"/>
+-        <location filename="../src/mainwindow.cpp" line="1075"/>
+-        <location filename="../src/mainwindow.cpp" line="1143"/>
++        <location filename="../src/mainwindow.ui" line="398"/>
++        <location filename="../src/mainwindow.cpp" line="874"/>
++        <location filename="../src/mainwindow.cpp" line="943"/>
+         <source>Biometric</source>
+         <translation>بىئولەگىيەلىك ۅزگۅچۅلۉگۉ ىشتەتىش</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="480"/>
++        <location filename="../src/mainwindow.ui" line="493"/>
+         <source>use password</source>
+         <translation>جاشىرۇۇن  نومۇر ىشتەتىش</translation>
+     </message>
+@@ -147,20 +155,19 @@
+         <translation type="vanished">Polkit.caller-pid:</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="441"/>
+-        <location filename="../src/mainwindow.cpp" line="1077"/>
++        <location filename="../src/mainwindow.ui" line="436"/>
++        <location filename="../src/mainwindow.cpp" line="875"/>
+         <source>Cancel</source>
+         <translation>ارعادان  قالتىرىش</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="460"/>
+-        <location filename="../src/mainwindow.cpp" line="1073"/>
++        <location filename="../src/mainwindow.ui" line="461"/>
++        <location filename="../src/mainwindow.cpp" line="873"/>
+         <source>Authenticate</source>
+         <translation>ۇقۇق بەرۉۉ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1079"/>
+-        <location filename="../src/mainwindow.cpp" line="1183"/>
++        <location filename="../src/mainwindow.cpp" line="876"/>
+         <source>Use password</source>
+         <translation>جاشىرۇۇن  نومۇر ىشتەتىش  ارقىلۇۇ دالىلدۅ</translation>
+     </message>
+@@ -185,30 +192,30 @@
+         <translation type="vanished">认证中,请稍等...</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1219"/>
+-        <location filename="../src/mainwindow.cpp" line="1292"/>
+-        <location filename="../src/mainwindow.cpp" line="1293"/>
++        <location filename="../src/mainwindow.cpp" line="1003"/>
++        <location filename="../src/mainwindow.cpp" line="1081"/>
++        <location filename="../src/mainwindow.cpp" line="1082"/>
+         <source>Please try again in %1 minutes.</source>
+         <translation>٪1 مىنۇت ىچىندە  قايرا سىناپ باعىڭ.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1230"/>
+-        <location filename="../src/mainwindow.cpp" line="1302"/>
+-        <location filename="../src/mainwindow.cpp" line="1303"/>
++        <location filename="../src/mainwindow.cpp" line="1015"/>
++        <location filename="../src/mainwindow.cpp" line="1093"/>
++        <location filename="../src/mainwindow.cpp" line="1094"/>
+         <source>Please try again in %1 seconds.</source>
+         <translation>٪1 سىكونت ىچىندە  قايرا سىناپ باعىڭ.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1240"/>
+-        <location filename="../src/mainwindow.cpp" line="1241"/>
+-        <location filename="../src/mainwindow.cpp" line="1311"/>
+-        <location filename="../src/mainwindow.cpp" line="1312"/>
++        <location filename="../src/mainwindow.cpp" line="1026"/>
++        <location filename="../src/mainwindow.cpp" line="1027"/>
++        <location filename="../src/mainwindow.cpp" line="1104"/>
++        <location filename="../src/mainwindow.cpp" line="1105"/>
+         <source>Account locked permanently.</source>
+         <translation>ەسابات تۉبۅلۉك قۇلۇپلىنىدۇ.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="834"/>
+-        <location filename="../src/mainwindow.cpp" line="835"/>
++        <location filename="../src/mainwindow.cpp" line="688"/>
++        <location filename="../src/mainwindow.cpp" line="689"/>
+         <source>Password cannot be empty</source>
+         <translation>جاشىرۇۇن  نومۇردۇ  بوش ،بەكەر  قويۇشقا  بولبويت</translation>
+     </message>
+@@ -221,8 +228,8 @@
+         <translation type="vanished">无法验证%1,请输入密码.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="242"/>
+-        <location filename="../src/mainwindow.cpp" line="246"/>
++        <location filename="../src/mainwindow.cpp" line="1558"/>
++        <location filename="../src/mainwindow.cpp" line="1562"/>
+         <source>Failed to verify %1, you still have %2 verification opportunities</source>
+         <translation>٪1 نى دالىلدۅ جەڭىلۉۉ بولدۇ ، سىزدە  داعى ەلە ٪2 دالىلدۅ مۅۅرتۉ بار</translation>
+     </message>
+@@ -231,42 +238,42 @@
+         <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="731"/>
++        <location filename="../src/mainwindow.cpp" line="582"/>
+         <source>Password: </source>
+         <translation>جاشىرۇۇن  نومۇر </translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="335"/>
++        <location filename="../src/mainwindow.cpp" line="165"/>
+         <source>Please enter your password or enroll your fingerprint </source>
+         <translation>جاشىرۇۇن  نومۇرۇڭۇزدۇ  كىرگىزىڭ كۅرۉنۉشتۅرۉ بارماق ئىزىڭىزنى تونۇتۇڭ </translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="259"/>
++        <location filename="../src/mainwindow.cpp" line="1575"/>
+         <source>Abnormal network</source>
+         <translation>بۅتۅنچۅ تور</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="665"/>
++        <location filename="../src/mainwindow.cpp" line="517"/>
+         <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
+         <translation>بۇل ماشقۇلدانۇۇ  باشقارۇۇچۇنۇن ۇقۇق بەرۉۉنۉ تالاپ جاسايت .جاشىرۇۇن  نومۇردۇ  كىيىرىپ بي قاتىمقى ماشقۇلدانۇۇ نىڭ الىپ بېرىلىشىغا جول قويۇڭ.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="733"/>
++        <location filename="../src/mainwindow.cpp" line="584"/>
+         <source>_Password: </source>
+         <translation>جاشىرۇۇن  نومۇر </translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="735"/>
++        <location filename="../src/mainwindow.cpp" line="586"/>
+         <source>_Password:</source>
+         <translation>جاشىرۇۇن  نومۇر</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="850"/>
++        <location filename="../src/mainwindow.cpp" line="704"/>
+         <source>Authentication failed, please try again.</source>
+         <translation>دالىلدۅ جەڭىلۉۉ بولدۇ ، قايرا سىناڭ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="779"/>
++        <location filename="../src/mainwindow.cpp" line="635"/>
+         <source>days left</source>
+         <translation>1 كۉندۅن كىيىن سىناپ باعىڭ</translation>
+     </message>
+@@ -279,16 +286,16 @@
+         <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="226"/>
+-        <location filename="../src/mainwindow.cpp" line="1415"/>
+-        <location filename="../src/mainwindow.cpp" line="1417"/>
++        <location filename="../src/mainwindow.cpp" line="1243"/>
++        <location filename="../src/mainwindow.cpp" line="1246"/>
++        <location filename="../src/mainwindow.cpp" line="1539"/>
+         <source>Failed to verify %1, please enter password to unlock</source>
+         <translation>٪1 نى دالىلدۅ جەڭىلۉۉ بولدۇ ، سىرلۇۇ نومۇر كىرگىزىڭ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="231"/>
+-        <location filename="../src/mainwindow.cpp" line="233"/>
+-        <location filename="../src/mainwindow.cpp" line="1419"/>
++        <location filename="../src/mainwindow.cpp" line="1249"/>
++        <location filename="../src/mainwindow.cpp" line="1545"/>
++        <location filename="../src/mainwindow.cpp" line="1548"/>
+         <source>Unable to verify %1, please enter password to unlock</source>
+         <translation>٪1 نى دالىلدۅۅگۅ ايلاسىز، جاشىرۇۇن  نومۇردۇ  كىيىرىپ قۇلۇپنى اچىڭ</translation>
+     </message>
+@@ -297,86 +304,121 @@
+         <translation type="vanished">网络异常</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="671"/>
++        <location filename="../src/mainwindow.cpp" line="522"/>
+         <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
+         <translation>بىر  پراگرامما ۇقۇق تالاپ جاسايتۇرعان قىيمىلدى جاسووعو ئۇرۇنماقتا. بۇل قىيمىلدى اتقارماق  جاسوو ،اتقارۇۇ  ۉچۉن  ۇقۇق تالاپ جاسايت .</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="108"/>
+-        <location filename="../src/mainwindow.cpp" line="729"/>
++        <location filename="../src/mainwindow.cpp" line="88"/>
++        <location filename="../src/mainwindow.cpp" line="580"/>
+         <source>Input Password</source>
+         <translation>جاشىرۇۇن  نومۇر كىرگىزۉۉ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="105"/>
++        <location filename="../src/mainwindow.cpp" line="85"/>
+         <source>Insert the ukey into the USB port</source>
+         <translation>ukey نى USB ووزۇنا چېتىپ قويۇڭ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="107"/>
++        <location filename="../src/mainwindow.cpp" line="87"/>
+         <source>Enter the ukey password</source>
+         <translation>ukey جاشىرۇۇن  نومۇرۇن كىرگىزىڭ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="783"/>
++        <location filename="../src/mainwindow.cpp" line="93"/>
++        <source>Close</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1261"/>
++        <source>Facial recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1264"/>
++        <source>Fingerprint recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1267"/>
++        <source>Voiceprint recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1270"/>
++        <source>Finger veins recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1273"/>
++        <source>Iris recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1276"/>
++        <source>Use the bound wechat scanning code to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1579"/>
++        <source>Acquisition failure</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="638"/>
+         <source>hours left</source>
+         <translation>بىر  سائەتتىن كىيىن اچىلات</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="787"/>
++        <location filename="../src/mainwindow.cpp" line="641"/>
+         <source>minutes left</source>
+         <translation>بىر  مىنۇتتان كىيىن اچىلات</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="791"/>
++        <location filename="../src/mainwindow.cpp" line="644"/>
+         <source>seconds left</source>
+         <translation>بىر  سەكۇنتتان كىيىن اچىلات</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="880"/>
+-        <location filename="../src/mainwindow.cpp" line="888"/>
++        <location filename="../src/mainwindow.cpp" line="734"/>
++        <location filename="../src/mainwindow.cpp" line="742"/>
++        <location filename="../src/mainwindow.cpp" line="1258"/>
+         <source>Input your password to authentication</source>
+         <translation>جاشىرۇۇن  نومۇردۇ  كىيىرىپ كۉبۅلۉك  دالىلدۅ.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1434"/>
+         <source>Verify face recognition or enter password to unlock</source>
+-        <translation>چىراي تاانىشتى  دالىلدۅ كۅرۉنۉشتۅرۉ جاشىرۇۇن  نومۇر كىرگىزۉۉ ارقىلۇۇ قۇلپ اچۇۇ</translation>
++        <translation type="vanished">چىراي تاانىشتى  دالىلدۅ كۅرۉنۉشتۅرۉ جاشىرۇۇن  نومۇر كىرگىزۉۉ ارقىلۇۇ قۇلپ اچۇۇ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1439"/>
+         <source>Press fingerprint or enter password to unlock</source>
+-        <translation>بارماق ىزىن باسۇۇدا كۅرۉنۉشتۅرۉ جاشىرۇۇن  نومۇر كىرگىزۉۉ ارقىلۇۇ قۇلپ اچۇۇ</translation>
++        <translation type="vanished">بارماق ىزىن باسۇۇدا كۅرۉنۉشتۅرۉ جاشىرۇۇن  نومۇر كىرگىزۉۉ ارقىلۇۇ قۇلپ اچۇۇ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1444"/>
+         <source>Verify voiceprint or enter password to unlock</source>
+-        <translation>دووش ىزىن دالىلدۅ كۅرۉنۉشتۅرۉ جاشىرۇۇن  نومۇر كىرگىزۉۉ ارقىلۇۇ قۇلپ اچۇۇ</translation>
++        <translation type="vanished">دووش ىزىن دالىلدۅ كۅرۉنۉشتۅرۉ جاشىرۇۇن  نومۇر كىرگىزۉۉ ارقىلۇۇ قۇلپ اچۇۇ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1449"/>
+         <source>Verify finger vein or enter password to unlock</source>
+-        <translation>بارماق ئزى ارقىلۇۇ انىقتاش  كۅرۉنۉشتۅرۉ جاشىرۇۇن  نومۇر كىرگىزۉۉ ارقىلۇۇ قۇلپ اچۇۇ</translation>
++        <translation type="vanished">بارماق ئزى ارقىلۇۇ انىقتاش  كۅرۉنۉشتۅرۉ جاشىرۇۇن  نومۇر كىرگىزۉۉ ارقىلۇۇ قۇلپ اچۇۇ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1454"/>
+         <source>Verify iris or enter password to unlock</source>
+-        <translation>Iris نى انىقتاش  كۅرۉنۉشتۅرۉ جاشىرۇۇن  نومۇر كىرگىزۉۉ ارقىلۇۇ قۇلپ اچۇۇ</translation>
++        <translation type="vanished">Iris نى انىقتاش  كۅرۉنۉشتۅرۉ جاشىرۇۇن  نومۇر كىرگىزۉۉ ارقىلۇۇ قۇلپ اچۇۇ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1459"/>
+         <source>Use the bound wechat scanning code or enter the password to unlock</source>
+-        <translation>بايلانعان  ئۈندىدارنى ىسكاننىردوو قۇپۇيا نومۇرۇ  كۅرۉنۉشتۅرۉ جاشىرۇۇن  نومۇرۇن كىيىرىپ قۇلپ اچۇۇ</translation>
++        <translation type="vanished">بايلانعان  ئۈندىدارنى ىسكاننىردوو قۇپۇيا نومۇرۇ  كۅرۉنۉشتۅرۉ جاشىرۇۇن  نومۇرۇن كىيىرىپ قۇلپ اچۇۇ</translation>
+     </message>
+     <message>
+         <source>Use the bound wechat scanning code or enter the password to log in</source>
+         <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="779"/>
+-        <location filename="../src/mainwindow.cpp" line="783"/>
+-        <location filename="../src/mainwindow.cpp" line="787"/>
+-        <location filename="../src/mainwindow.cpp" line="791"/>
++        <location filename="../src/mainwindow.cpp" line="635"/>
++        <location filename="../src/mainwindow.cpp" line="638"/>
++        <location filename="../src/mainwindow.cpp" line="641"/>
++        <location filename="../src/mainwindow.cpp" line="644"/>
+         <source>Account locked,</source>
+         <translation>ىشتەتىش  نومۇرۇڭۇز قۇلۇپتالىپ قالدى</translation>
+     </message>
+@@ -388,17 +430,17 @@
+ <context>
+     <name>PolkitListener</name>
+     <message>
+-        <location filename="../src/PolkitListener.cpp" line="88"/>
++        <location filename="../src/PolkitListener.cpp" line="86"/>
+         <source>Another client is already authenticating, please try again later.</source>
+         <translation>داعى بىر  سووداگەر ، جولووچۇ  دالىلدەپ جاتات، سەل تۇرۇپ قايرا سىناڭ.</translation>
+     </message>
+     <message>
+-        <location filename="../src/PolkitListener.cpp" line="265"/>
++        <location filename="../src/PolkitListener.cpp" line="253"/>
+         <source>Authentication failure, please try again.</source>
+         <translation>دالىلدۅ جەڭىلۉۉ بولدۇ ، قايرا سىناڭ.</translation>
+     </message>
+     <message>
+-        <location filename="../src/PolkitListener.cpp" line="272"/>
++        <location filename="../src/PolkitListener.cpp" line="259"/>
+         <source>Password input error!</source>
+         <translation>كىيىرگەن  جاشىرۇۇن  نومۇر قاتاا بولدۇ</translation>
+     </message>
+diff --git a/polkit-agent/i18n_ts/mn.ts b/polkit-agent/i18n_ts/mn.ts
+index 4f8ed3c..7f6bfe9 100644
+--- a/polkit-agent/i18n_ts/mn.ts
++++ b/polkit-agent/i18n_ts/mn.ts
+@@ -51,6 +51,15 @@
+         <translation type="vanished">二维码</translation>
+     </message>
+ </context>
++<context>
++    <name>FullScreenBackground</name>
++    <message>
++        <location filename="../src/fullscreenbackground.cpp" line="75"/>
++        <location filename="../src/fullscreenbackground.cpp" line="104"/>
++        <source>Authentication</source>
++        <translation type="unfinished">ᠡᠷᠬᠡ ᠤᠯᠭᠤᠬᠤ</translation>
++    </message>
++</context>
+ <context>
+     <name>LoginOptionsWidget</name>
+     <message>
+@@ -65,9 +74,8 @@
+ <context>
+     <name>MainWindow</name>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="66"/>
+         <source>Authentication</source>
+-        <translation>ᠡᠷᠬᠡ ᠤᠯᠭᠤᠬᠤ</translation>
++        <translation type="vanished">ᠡᠷᠬᠡ ᠤᠯᠭᠤᠬᠤ</translation>
+     </message>
+     <message>
+         <source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
+@@ -91,14 +99,14 @@
+         <translation type="vanished">密码</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="409"/>
+-        <location filename="../src/mainwindow.cpp" line="1075"/>
+-        <location filename="../src/mainwindow.cpp" line="1143"/>
++        <location filename="../src/mainwindow.ui" line="398"/>
++        <location filename="../src/mainwindow.cpp" line="874"/>
++        <location filename="../src/mainwindow.cpp" line="943"/>
+         <source>Biometric</source>
+         <translation>ᠠᠮᠢᠳᠤ ᠪᠤᠳᠠᠰ ᠢ᠋ ᠬᠡᠷᠡᠭᠯᠡᠵᠤ ᠢᠯᠭᠠᠨ ᠳᠠᠨᠢᠬᠤ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="480"/>
++        <location filename="../src/mainwindow.ui" line="493"/>
+         <source>use password</source>
+         <translation>ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠭᠰᠠᠨ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠢ᠋ ᠬᠡᠷᠡᠭᠯᠡᠬᠦ</translation>
+     </message>
+@@ -147,20 +155,19 @@
+         <translation type="vanished">Polkit.caller-pid:</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="441"/>
+-        <location filename="../src/mainwindow.cpp" line="1077"/>
++        <location filename="../src/mainwindow.ui" line="436"/>
++        <location filename="../src/mainwindow.cpp" line="875"/>
+         <source>Cancel</source>
+         <translation>ᠦᠬᠡᠢᠰᠭᠡᠬᠦ᠌</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="460"/>
+-        <location filename="../src/mainwindow.cpp" line="1073"/>
++        <location filename="../src/mainwindow.ui" line="461"/>
++        <location filename="../src/mainwindow.cpp" line="873"/>
+         <source>Authenticate</source>
+         <translation>ᠡᠷᠬᠡ ᠤᠯᠭᠤᠬᠤ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1079"/>
+-        <location filename="../src/mainwindow.cpp" line="1183"/>
++        <location filename="../src/mainwindow.cpp" line="876"/>
+         <source>Use password</source>
+         <translation>ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠭᠰᠠᠨ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠢ᠋ ᠬᠡᠷᠡᠭᠯᠡᠬᠦ</translation>
+     </message>
+@@ -185,30 +192,30 @@
+         <translation type="vanished">认证中,请稍等...</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1219"/>
+-        <location filename="../src/mainwindow.cpp" line="1292"/>
+-        <location filename="../src/mainwindow.cpp" line="1293"/>
++        <location filename="../src/mainwindow.cpp" line="1003"/>
++        <location filename="../src/mainwindow.cpp" line="1081"/>
++        <location filename="../src/mainwindow.cpp" line="1082"/>
+         <source>Please try again in %1 minutes.</source>
+         <translation>%1 ᠮᠢᠨᠦ᠋ᠲ᠎ᠦᠨ ᠳᠠᠷᠠᠭ᠎ᠠ ᠳᠠᠬᠢᠵᠤ ᠳᠤᠷᠱᠢᠭᠠᠷᠠᠢ.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1230"/>
+-        <location filename="../src/mainwindow.cpp" line="1302"/>
+-        <location filename="../src/mainwindow.cpp" line="1303"/>
++        <location filename="../src/mainwindow.cpp" line="1015"/>
++        <location filename="../src/mainwindow.cpp" line="1093"/>
++        <location filename="../src/mainwindow.cpp" line="1094"/>
+         <source>Please try again in %1 seconds.</source>
+         <translation>%1 ᠮᠢᠨᠦ᠋ᠲ᠎ᠦᠨ ᠳᠠᠷᠠᠭ᠎ᠠ ᠳᠠᠬᠢᠵᠤ ᠳᠤᠷᠱᠢᠭᠠᠷᠠᠢ.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1240"/>
+-        <location filename="../src/mainwindow.cpp" line="1241"/>
+-        <location filename="../src/mainwindow.cpp" line="1311"/>
+-        <location filename="../src/mainwindow.cpp" line="1312"/>
++        <location filename="../src/mainwindow.cpp" line="1026"/>
++        <location filename="../src/mainwindow.cpp" line="1027"/>
++        <location filename="../src/mainwindow.cpp" line="1104"/>
++        <location filename="../src/mainwindow.cpp" line="1105"/>
+         <source>Account locked permanently.</source>
+         <translation>ᠳᠠᠩᠰᠠ ᠨᠢᠭᠡᠨᠳᠡ ᠦᠨᠢᠳᠡ ᠤᠨᠢᠰᠤᠯᠠᠭᠳᠠᠪᠠ.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="834"/>
+-        <location filename="../src/mainwindow.cpp" line="835"/>
++        <location filename="../src/mainwindow.cpp" line="688"/>
++        <location filename="../src/mainwindow.cpp" line="689"/>
+         <source>Password cannot be empty</source>
+         <translation>ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠬᠤᠭᠤᠰᠤᠨ ᠪᠠᠢᠵᠤ ᠪᠤᠯᠬᠤ ᠦᠬᠡᠢ</translation>
+     </message>
+@@ -221,8 +228,8 @@
+         <translation type="vanished">无法验证%1,请输入密码.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="242"/>
+-        <location filename="../src/mainwindow.cpp" line="246"/>
++        <location filename="../src/mainwindow.cpp" line="1558"/>
++        <location filename="../src/mainwindow.cpp" line="1562"/>
+         <source>Failed to verify %1, you still have %2 verification opportunities</source>
+         <translation>%1᠎ᠶᠢᠨ/᠎ᠦᠨ ᠰᠢᠯᠭᠠᠨ ᠪᠠᠢᠴᠠᠭᠠᠯᠳᠠ ᠢᠯᠠᠭᠳᠠᠪᠠ ᠂ ᠲᠠ ᠪᠠᠰᠠ%2 ᠤᠳᠠᠭᠠᠨ᠎ᠤ ᠳᠤᠷᠱᠢᠬᠤ ᠵᠠᠪᠱᠢᠶᠠᠨ ᠲᠠᠢ</translation>
+     </message>
+@@ -231,42 +238,42 @@
+         <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="731"/>
++        <location filename="../src/mainwindow.cpp" line="582"/>
+         <source>Password: </source>
+         <translation>ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋᠄ </translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="335"/>
++        <location filename="../src/mainwindow.cpp" line="165"/>
+         <source>Please enter your password or enroll your fingerprint </source>
+         <translation>ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠪᠤᠶᠤ ᠬᠤᠷᠤᠭᠤᠨ ᠤ᠋ ᠤᠷᠤᠮ ᠵᠢᠨᠨ ᠤᠷᠤᠭᠤᠯᠤᠭᠠᠷᠠᠢ </translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="259"/>
++        <location filename="../src/mainwindow.cpp" line="1575"/>
+         <source>Abnormal network</source>
+         <translation>ᠲᠤᠷ ᠰᠦᠯᠵᠢᠶ᠎ᠡ ᠬᠡᠪ ᠤ᠋ᠨ ᠪᠤᠰᠤ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="665"/>
++        <location filename="../src/mainwindow.cpp" line="517"/>
+         <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
+         <translation>ᠳᠤᠰ ᠤᠳᠠᠭᠠᠨ ᠤ᠋ ᠠᠵᠢᠯᠯᠠᠬᠤᠢ ᠵᠢᠨ ᠬᠠᠮᠢᠶᠠᠷᠤᠭᠴᠢ ᠵᠢᠨ ᠡᠷᠬᠡ ᠤᠯᠭᠤᠯᠳᠠ ᠪᠡᠷ ᠰᠠᠶᠢ ᠦᠷᠬᠦᠯᠵᠢᠯᠡᠨ ᠬᠡᠷᠡᠭᠵᠢᠬᠦᠯᠦᠨ᠎ᠡ᠂ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠵᠢᠨᠨ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠳᠤᠰ ᠠᠵᠢᠯᠯᠠᠬᠤᠢ ᠵᠢ ᠵᠦᠪᠰᠢᠶᠡᠷᠡᠭᠡᠷᠡᠢ.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="733"/>
++        <location filename="../src/mainwindow.cpp" line="584"/>
+         <source>_Password: </source>
+         <translation>ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋: </translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="735"/>
++        <location filename="../src/mainwindow.cpp" line="586"/>
+         <source>_Password:</source>
+         <translation>ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋:</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="850"/>
++        <location filename="../src/mainwindow.cpp" line="704"/>
+         <source>Authentication failed, please try again.</source>
+         <translation>ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠵᠤ ᠴᠢᠳᠠᠭᠰᠠᠨ ᠦᠬᠡᠢ᠂ ᠳᠠᠬᠢᠵᠤ ᠳᠤᠷᠰᠢᠭᠠᠷᠠᠢ.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="779"/>
++        <location filename="../src/mainwindow.cpp" line="635"/>
+         <source>days left</source>
+         <translation>ᠡᠳᠦᠷ ᠤ᠋ᠨ ᠳᠠᠷᠠᠭ᠎ᠠ ᠤᠨᠢᠰᠤ ᠳᠠᠢᠯᠤᠨ᠎ᠠ</translation>
+     </message>
+@@ -279,16 +286,16 @@
+         <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="226"/>
+-        <location filename="../src/mainwindow.cpp" line="1415"/>
+-        <location filename="../src/mainwindow.cpp" line="1417"/>
++        <location filename="../src/mainwindow.cpp" line="1243"/>
++        <location filename="../src/mainwindow.cpp" line="1246"/>
++        <location filename="../src/mainwindow.cpp" line="1539"/>
+         <source>Failed to verify %1, please enter password to unlock</source>
+         <translation>%1᠎ᠶᠢ/᠎ᠢ ᠪᠠᠳᠤᠯᠭᠠᠵᠢᠭᠤᠯᠬᠤ ᠠᠷᠭ᠎ᠠ ᠦᠬᠡᠢ ᠂ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="231"/>
+-        <location filename="../src/mainwindow.cpp" line="233"/>
+-        <location filename="../src/mainwindow.cpp" line="1419"/>
++        <location filename="../src/mainwindow.cpp" line="1249"/>
++        <location filename="../src/mainwindow.cpp" line="1545"/>
++        <location filename="../src/mainwindow.cpp" line="1548"/>
+         <source>Unable to verify %1, please enter password to unlock</source>
+         <translation>%1᠎ᠶᠢ/᠎ᠢ ᠪᠠᠳᠤᠯᠭᠠᠵᠢᠭᠤᠯᠬᠤ ᠠᠷᠭ᠎ᠠ ᠦᠬᠡᠢ ᠂ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
+     </message>
+@@ -297,86 +304,121 @@
+         <translation type="vanished">网络异常</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="671"/>
++        <location filename="../src/mainwindow.cpp" line="522"/>
+         <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
+         <translation>ᠨᠢᠭᠡ ᠫᠡᠷᠦᠭᠷᠡᠮ ᠶᠠᠭ ᠨᠢᠭᠡ ᠤᠨᠠᠴᠠ ᠡᠷᠬᠡ ᠬᠡᠷᠡᠭᠰᠡᠬᠦ ᠬᠦᠳᠡᠯᠬᠡᠬᠡᠨ ᠢ᠋ ᠬᠡᠷᠡᠭᠵᠢᠬᠦᠯᠬᠦ ᠪᠡᠷ ᠳᠤᠷᠰᠢᠵᠤ ᠪᠠᠢᠨ᠎ᠠ᠂ ᠳᠤᠰ ᠬᠦᠳᠡᠯᠬᠡᠬᠡᠨ ᠢ᠋ ᠬᠦᠢᠴᠡᠳᠬᠡᠬᠦ ᠡᠷᠬᠡ ᠤᠯᠭᠤᠬᠤ ᠵᠢ ᠱᠠᠭᠠᠷᠳᠠᠵᠤ ᠪᠠᠢᠨ᠎ᠠ.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="108"/>
+-        <location filename="../src/mainwindow.cpp" line="729"/>
++        <location filename="../src/mainwindow.cpp" line="88"/>
++        <location filename="../src/mainwindow.cpp" line="580"/>
+         <source>Input Password</source>
+         <translation>ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠬᠤ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="105"/>
++        <location filename="../src/mainwindow.cpp" line="85"/>
+         <source>Insert the ukey into the USB port</source>
+         <translation>ᠠᠮᠤᠷ ᠲᠦᠪᠰᠢᠨ ᠦ ᠨᠢᠭᠤᠴᠠ ᠶᠢ USB ᠦᠵᠦᠭᠦᠷ ᠲᠦ ᠬᠠᠳᠬᠤᠵᠤ ᠣᠷᠣᠭᠠᠷᠠᠢ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="107"/>
++        <location filename="../src/mainwindow.cpp" line="87"/>
+         <source>Enter the ukey password</source>
+         <translation>ᠠᠮᠤᠷ ᠲᠦᠪᠰᠢᠨ ᠨᠢᠭᠤᠴᠠ ᠨᠣᠮᠧᠷ ᠢ ᠣᠷᠣᠭᠤᠯᠤᠨ᠎ᠠ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="783"/>
++        <location filename="../src/mainwindow.cpp" line="93"/>
++        <source>Close</source>
++        <translation>ᠬᠠᠭᠠᠬᠤ</translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1261"/>
++        <source>Facial recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1264"/>
++        <source>Fingerprint recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1267"/>
++        <source>Voiceprint recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1270"/>
++        <source>Finger veins recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1273"/>
++        <source>Iris recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1276"/>
++        <source>Use the bound wechat scanning code to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1579"/>
++        <source>Acquisition failure</source>
++        <translation>ᠢᠯᠠᠭᠳᠠᠯ ᠢ ᠣᠯᠪᠠ ᠃</translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="638"/>
+         <source>hours left</source>
+         <translation>ᠨᠢᠭᠡ ᠴᠠᠭ ᠤ᠋ᠨ ᠳᠠᠷᠠᠭ᠎ᠠ ᠤᠨᠢᠰᠤ ᠳᠠᠢᠯᠤᠨ᠎ᠠ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="787"/>
++        <location filename="../src/mainwindow.cpp" line="641"/>
+         <source>minutes left</source>
+         <translation>ᠮᠢᠨᠦ᠋ᠲ ᠤ᠋ᠨ ᠳᠠᠷᠠᠭ᠎ᠠ ᠤᠨᠢᠰᠤ ᠳᠠᠢᠯᠤᠨ᠎ᠠ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="791"/>
++        <location filename="../src/mainwindow.cpp" line="644"/>
+         <source>seconds left</source>
+         <translation>ᠰᠸᠺᠦᠨ᠋ᠲ ᠤ᠋ᠨ ᠳᠠᠷᠠᠭ᠎ᠠ ᠤᠨᠢᠰᠤ ᠳᠠᠢᠯᠤᠨ᠎ᠠ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="880"/>
+-        <location filename="../src/mainwindow.cpp" line="888"/>
++        <location filename="../src/mainwindow.cpp" line="734"/>
++        <location filename="../src/mainwindow.cpp" line="742"/>
++        <location filename="../src/mainwindow.cpp" line="1258"/>
+         <source>Input your password to authentication</source>
+         <translation>ᠨᠢᠭᠤᠴᠠ ᠨᠣᠮᠧᠷ ᠣᠷᠣᠭᠤᠯᠬᠤ ᠳᠤ ᠡᠷᠬᠡ ᠣᠯᠭᠣᠨ᠎ᠠ ᠃</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1434"/>
+         <source>Verify face recognition or enter password to unlock</source>
+-        <translation>ᠨᠢᠭᠤᠷ ᠱᠢᠷᠪᠢᠵᠤ ᠪᠠᠳᠤᠯᠭᠠᠵᠢᠭᠤᠯᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
++        <translation type="vanished">ᠨᠢᠭᠤᠷ ᠱᠢᠷᠪᠢᠵᠤ ᠪᠠᠳᠤᠯᠭᠠᠵᠢᠭᠤᠯᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1439"/>
+         <source>Press fingerprint or enter password to unlock</source>
+-        <translation>ᠬᠤᠷᠤᠭᠤᠨ᠎ᠤ ᠤᠷᠤᠮ ᠳᠠᠷᠤᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
++        <translation type="vanished">ᠬᠤᠷᠤᠭᠤᠨ᠎ᠤ ᠤᠷᠤᠮ ᠳᠠᠷᠤᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1444"/>
+         <source>Verify voiceprint or enter password to unlock</source>
+-        <translation>ᠳᠠᠭᠤ᠎ᠪᠠᠷ ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
++        <translation type="vanished">ᠳᠠᠭᠤ᠎ᠪᠠᠷ ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1449"/>
+         <source>Verify finger vein or enter password to unlock</source>
+-        <translation>ᠬᠤᠷᠤᠭᠤᠨ᠎ᠤ ᠨᠠᠮᠵᠢᠭᠤᠨ ᠰᠤᠳᠠᠯ᠎ᠢᠶᠠᠷ ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
++        <translation type="vanished">ᠬᠤᠷᠤᠭᠤᠨ᠎ᠤ ᠨᠠᠮᠵᠢᠭᠤᠨ ᠰᠤᠳᠠᠯ᠎ᠢᠶᠠᠷ ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1454"/>
+         <source>Verify iris or enter password to unlock</source>
+-        <translation>ᠰᠤᠯᠤᠩᠭ᠎ᠠ ᠪᠦᠷᠬᠦᠪᠴᠢ᠎ᠶᠢ ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
++        <translation type="vanished">ᠰᠤᠯᠤᠩᠭ᠎ᠠ ᠪᠦᠷᠬᠦᠪᠴᠢ᠎ᠶᠢ ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1459"/>
+         <source>Use the bound wechat scanning code or enter the password to unlock</source>
+-        <translation>ᠤᠶᠠᠭᠰᠠᠨ ᠸᠢᠴᠠᠲ᠎ᠢᠶᠠᠷ ᠺᠤᠳ᠋ ᠱᠢᠷᠪᠢᠬᠦ᠌ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
++        <translation type="vanished">ᠤᠶᠠᠭᠰᠠᠨ ᠸᠢᠴᠠᠲ᠎ᠢᠶᠠᠷ ᠺᠤᠳ᠋ ᠱᠢᠷᠪᠢᠬᠦ᠌ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
+     </message>
+     <message>
+         <source>Use the bound wechat scanning code or enter the password to log in</source>
+         <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="779"/>
+-        <location filename="../src/mainwindow.cpp" line="783"/>
+-        <location filename="../src/mainwindow.cpp" line="787"/>
+-        <location filename="../src/mainwindow.cpp" line="791"/>
++        <location filename="../src/mainwindow.cpp" line="635"/>
++        <location filename="../src/mainwindow.cpp" line="638"/>
++        <location filename="../src/mainwindow.cpp" line="641"/>
++        <location filename="../src/mainwindow.cpp" line="644"/>
+         <source>Account locked,</source>
+         <translation>ᠳᠠᠨᠭᠰᠠ ᠵᠢ ᠨᠢᠬᠡᠨᠳᠡ ᠤᠨᠢᠰᠤᠯᠠᠪᠠ</translation>
+     </message>
+@@ -388,17 +430,17 @@
+ <context>
+     <name>PolkitListener</name>
+     <message>
+-        <location filename="../src/PolkitListener.cpp" line="88"/>
++        <location filename="../src/PolkitListener.cpp" line="86"/>
+         <source>Another client is already authenticating, please try again later.</source>
+         <translation>ᠦᠬᠡᠷ᠎ᠡ ᠨᠢᠭᠡ ᠬᠡᠷᠡᠭᠯᠡᠭᠴᠢ ᠵᠢᠨ ᠦᠵᠦᠬᠦᠷᠯᠢᠭ ᠢ᠋ ᠶᠠᠭ ᠨᠤᠳᠠᠯᠠᠵᠤ ᠪᠠᠢᠨ᠎ᠠ᠂ ᠤᠳᠠᠰᠬᠢᠭᠠᠳ ᠳᠠᠬᠢᠨ ᠳᠤᠷᠰᠢᠭᠠᠷᠠᠢ.</translation>
+     </message>
+     <message>
+-        <location filename="../src/PolkitListener.cpp" line="265"/>
++        <location filename="../src/PolkitListener.cpp" line="253"/>
+         <source>Authentication failure, please try again.</source>
+         <translation>ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠵᠤ ᠴᠢᠳᠠᠭᠰᠠᠨ ᠦᠬᠡᠢ᠂ ᠳᠠᠬᠢᠵᠤ ᠳᠤᠷᠰᠢᠭᠠᠷᠠᠢ.</translation>
+     </message>
+     <message>
+-        <location filename="../src/PolkitListener.cpp" line="272"/>
++        <location filename="../src/PolkitListener.cpp" line="259"/>
+         <source>Password input error!</source>
+         <translation>ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠢ᠋ ᠪᠤᠷᠤᠭᠤ ᠤᠷᠤᠭᠤᠯᠪᠠ!</translation>
+     </message>
+diff --git a/polkit-agent/i18n_ts/pt.ts b/polkit-agent/i18n_ts/pt.ts
+index 155dec7..90bc880 100644
+--- a/polkit-agent/i18n_ts/pt.ts
++++ b/polkit-agent/i18n_ts/pt.ts
+@@ -15,6 +15,13 @@
+         <translation type="obsolete">Formato</translation>
+     </message>
+ </context>
++<context>
++    <name>FullScreenBackground</name>
++    <message>
++        <source>Authentication</source>
++        <translation type="unfinished">Autenticação</translation>
++    </message>
++</context>
+ <context>
+     <name>MainWindow</name>
+     <message>
+@@ -59,7 +66,7 @@
+     </message>
+     <message>
+         <source>Authentication</source>
+-        <translation>Autenticação</translation>
++        <translation type="vanished">Autenticação</translation>
+     </message>
+     <message>
+         <source>in authentication, please wait...</source>
+@@ -126,75 +133,83 @@
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <source>Verify face recognition or enter password to unlock</source>
++        <source>Failed to verify %1, you still have %2 verification opportunities</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <source>Press fingerprint or enter password to unlock</source>
++        <source>Input Password</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <source>Verify voiceprint or enter password to unlock</source>
++        <source>Failed to verify %1, please enter password to unlock</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <source>Verify finger vein or enter password to unlock</source>
++        <source>Unable to verify %1, please enter password to unlock</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <source>Verify iris or enter password to unlock</source>
++        <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <source>Failed to verify %1, you still have %2 verification opportunities</source>
++        <source>_Password:</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <source>Input Password</source>
++        <source>_Password: </source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <source>Use the bound wechat scanning code or enter the password to unlock</source>
++        <source>Abnormal network</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <source>Failed to verify %1, please enter password to unlock</source>
++        <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <source>Unable to verify %1, please enter password to unlock</source>
++        <source>Insert the ukey into the USB port</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
++        <source>Enter the ukey password</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <source>_Password:</source>
++        <source>Input your password to authentication</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <source>_Password: </source>
++        <source>Close</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <source>Abnormal network</source>
++        <source>Acquisition failure</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
++        <source>Facial recognition to authorization</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <source>Insert the ukey into the USB port</source>
++        <source>Fingerprint recognition to authorization</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <source>Enter the ukey password</source>
++        <source>Voiceprint recognition to authorization</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <source>Input your password to authentication</source>
++        <source>Finger veins recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <source>Iris recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <source>Use the bound wechat scanning code to authorization</source>
+         <translation type="unfinished"></translation>
+     </message>
+ </context>
+diff --git a/polkit-agent/i18n_ts/ru.ts b/polkit-agent/i18n_ts/ru.ts
+index c75c155..e8c5d91 100644
+--- a/polkit-agent/i18n_ts/ru.ts
++++ b/polkit-agent/i18n_ts/ru.ts
+@@ -15,6 +15,13 @@
+         <translation type="obsolete">форма</translation>
+     </message>
+ </context>
++<context>
++    <name>FullScreenBackground</name>
++    <message>
++        <source>Authentication</source>
++        <translation type="unfinished">Аутентификация</translation>
++    </message>
++</context>
+ <context>
+     <name>MainWindow</name>
+     <message>
+@@ -59,7 +66,7 @@
+     </message>
+     <message>
+         <source>Authentication</source>
+-        <translation>Аутентификация</translation>
++        <translation type="vanished">Аутентификация</translation>
+     </message>
+     <message>
+         <source>in authentication, please wait...</source>
+@@ -126,75 +133,83 @@
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <source>Verify face recognition or enter password to unlock</source>
++        <source>Failed to verify %1, you still have %2 verification opportunities</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <source>Press fingerprint or enter password to unlock</source>
++        <source>Input Password</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <source>Verify voiceprint or enter password to unlock</source>
++        <source>Failed to verify %1, please enter password to unlock</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <source>Verify finger vein or enter password to unlock</source>
++        <source>Unable to verify %1, please enter password to unlock</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <source>Verify iris or enter password to unlock</source>
++        <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <source>Failed to verify %1, you still have %2 verification opportunities</source>
++        <source>_Password:</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <source>Input Password</source>
++        <source>_Password: </source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <source>Use the bound wechat scanning code or enter the password to unlock</source>
++        <source>Abnormal network</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <source>Failed to verify %1, please enter password to unlock</source>
++        <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <source>Unable to verify %1, please enter password to unlock</source>
++        <source>Insert the ukey into the USB port</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
++        <source>Enter the ukey password</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <source>_Password:</source>
++        <source>Input your password to authentication</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <source>_Password: </source>
++        <source>Close</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <source>Abnormal network</source>
++        <source>Acquisition failure</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
++        <source>Facial recognition to authorization</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <source>Insert the ukey into the USB port</source>
++        <source>Fingerprint recognition to authorization</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <source>Enter the ukey password</source>
++        <source>Voiceprint recognition to authorization</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <source>Input your password to authentication</source>
++        <source>Finger veins recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <source>Iris recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <source>Use the bound wechat scanning code to authorization</source>
+         <translation type="unfinished"></translation>
+     </message>
+ </context>
+diff --git a/polkit-agent/i18n_ts/tr.ts b/polkit-agent/i18n_ts/tr.ts
+index f59c7a3..89b19dd 100644
+--- a/polkit-agent/i18n_ts/tr.ts
++++ b/polkit-agent/i18n_ts/tr.ts
+@@ -31,160 +31,178 @@
+         <translation type="obsolete">Ses İzi</translation>
+     </message>
+ </context>
++<context>
++    <name>FullScreenBackground</name>
++    <message>
++        <location filename="../src/fullscreenbackground.cpp" line="75"/>
++        <location filename="../src/fullscreenbackground.cpp" line="104"/>
++        <source>Authentication</source>
++        <translation type="unfinished">Kimlik Doğrulama</translation>
++    </message>
++</context>
+ <context>
+     <name>MainWindow</name>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="66"/>
+         <source>Authentication</source>
+-        <translation>Kimlik Doğrulama</translation>
++        <translation type="vanished">Kimlik Doğrulama</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="226"/>
+-        <location filename="../src/mainwindow.cpp" line="1415"/>
+-        <location filename="../src/mainwindow.cpp" line="1417"/>
++        <location filename="../src/mainwindow.cpp" line="1243"/>
++        <location filename="../src/mainwindow.cpp" line="1246"/>
++        <location filename="../src/mainwindow.cpp" line="1539"/>
+         <source>Failed to verify %1, please enter password to unlock</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="231"/>
+-        <location filename="../src/mainwindow.cpp" line="233"/>
+-        <location filename="../src/mainwindow.cpp" line="1419"/>
++        <location filename="../src/mainwindow.cpp" line="1249"/>
++        <location filename="../src/mainwindow.cpp" line="1545"/>
++        <location filename="../src/mainwindow.cpp" line="1548"/>
+         <source>Unable to verify %1, please enter password to unlock</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="242"/>
+-        <location filename="../src/mainwindow.cpp" line="246"/>
++        <location filename="../src/mainwindow.cpp" line="1558"/>
++        <location filename="../src/mainwindow.cpp" line="1562"/>
+         <source>Failed to verify %1, you still have %2 verification opportunities</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="259"/>
++        <location filename="../src/mainwindow.cpp" line="1575"/>
+         <source>Abnormal network</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="665"/>
++        <location filename="../src/mainwindow.cpp" line="517"/>
+         <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="671"/>
++        <location filename="../src/mainwindow.cpp" line="522"/>
+         <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="108"/>
+-        <location filename="../src/mainwindow.cpp" line="729"/>
++        <location filename="../src/mainwindow.cpp" line="88"/>
++        <location filename="../src/mainwindow.cpp" line="580"/>
+         <source>Input Password</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="105"/>
++        <location filename="../src/mainwindow.cpp" line="85"/>
+         <source>Insert the ukey into the USB port</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="107"/>
++        <location filename="../src/mainwindow.cpp" line="87"/>
+         <source>Enter the ukey password</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="779"/>
+-        <location filename="../src/mainwindow.cpp" line="783"/>
+-        <location filename="../src/mainwindow.cpp" line="787"/>
+-        <location filename="../src/mainwindow.cpp" line="791"/>
+-        <source>Account locked,</source>
++        <location filename="../src/mainwindow.cpp" line="93"/>
++        <source>Close</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="779"/>
+-        <source>days left</source>
++        <location filename="../src/mainwindow.cpp" line="1261"/>
++        <source>Facial recognition to authorization</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="783"/>
+-        <source>hours left</source>
++        <location filename="../src/mainwindow.cpp" line="1264"/>
++        <source>Fingerprint recognition to authorization</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="787"/>
+-        <source>minutes left</source>
++        <location filename="../src/mainwindow.cpp" line="1267"/>
++        <source>Voiceprint recognition to authorization</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="791"/>
+-        <source>seconds left</source>
++        <location filename="../src/mainwindow.cpp" line="1270"/>
++        <source>Finger veins recognition to authorization</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="834"/>
+-        <location filename="../src/mainwindow.cpp" line="835"/>
+-        <source>Password cannot be empty</source>
++        <location filename="../src/mainwindow.cpp" line="1273"/>
++        <source>Iris recognition to authorization</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="880"/>
+-        <location filename="../src/mainwindow.cpp" line="888"/>
+-        <source>Input your password to authentication</source>
++        <location filename="../src/mainwindow.cpp" line="1276"/>
++        <source>Use the bound wechat scanning code to authorization</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1079"/>
+-        <location filename="../src/mainwindow.cpp" line="1183"/>
+-        <source>Use password</source>
++        <location filename="../src/mainwindow.cpp" line="1579"/>
++        <source>Acquisition failure</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1219"/>
+-        <location filename="../src/mainwindow.cpp" line="1292"/>
+-        <location filename="../src/mainwindow.cpp" line="1293"/>
+-        <source>Please try again in %1 minutes.</source>
++        <location filename="../src/mainwindow.cpp" line="635"/>
++        <location filename="../src/mainwindow.cpp" line="638"/>
++        <location filename="../src/mainwindow.cpp" line="641"/>
++        <location filename="../src/mainwindow.cpp" line="644"/>
++        <source>Account locked,</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1230"/>
+-        <location filename="../src/mainwindow.cpp" line="1302"/>
+-        <location filename="../src/mainwindow.cpp" line="1303"/>
+-        <source>Please try again in %1 seconds.</source>
++        <location filename="../src/mainwindow.cpp" line="635"/>
++        <source>days left</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1240"/>
+-        <location filename="../src/mainwindow.cpp" line="1241"/>
+-        <location filename="../src/mainwindow.cpp" line="1311"/>
+-        <location filename="../src/mainwindow.cpp" line="1312"/>
+-        <source>Account locked permanently.</source>
++        <location filename="../src/mainwindow.cpp" line="638"/>
++        <source>hours left</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="641"/>
++        <source>minutes left</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="644"/>
++        <source>seconds left</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1434"/>
+-        <source>Verify face recognition or enter password to unlock</source>
++        <location filename="../src/mainwindow.cpp" line="688"/>
++        <location filename="../src/mainwindow.cpp" line="689"/>
++        <source>Password cannot be empty</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1439"/>
+-        <source>Press fingerprint or enter password to unlock</source>
++        <location filename="../src/mainwindow.cpp" line="734"/>
++        <location filename="../src/mainwindow.cpp" line="742"/>
++        <location filename="../src/mainwindow.cpp" line="1258"/>
++        <source>Input your password to authentication</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1444"/>
+-        <source>Verify voiceprint or enter password to unlock</source>
++        <location filename="../src/mainwindow.cpp" line="876"/>
++        <source>Use password</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1449"/>
+-        <source>Verify finger vein or enter password to unlock</source>
++        <location filename="../src/mainwindow.cpp" line="1003"/>
++        <location filename="../src/mainwindow.cpp" line="1081"/>
++        <location filename="../src/mainwindow.cpp" line="1082"/>
++        <source>Please try again in %1 minutes.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1454"/>
+-        <source>Verify iris or enter password to unlock</source>
++        <location filename="../src/mainwindow.cpp" line="1015"/>
++        <location filename="../src/mainwindow.cpp" line="1093"/>
++        <location filename="../src/mainwindow.cpp" line="1094"/>
++        <source>Please try again in %1 seconds.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1459"/>
+-        <source>Use the bound wechat scanning code or enter the password to unlock</source>
++        <location filename="../src/mainwindow.cpp" line="1026"/>
++        <location filename="../src/mainwindow.cpp" line="1027"/>
++        <location filename="../src/mainwindow.cpp" line="1104"/>
++        <location filename="../src/mainwindow.cpp" line="1105"/>
++        <source>Account locked permanently.</source>
+         <translation type="unfinished"></translation>
+     </message>
+     <message>
+@@ -205,9 +223,9 @@
+         <translation type="obsolete">Parola</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="409"/>
+-        <location filename="../src/mainwindow.cpp" line="1075"/>
+-        <location filename="../src/mainwindow.cpp" line="1143"/>
++        <location filename="../src/mainwindow.ui" line="398"/>
++        <location filename="../src/mainwindow.cpp" line="874"/>
++        <location filename="../src/mainwindow.cpp" line="943"/>
+         <source>Biometric</source>
+         <translation>Biyometrik</translation>
+     </message>
+@@ -256,19 +274,19 @@
+         <translation type="vanished">Polkit.caller-pid:</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="441"/>
+-        <location filename="../src/mainwindow.cpp" line="1077"/>
++        <location filename="../src/mainwindow.ui" line="436"/>
++        <location filename="../src/mainwindow.cpp" line="875"/>
+         <source>Cancel</source>
+         <translation>İptal</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="460"/>
+-        <location filename="../src/mainwindow.cpp" line="1073"/>
++        <location filename="../src/mainwindow.ui" line="461"/>
++        <location filename="../src/mainwindow.cpp" line="873"/>
+         <source>Authenticate</source>
+         <translation>Kimlik Doğrulaması</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="480"/>
++        <location filename="../src/mainwindow.ui" line="493"/>
+         <source>use password</source>
+         <translation type="unfinished"></translation>
+     </message>
+@@ -277,7 +295,7 @@
+         <translation type="obsolete">Kimlik Doğrulaması</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="335"/>
++        <location filename="../src/mainwindow.cpp" line="165"/>
+         <source>Please enter your password or enroll your fingerprint </source>
+         <translation type="unfinished"></translation>
+     </message>
+@@ -290,22 +308,22 @@
+         <translation type="vanished">Bir uygulama, ayrıcalıklar gerektiren bir eylem gerçekleştirmeye çalışıyor. Bu işlemi gerçekleştirmek için kimlik doğrulaması gerekiyor.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="731"/>
++        <location filename="../src/mainwindow.cpp" line="582"/>
+         <source>Password: </source>
+         <translation type="unfinished">Parola: </translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="733"/>
++        <location filename="../src/mainwindow.cpp" line="584"/>
+         <source>_Password: </source>
+         <translation type="unfinished">_Parola: </translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="735"/>
++        <location filename="../src/mainwindow.cpp" line="586"/>
+         <source>_Password:</source>
+         <translation type="unfinished">_Parola:</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="850"/>
++        <location filename="../src/mainwindow.cpp" line="704"/>
+         <source>Authentication failed, please try again.</source>
+         <translation>Kimlik doğrulama başarısız, lütfen tekrar deneyin.</translation>
+     </message>
+@@ -317,17 +335,17 @@
+ <context>
+     <name>PolkitListener</name>
+     <message>
+-        <location filename="../src/PolkitListener.cpp" line="88"/>
++        <location filename="../src/PolkitListener.cpp" line="86"/>
+         <source>Another client is already authenticating, please try again later.</source>
+         <translation>Başka bir hesap zaten kimlik doğrulaması yapıyor, lütfen daha sonra tekrar deneyin.</translation>
+     </message>
+     <message>
+-        <location filename="../src/PolkitListener.cpp" line="265"/>
++        <location filename="../src/PolkitListener.cpp" line="253"/>
+         <source>Authentication failure, please try again.</source>
+         <translation>Kimlik doğrulama hatalı, lütfen tekrar deneyin.</translation>
+     </message>
+     <message>
+-        <location filename="../src/PolkitListener.cpp" line="272"/>
++        <location filename="../src/PolkitListener.cpp" line="259"/>
+         <source>Password input error!</source>
+         <translation type="unfinished"></translation>
+     </message>
+diff --git a/polkit-agent/i18n_ts/ug.ts b/polkit-agent/i18n_ts/ug.ts
+index 58164c0..8614ae4 100644
+--- a/polkit-agent/i18n_ts/ug.ts
++++ b/polkit-agent/i18n_ts/ug.ts
+@@ -51,6 +51,15 @@
+         <translation type="vanished">二维码</translation>
+     </message>
+ </context>
++<context>
++    <name>FullScreenBackground</name>
++    <message>
++        <location filename="../src/fullscreenbackground.cpp" line="75"/>
++        <location filename="../src/fullscreenbackground.cpp" line="104"/>
++        <source>Authentication</source>
++        <translation type="unfinished">راستىنى دەلىللەش</translation>
++    </message>
++</context>
+ <context>
+     <name>LoginOptionsWidget</name>
+     <message>
+@@ -65,9 +74,8 @@
+ <context>
+     <name>MainWindow</name>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="66"/>
+         <source>Authentication</source>
+-        <translation>راستىنى دەلىللەش</translation>
++        <translation type="vanished">راستىنى دەلىللەش</translation>
+     </message>
+     <message>
+         <source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
+@@ -91,14 +99,14 @@
+         <translation type="vanished">密码</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="409"/>
+-        <location filename="../src/mainwindow.cpp" line="1075"/>
+-        <location filename="../src/mainwindow.cpp" line="1143"/>
++        <location filename="../src/mainwindow.ui" line="398"/>
++        <location filename="../src/mainwindow.cpp" line="874"/>
++        <location filename="../src/mainwindow.cpp" line="943"/>
+         <source>Biometric</source>
+         <translation>بىئولەگىيەلىك ئالاھىدىلىكنى ئىشلىتىش</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="480"/>
++        <location filename="../src/mainwindow.ui" line="493"/>
+         <source>use password</source>
+         <translation>مەخپىي نومۇر ئىشلىتىش</translation>
+     </message>
+@@ -147,20 +155,19 @@
+         <translation type="vanished">Polkit.caller-pid:</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="441"/>
+-        <location filename="../src/mainwindow.cpp" line="1077"/>
++        <location filename="../src/mainwindow.ui" line="436"/>
++        <location filename="../src/mainwindow.cpp" line="875"/>
+         <source>Cancel</source>
+         <translation>ئەمەلدىن قالدۇرۇش</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="460"/>
+-        <location filename="../src/mainwindow.cpp" line="1073"/>
++        <location filename="../src/mainwindow.ui" line="461"/>
++        <location filename="../src/mainwindow.cpp" line="873"/>
+         <source>Authenticate</source>
+         <translation>ھوقۇق بېرىش</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1079"/>
+-        <location filename="../src/mainwindow.cpp" line="1183"/>
++        <location filename="../src/mainwindow.cpp" line="876"/>
+         <source>Use password</source>
+         <translation>مەخپىي نومۇر ئىشلىتىش ئارقىلىق دەلىللەش</translation>
+     </message>
+@@ -185,30 +192,30 @@
+         <translation type="vanished">认证中,请稍等...</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1219"/>
+-        <location filename="../src/mainwindow.cpp" line="1292"/>
+-        <location filename="../src/mainwindow.cpp" line="1293"/>
++        <location filename="../src/mainwindow.cpp" line="1003"/>
++        <location filename="../src/mainwindow.cpp" line="1081"/>
++        <location filename="../src/mainwindow.cpp" line="1082"/>
+         <source>Please try again in %1 minutes.</source>
+         <translation>٪1 مىنۇت ئىچىدە قايتا سىناپ بېقىڭ.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1230"/>
+-        <location filename="../src/mainwindow.cpp" line="1302"/>
+-        <location filename="../src/mainwindow.cpp" line="1303"/>
++        <location filename="../src/mainwindow.cpp" line="1015"/>
++        <location filename="../src/mainwindow.cpp" line="1093"/>
++        <location filename="../src/mainwindow.cpp" line="1094"/>
+         <source>Please try again in %1 seconds.</source>
+         <translation>٪1 سېكۇنت ئىچىدە قايتا سىناپ بېقىڭ.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1240"/>
+-        <location filename="../src/mainwindow.cpp" line="1241"/>
+-        <location filename="../src/mainwindow.cpp" line="1311"/>
+-        <location filename="../src/mainwindow.cpp" line="1312"/>
++        <location filename="../src/mainwindow.cpp" line="1026"/>
++        <location filename="../src/mainwindow.cpp" line="1027"/>
++        <location filename="../src/mainwindow.cpp" line="1104"/>
++        <location filename="../src/mainwindow.cpp" line="1105"/>
+         <source>Account locked permanently.</source>
+         <translation>ھېسابات مەڭگۈلۈك قۇلۇپلىنىدۇ.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="834"/>
+-        <location filename="../src/mainwindow.cpp" line="835"/>
++        <location filename="../src/mainwindow.cpp" line="688"/>
++        <location filename="../src/mainwindow.cpp" line="689"/>
+         <source>Password cannot be empty</source>
+         <translation>مەخپىي نومۇرنى بوش قويۇشقا بولمايدۇ</translation>
+     </message>
+@@ -221,8 +228,8 @@
+         <translation type="vanished">无法验证%1,请输入密码.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="242"/>
+-        <location filename="../src/mainwindow.cpp" line="246"/>
++        <location filename="../src/mainwindow.cpp" line="1558"/>
++        <location filename="../src/mainwindow.cpp" line="1562"/>
+         <source>Failed to verify %1, you still have %2 verification opportunities</source>
+         <translation>٪1 نى دەلىللەش مەغلۇپ بولدى، سىزدە يەنىلا ٪2 دەلىللەش پۇرسىتى بار</translation>
+     </message>
+@@ -231,42 +238,42 @@
+         <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="731"/>
++        <location filename="../src/mainwindow.cpp" line="582"/>
+         <source>Password: </source>
+         <translation>مەخپىي نومۇر </translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="335"/>
++        <location filename="../src/mainwindow.cpp" line="165"/>
+         <source>Please enter your password or enroll your fingerprint </source>
+         <translation>مەخپىي نومۇرىڭىزنى كىرگۈزۈڭ ياكى بارماق ئىزىڭىزنى تونۇتۇڭ </translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="259"/>
++        <location filename="../src/mainwindow.cpp" line="1575"/>
+         <source>Abnormal network</source>
+         <translation>بىنورمال تور</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="665"/>
++        <location filename="../src/mainwindow.cpp" line="517"/>
+         <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
+         <translation>بۇ مەشغۇلات باشقۇرغۇچىنىڭ ھوقۇق بېرىشىنى تەلەپ قىلىدۇ.مەخپىي نومۇرنى كىرگۈزۈپ بي قېتىمقى مەشغۇلاتنىڭ ئېلىپ بېرىلىشىغا يول قويۇڭ.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="733"/>
++        <location filename="../src/mainwindow.cpp" line="584"/>
+         <source>_Password: </source>
+         <translation>مەخپىي نومۇر </translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="735"/>
++        <location filename="../src/mainwindow.cpp" line="586"/>
+         <source>_Password:</source>
+         <translation>مەخپىي نومۇر</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="850"/>
++        <location filename="../src/mainwindow.cpp" line="704"/>
+         <source>Authentication failed, please try again.</source>
+         <translation>دەلىللەش مەغلۇپ بولدى، قايتا سىناڭ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="779"/>
++        <location filename="../src/mainwindow.cpp" line="635"/>
+         <source>days left</source>
+         <translation>1 كۈندىن كېيىن سىناب بېقىڭ</translation>
+     </message>
+@@ -279,16 +286,16 @@
+         <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="226"/>
+-        <location filename="../src/mainwindow.cpp" line="1415"/>
+-        <location filename="../src/mainwindow.cpp" line="1417"/>
++        <location filename="../src/mainwindow.cpp" line="1243"/>
++        <location filename="../src/mainwindow.cpp" line="1246"/>
++        <location filename="../src/mainwindow.cpp" line="1539"/>
+         <source>Failed to verify %1, please enter password to unlock</source>
+         <translation>٪1 نى دەلىللەش مەغلۇپ بولدى، مەخپى نۇمۇر كىرگۈزۈڭ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="231"/>
+-        <location filename="../src/mainwindow.cpp" line="233"/>
+-        <location filename="../src/mainwindow.cpp" line="1419"/>
++        <location filename="../src/mainwindow.cpp" line="1249"/>
++        <location filename="../src/mainwindow.cpp" line="1545"/>
++        <location filename="../src/mainwindow.cpp" line="1548"/>
+         <source>Unable to verify %1, please enter password to unlock</source>
+         <translation>٪1 نى دەلىللەشكە ئامالسىز، مەخپىي نومۇرنى كىرگۈزۈپ قۇلۇپنى ئېچىڭ</translation>
+     </message>
+@@ -297,86 +304,121 @@
+         <translation type="vanished">网络异常</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="671"/>
++        <location filename="../src/mainwindow.cpp" line="522"/>
+         <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
+         <translation>بىر پروگرامما ئىمتىياز تەلەپ قىلىدىغان ھەرىكەتنى قىلىشقا ئۇرۇنماقتا. بۇ ھەرىكەتنى ئىجرا قىلىش ئۈچۈن ھوقۇق تەلەپ قىلىدۇ.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="108"/>
+-        <location filename="../src/mainwindow.cpp" line="729"/>
++        <location filename="../src/mainwindow.cpp" line="88"/>
++        <location filename="../src/mainwindow.cpp" line="580"/>
+         <source>Input Password</source>
+         <translation>ئىم كىرگۈزۈش</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="105"/>
++        <location filename="../src/mainwindow.cpp" line="85"/>
+         <source>Insert the ukey into the USB port</source>
+         <translation>ukey نى USB ئېغىزىغا چېتىپ قويۇڭ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="107"/>
++        <location filename="../src/mainwindow.cpp" line="87"/>
+         <source>Enter the ukey password</source>
+         <translation>ukey مەخپىي نومۇرىنى كىرگۈزۈڭ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="783"/>
++        <location filename="../src/mainwindow.cpp" line="93"/>
++        <source>Close</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1261"/>
++        <source>Facial recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1264"/>
++        <source>Fingerprint recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1267"/>
++        <source>Voiceprint recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1270"/>
++        <source>Finger veins recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1273"/>
++        <source>Iris recognition to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1276"/>
++        <source>Use the bound wechat scanning code to authorization</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1579"/>
++        <source>Acquisition failure</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="638"/>
+         <source>hours left</source>
+         <translation>بىر سائەتتىن كېيىن ئېچىلىدۇ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="787"/>
++        <location filename="../src/mainwindow.cpp" line="641"/>
+         <source>minutes left</source>
+         <translation>بىر مىنۇتتىن كېيىن ئېچىلىدۇ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="791"/>
++        <location filename="../src/mainwindow.cpp" line="644"/>
+         <source>seconds left</source>
+         <translation>بىر سېكۇنتتىن كېيىن ئېچىلىدۇ</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="880"/>
+-        <location filename="../src/mainwindow.cpp" line="888"/>
++        <location filename="../src/mainwindow.cpp" line="734"/>
++        <location filename="../src/mainwindow.cpp" line="742"/>
++        <location filename="../src/mainwindow.cpp" line="1258"/>
+         <source>Input your password to authentication</source>
+         <translation>مەخپىي نومۇرنى كىرگۈزۈپ كىملىك دەلىللەش.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1434"/>
+         <source>Verify face recognition or enter password to unlock</source>
+-        <translation>چىراي تونۇشنى دەلىللەش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
++        <translation type="vanished">چىراي تونۇشنى دەلىللەش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1439"/>
+         <source>Press fingerprint or enter password to unlock</source>
+-        <translation>بارماق ئىزىنى بېسىش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
++        <translation type="vanished">بارماق ئىزىنى بېسىش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1444"/>
+         <source>Verify voiceprint or enter password to unlock</source>
+-        <translation>ئاۋاز ئىزىنى دەلىللەش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
++        <translation type="vanished">ئاۋاز ئىزىنى دەلىللەش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1449"/>
+         <source>Verify finger vein or enter password to unlock</source>
+-        <translation>بارماق ئىزى ئارقىلىق ئېنىقلاش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
++        <translation type="vanished">بارماق ئىزى ئارقىلىق ئېنىقلاش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1454"/>
+         <source>Verify iris or enter password to unlock</source>
+-        <translation>Iris نى ئېنىقلاش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
++        <translation type="vanished">Iris نى ئېنىقلاش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1459"/>
+         <source>Use the bound wechat scanning code or enter the password to unlock</source>
+-        <translation>باغلانغان ئۈندىدارنى سىكاننېرلاش كودى ياكى مەخپىي نومۇرىنى كىرگۈزۈپ قۇلۇپ ئېچىش</translation>
++        <translation type="vanished">باغلانغان ئۈندىدارنى سىكاننېرلاش كودى ياكى مەخپىي نومۇرىنى كىرگۈزۈپ قۇلۇپ ئېچىش</translation>
+     </message>
+     <message>
+         <source>Use the bound wechat scanning code or enter the password to log in</source>
+         <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="779"/>
+-        <location filename="../src/mainwindow.cpp" line="783"/>
+-        <location filename="../src/mainwindow.cpp" line="787"/>
+-        <location filename="../src/mainwindow.cpp" line="791"/>
++        <location filename="../src/mainwindow.cpp" line="635"/>
++        <location filename="../src/mainwindow.cpp" line="638"/>
++        <location filename="../src/mainwindow.cpp" line="641"/>
++        <location filename="../src/mainwindow.cpp" line="644"/>
+         <source>Account locked,</source>
+         <translation>ئىشلىتىش نومۇرىڭىز قۇلۇپلىنىپ قالدى</translation>
+     </message>
+@@ -388,17 +430,17 @@
+ <context>
+     <name>PolkitListener</name>
+     <message>
+-        <location filename="../src/PolkitListener.cpp" line="88"/>
++        <location filename="../src/PolkitListener.cpp" line="86"/>
+         <source>Another client is already authenticating, please try again later.</source>
+         <translation>يەنە بىر خېرىدار دەلىللەۋاتىدۇ، سەل تۇرۇپ قايتا سىناڭ.</translation>
+     </message>
+     <message>
+-        <location filename="../src/PolkitListener.cpp" line="265"/>
++        <location filename="../src/PolkitListener.cpp" line="253"/>
+         <source>Authentication failure, please try again.</source>
+         <translation>دەلىللەش مەغلۇپ بولدى، قايتا سىناڭ.</translation>
+     </message>
+     <message>
+-        <location filename="../src/PolkitListener.cpp" line="272"/>
++        <location filename="../src/PolkitListener.cpp" line="259"/>
+         <source>Password input error!</source>
+         <translation>كىرگۈزگەن مەخپىي نومۇر خاتا بولدى</translation>
+     </message>
+diff --git a/polkit-agent/i18n_ts/zh_CN.ts b/polkit-agent/i18n_ts/zh_CN.ts
+index 070732c..5fc6ea0 100644
+--- a/polkit-agent/i18n_ts/zh_CN.ts
++++ b/polkit-agent/i18n_ts/zh_CN.ts
+@@ -51,6 +51,15 @@
+         <translation type="vanished">二维码</translation>
+     </message>
+ </context>
++<context>
++    <name>FullScreenBackground</name>
++    <message>
++        <location filename="../src/fullscreenbackground.cpp" line="75"/>
++        <location filename="../src/fullscreenbackground.cpp" line="104"/>
++        <source>Authentication</source>
++        <translation type="unfinished">授权</translation>
++    </message>
++</context>
+ <context>
+     <name>LoginOptionsWidget</name>
+     <message>
+@@ -65,9 +74,8 @@
+ <context>
+     <name>MainWindow</name>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="66"/>
+         <source>Authentication</source>
+-        <translation>授权</translation>
++        <translation type="vanished">授权</translation>
+     </message>
+     <message>
+         <source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
+@@ -91,14 +99,14 @@
+         <translation type="vanished">密码</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="409"/>
+-        <location filename="../src/mainwindow.cpp" line="1075"/>
+-        <location filename="../src/mainwindow.cpp" line="1143"/>
++        <location filename="../src/mainwindow.ui" line="398"/>
++        <location filename="../src/mainwindow.cpp" line="874"/>
++        <location filename="../src/mainwindow.cpp" line="943"/>
+         <source>Biometric</source>
+         <translation>使用生物识别</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="480"/>
++        <location filename="../src/mainwindow.ui" line="493"/>
+         <source>use password</source>
+         <translation>使用密码验证</translation>
+     </message>
+@@ -147,20 +155,19 @@
+         <translation type="vanished">Polkit.caller-pid:</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="441"/>
+-        <location filename="../src/mainwindow.cpp" line="1077"/>
++        <location filename="../src/mainwindow.ui" line="436"/>
++        <location filename="../src/mainwindow.cpp" line="875"/>
+         <source>Cancel</source>
+         <translation>取消</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="460"/>
+-        <location filename="../src/mainwindow.cpp" line="1073"/>
++        <location filename="../src/mainwindow.ui" line="461"/>
++        <location filename="../src/mainwindow.cpp" line="873"/>
+         <source>Authenticate</source>
+         <translation>授权</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1079"/>
+-        <location filename="../src/mainwindow.cpp" line="1183"/>
++        <location filename="../src/mainwindow.cpp" line="876"/>
+         <source>Use password</source>
+         <translation>使用密码验证</translation>
+     </message>
+@@ -185,30 +192,30 @@
+         <translation type="vanished">认证中,请稍等...</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1219"/>
+-        <location filename="../src/mainwindow.cpp" line="1292"/>
+-        <location filename="../src/mainwindow.cpp" line="1293"/>
++        <location filename="../src/mainwindow.cpp" line="1003"/>
++        <location filename="../src/mainwindow.cpp" line="1081"/>
++        <location filename="../src/mainwindow.cpp" line="1082"/>
+         <source>Please try again in %1 minutes.</source>
+         <translation>请%1分钟后再试</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1230"/>
+-        <location filename="../src/mainwindow.cpp" line="1302"/>
+-        <location filename="../src/mainwindow.cpp" line="1303"/>
++        <location filename="../src/mainwindow.cpp" line="1015"/>
++        <location filename="../src/mainwindow.cpp" line="1093"/>
++        <location filename="../src/mainwindow.cpp" line="1094"/>
+         <source>Please try again in %1 seconds.</source>
+         <translation>请%1秒后再试</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1240"/>
+-        <location filename="../src/mainwindow.cpp" line="1241"/>
+-        <location filename="../src/mainwindow.cpp" line="1311"/>
+-        <location filename="../src/mainwindow.cpp" line="1312"/>
++        <location filename="../src/mainwindow.cpp" line="1026"/>
++        <location filename="../src/mainwindow.cpp" line="1027"/>
++        <location filename="../src/mainwindow.cpp" line="1104"/>
++        <location filename="../src/mainwindow.cpp" line="1105"/>
+         <source>Account locked permanently.</source>
+         <translation>账号已被永久锁定</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="834"/>
+-        <location filename="../src/mainwindow.cpp" line="835"/>
++        <location filename="../src/mainwindow.cpp" line="688"/>
++        <location filename="../src/mainwindow.cpp" line="689"/>
+         <source>Password cannot be empty</source>
+         <translation>密码不能为空</translation>
+     </message>
+@@ -221,8 +228,8 @@
+         <translation type="vanished">无法验证%1,请输入密码.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="242"/>
+-        <location filename="../src/mainwindow.cpp" line="246"/>
++        <location filename="../src/mainwindow.cpp" line="1558"/>
++        <location filename="../src/mainwindow.cpp" line="1562"/>
+         <source>Failed to verify %1, you still have %2 verification opportunities</source>
+         <translation>验证%1失败,您还有%2次尝试机会</translation>
+     </message>
+@@ -231,42 +238,42 @@
+         <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="731"/>
++        <location filename="../src/mainwindow.cpp" line="582"/>
+         <source>Password: </source>
+         <translation>密码: </translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="335"/>
++        <location filename="../src/mainwindow.cpp" line="165"/>
+         <source>Please enter your password or enroll your fingerprint </source>
+         <translation>请输入密码或者录入指纹</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="259"/>
++        <location filename="../src/mainwindow.cpp" line="1575"/>
+         <source>Abnormal network</source>
+         <translation>网络异常</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="665"/>
++        <location filename="../src/mainwindow.cpp" line="517"/>
+         <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
+         <translation>本次操作需要通过管理员的授权才能继续执行,请输入密码以允许本次操作。</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="733"/>
++        <location filename="../src/mainwindow.cpp" line="584"/>
+         <source>_Password: </source>
+         <translation>密码: </translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="735"/>
++        <location filename="../src/mainwindow.cpp" line="586"/>
+         <source>_Password:</source>
+         <translation>密码:</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="850"/>
++        <location filename="../src/mainwindow.cpp" line="704"/>
+         <source>Authentication failed, please try again.</source>
+         <translation>认证失败,请重试。</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="779"/>
++        <location filename="../src/mainwindow.cpp" line="635"/>
+         <source>days left</source>
+         <translation>天后解锁</translation>
+     </message>
+@@ -279,16 +286,16 @@
+         <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="226"/>
+-        <location filename="../src/mainwindow.cpp" line="1415"/>
+-        <location filename="../src/mainwindow.cpp" line="1417"/>
++        <location filename="../src/mainwindow.cpp" line="1243"/>
++        <location filename="../src/mainwindow.cpp" line="1246"/>
++        <location filename="../src/mainwindow.cpp" line="1539"/>
+         <source>Failed to verify %1, please enter password to unlock</source>
+         <translation>验证%1失败,请输入密码解锁</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="231"/>
+-        <location filename="../src/mainwindow.cpp" line="233"/>
+-        <location filename="../src/mainwindow.cpp" line="1419"/>
++        <location filename="../src/mainwindow.cpp" line="1249"/>
++        <location filename="../src/mainwindow.cpp" line="1545"/>
++        <location filename="../src/mainwindow.cpp" line="1548"/>
+         <source>Unable to verify %1, please enter password to unlock</source>
+         <translation>无法验证%1,请输入密码解锁</translation>
+     </message>
+@@ -297,86 +304,121 @@
+         <translation type="vanished">网络异常</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="671"/>
++        <location filename="../src/mainwindow.cpp" line="522"/>
+         <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
+         <translation>一个程序正试图执行一个需要特权的动作,要求授权以执行该动作。</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="108"/>
+-        <location filename="../src/mainwindow.cpp" line="729"/>
++        <location filename="../src/mainwindow.cpp" line="88"/>
++        <location filename="../src/mainwindow.cpp" line="580"/>
+         <source>Input Password</source>
+         <translation>输入密码</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="105"/>
++        <location filename="../src/mainwindow.cpp" line="85"/>
+         <source>Insert the ukey into the USB port</source>
+         <translation>请将安全密钥插入USB端口</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="107"/>
++        <location filename="../src/mainwindow.cpp" line="87"/>
+         <source>Enter the ukey password</source>
+         <translation>输入安全密钥密码</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="783"/>
++        <location filename="../src/mainwindow.cpp" line="93"/>
++        <source>Close</source>
++        <translation>关闭</translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1261"/>
++        <source>Facial recognition to authorization</source>
++        <translation>识别人脸以授权</translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1264"/>
++        <source>Fingerprint recognition to authorization</source>
++        <translation>识别指纹以授权</translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1267"/>
++        <source>Voiceprint recognition to authorization</source>
++        <translation>识别声纹以授权</translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1270"/>
++        <source>Finger veins recognition to authorization</source>
++        <translation>识别指静脉以授权</translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1273"/>
++        <source>Iris recognition to authorization</source>
++        <translation>识别虹膜以授权</translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1276"/>
++        <source>Use the bound wechat scanning code to authorization</source>
++        <translation>微信扫码以授权</translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1579"/>
++        <source>Acquisition failure</source>
++        <translation>获取失败</translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="638"/>
+         <source>hours left</source>
+         <translation>小时后解锁</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="787"/>
++        <location filename="../src/mainwindow.cpp" line="641"/>
+         <source>minutes left</source>
+         <translation>分钟后解锁</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="791"/>
++        <location filename="../src/mainwindow.cpp" line="644"/>
+         <source>seconds left</source>
+         <translation>秒后解锁</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="880"/>
+-        <location filename="../src/mainwindow.cpp" line="888"/>
++        <location filename="../src/mainwindow.cpp" line="734"/>
++        <location filename="../src/mainwindow.cpp" line="742"/>
++        <location filename="../src/mainwindow.cpp" line="1258"/>
+         <source>Input your password to authentication</source>
+         <translation>输入密码以授权</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1434"/>
+         <source>Verify face recognition or enter password to unlock</source>
+-        <translation>验证人脸识别或输入密码解锁</translation>
++        <translation type="vanished">验证人脸识别或输入密码解锁</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1439"/>
+         <source>Press fingerprint or enter password to unlock</source>
+-        <translation>按压指纹或输入密码解锁</translation>
++        <translation type="vanished">按压指纹或输入密码解锁</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1444"/>
+         <source>Verify voiceprint or enter password to unlock</source>
+-        <translation>验证声纹或输入密码解锁</translation>
++        <translation type="vanished">验证声纹或输入密码解锁</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1449"/>
+         <source>Verify finger vein or enter password to unlock</source>
+-        <translation>验证指静脉或输入密码解锁</translation>
++        <translation type="vanished">验证指静脉或输入密码解锁</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1454"/>
+         <source>Verify iris or enter password to unlock</source>
+-        <translation>验证虹膜或输入密码解锁</translation>
++        <translation type="vanished">验证虹膜或输入密码解锁</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1459"/>
+         <source>Use the bound wechat scanning code or enter the password to unlock</source>
+-        <translation>使用绑定的微信扫码或输入密码解锁</translation>
++        <translation type="vanished">使用绑定的微信扫码或输入密码解锁</translation>
+     </message>
+     <message>
+         <source>Use the bound wechat scanning code or enter the password to log in</source>
+         <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="779"/>
+-        <location filename="../src/mainwindow.cpp" line="783"/>
+-        <location filename="../src/mainwindow.cpp" line="787"/>
+-        <location filename="../src/mainwindow.cpp" line="791"/>
++        <location filename="../src/mainwindow.cpp" line="635"/>
++        <location filename="../src/mainwindow.cpp" line="638"/>
++        <location filename="../src/mainwindow.cpp" line="641"/>
++        <location filename="../src/mainwindow.cpp" line="644"/>
+         <source>Account locked,</source>
+         <translation>账户已锁定,</translation>
+     </message>
+@@ -388,17 +430,17 @@
+ <context>
+     <name>PolkitListener</name>
+     <message>
+-        <location filename="../src/PolkitListener.cpp" line="88"/>
++        <location filename="../src/PolkitListener.cpp" line="86"/>
+         <source>Another client is already authenticating, please try again later.</source>
+         <translation>有另外一个客户端正在认证,请稍后重试。</translation>
+     </message>
+     <message>
+-        <location filename="../src/PolkitListener.cpp" line="265"/>
++        <location filename="../src/PolkitListener.cpp" line="253"/>
+         <source>Authentication failure, please try again.</source>
+         <translation>认证失败,请重试。</translation>
+     </message>
+     <message>
+-        <location filename="../src/PolkitListener.cpp" line="272"/>
++        <location filename="../src/PolkitListener.cpp" line="259"/>
+         <source>Password input error!</source>
+         <translation>密码输入错误!</translation>
+     </message>
+diff --git a/polkit-agent/i18n_ts/zh_HK.ts b/polkit-agent/i18n_ts/zh_HK.ts
+index 95c8c43..52c432d 100644
+--- a/polkit-agent/i18n_ts/zh_HK.ts
++++ b/polkit-agent/i18n_ts/zh_HK.ts
+@@ -1,6 +1,6 @@
+ <?xml version="1.0" encoding="utf-8"?>
+ <!DOCTYPE TS>
+-<TS version="2.1" language="zh_Hant">
++<TS version="2.1" language="zh">
+ <context>
+     <name>BioAuthWidget</name>
+     <message>
+@@ -51,6 +51,15 @@
+         <translation type="vanished">二维码</translation>
+     </message>
+ </context>
++<context>
++    <name>FullScreenBackground</name>
++    <message>
++        <location filename="../src/fullscreenbackground.cpp" line="75"/>
++        <location filename="../src/fullscreenbackground.cpp" line="104"/>
++        <source>Authentication</source>
++        <translation type="unfinished">授權</translation>
++    </message>
++</context>
+ <context>
+     <name>LoginOptionsWidget</name>
+     <message>
+@@ -65,9 +74,8 @@
+ <context>
+     <name>MainWindow</name>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="66"/>
+         <source>Authentication</source>
+-        <translation>授權</translation>
++        <translation type="vanished">授權</translation>
+     </message>
+     <message>
+         <source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
+@@ -91,14 +99,14 @@
+         <translation type="vanished">密码</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="409"/>
+-        <location filename="../src/mainwindow.cpp" line="1075"/>
+-        <location filename="../src/mainwindow.cpp" line="1143"/>
++        <location filename="../src/mainwindow.ui" line="398"/>
++        <location filename="../src/mainwindow.cpp" line="874"/>
++        <location filename="../src/mainwindow.cpp" line="943"/>
+         <source>Biometric</source>
+         <translation>使用生物識別</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="480"/>
++        <location filename="../src/mainwindow.ui" line="493"/>
+         <source>use password</source>
+         <translation>使用密碼驗證</translation>
+     </message>
+@@ -147,20 +155,19 @@
+         <translation type="vanished">Polkit.caller-pid:</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="441"/>
+-        <location filename="../src/mainwindow.cpp" line="1077"/>
++        <location filename="../src/mainwindow.ui" line="436"/>
++        <location filename="../src/mainwindow.cpp" line="875"/>
+         <source>Cancel</source>
+         <translation>取消</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.ui" line="460"/>
+-        <location filename="../src/mainwindow.cpp" line="1073"/>
++        <location filename="../src/mainwindow.ui" line="461"/>
++        <location filename="../src/mainwindow.cpp" line="873"/>
+         <source>Authenticate</source>
+         <translation>授權</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1079"/>
+-        <location filename="../src/mainwindow.cpp" line="1183"/>
++        <location filename="../src/mainwindow.cpp" line="876"/>
+         <source>Use password</source>
+         <translation>使用密碼驗證</translation>
+     </message>
+@@ -185,30 +192,30 @@
+         <translation type="vanished">认证中,请稍等...</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1219"/>
+-        <location filename="../src/mainwindow.cpp" line="1292"/>
+-        <location filename="../src/mainwindow.cpp" line="1293"/>
++        <location filename="../src/mainwindow.cpp" line="1003"/>
++        <location filename="../src/mainwindow.cpp" line="1081"/>
++        <location filename="../src/mainwindow.cpp" line="1082"/>
+         <source>Please try again in %1 minutes.</source>
+         <translation>請%1分鐘后再試</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1230"/>
+-        <location filename="../src/mainwindow.cpp" line="1302"/>
+-        <location filename="../src/mainwindow.cpp" line="1303"/>
++        <location filename="../src/mainwindow.cpp" line="1015"/>
++        <location filename="../src/mainwindow.cpp" line="1093"/>
++        <location filename="../src/mainwindow.cpp" line="1094"/>
+         <source>Please try again in %1 seconds.</source>
+         <translation>請%1秒後再試</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1240"/>
+-        <location filename="../src/mainwindow.cpp" line="1241"/>
+-        <location filename="../src/mainwindow.cpp" line="1311"/>
+-        <location filename="../src/mainwindow.cpp" line="1312"/>
++        <location filename="../src/mainwindow.cpp" line="1026"/>
++        <location filename="../src/mainwindow.cpp" line="1027"/>
++        <location filename="../src/mainwindow.cpp" line="1104"/>
++        <location filename="../src/mainwindow.cpp" line="1105"/>
+         <source>Account locked permanently.</source>
+         <translation>帳號已被永久鎖定</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="834"/>
+-        <location filename="../src/mainwindow.cpp" line="835"/>
++        <location filename="../src/mainwindow.cpp" line="688"/>
++        <location filename="../src/mainwindow.cpp" line="689"/>
+         <source>Password cannot be empty</source>
+         <translation>密碼不能為空</translation>
+     </message>
+@@ -221,8 +228,8 @@
+         <translation type="vanished">无法验证%1,请输入密码.</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="242"/>
+-        <location filename="../src/mainwindow.cpp" line="246"/>
++        <location filename="../src/mainwindow.cpp" line="1558"/>
++        <location filename="../src/mainwindow.cpp" line="1562"/>
+         <source>Failed to verify %1, you still have %2 verification opportunities</source>
+         <translation>驗證%1失敗,您還有%2次嘗試機會</translation>
+     </message>
+@@ -231,42 +238,42 @@
+         <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="731"/>
++        <location filename="../src/mainwindow.cpp" line="582"/>
+         <source>Password: </source>
+         <translation>密碼: </translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="335"/>
++        <location filename="../src/mainwindow.cpp" line="165"/>
+         <source>Please enter your password or enroll your fingerprint </source>
+         <translation>請輸入密碼或者錄入指紋 </translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="259"/>
++        <location filename="../src/mainwindow.cpp" line="1575"/>
+         <source>Abnormal network</source>
+         <translation>網路異常</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="665"/>
++        <location filename="../src/mainwindow.cpp" line="517"/>
+         <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
+         <translation>本次操作需要通過管理員的授權才能繼續執行,請輸入密碼以允許本次操作。</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="733"/>
++        <location filename="../src/mainwindow.cpp" line="584"/>
+         <source>_Password: </source>
+         <translation>密碼: </translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="735"/>
++        <location filename="../src/mainwindow.cpp" line="586"/>
+         <source>_Password:</source>
+         <translation>密碼:</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="850"/>
++        <location filename="../src/mainwindow.cpp" line="704"/>
+         <source>Authentication failed, please try again.</source>
+         <translation>認證失敗,請重試。</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="779"/>
++        <location filename="../src/mainwindow.cpp" line="635"/>
+         <source>days left</source>
+         <translation>天后解鎖</translation>
+     </message>
+@@ -279,16 +286,16 @@
+         <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="226"/>
+-        <location filename="../src/mainwindow.cpp" line="1415"/>
+-        <location filename="../src/mainwindow.cpp" line="1417"/>
++        <location filename="../src/mainwindow.cpp" line="1243"/>
++        <location filename="../src/mainwindow.cpp" line="1246"/>
++        <location filename="../src/mainwindow.cpp" line="1539"/>
+         <source>Failed to verify %1, please enter password to unlock</source>
+         <translation>驗證%1失敗,請輸入密碼解鎖</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="231"/>
+-        <location filename="../src/mainwindow.cpp" line="233"/>
+-        <location filename="../src/mainwindow.cpp" line="1419"/>
++        <location filename="../src/mainwindow.cpp" line="1249"/>
++        <location filename="../src/mainwindow.cpp" line="1545"/>
++        <location filename="../src/mainwindow.cpp" line="1548"/>
+         <source>Unable to verify %1, please enter password to unlock</source>
+         <translation>無法驗證%1,請輸入密碼解鎖</translation>
+     </message>
+@@ -297,86 +304,121 @@
+         <translation type="vanished">网络异常</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="671"/>
++        <location filename="../src/mainwindow.cpp" line="522"/>
+         <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
+         <translation>一個程式正試圖執行一個需要特權的動作,要求授權以執行該動作。</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="108"/>
+-        <location filename="../src/mainwindow.cpp" line="729"/>
++        <location filename="../src/mainwindow.cpp" line="88"/>
++        <location filename="../src/mainwindow.cpp" line="580"/>
+         <source>Input Password</source>
+         <translation>輸入密碼</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="105"/>
++        <location filename="../src/mainwindow.cpp" line="85"/>
+         <source>Insert the ukey into the USB port</source>
+         <translation>請將安全金鑰插入USB埠</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="107"/>
++        <location filename="../src/mainwindow.cpp" line="87"/>
+         <source>Enter the ukey password</source>
+         <translation>輸入安全金鑰密碼</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="783"/>
++        <location filename="../src/mainwindow.cpp" line="93"/>
++        <source>Close</source>
++        <translation>關閉</translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1261"/>
++        <source>Facial recognition to authorization</source>
++        <translation>識別人臉以授權</translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1264"/>
++        <source>Fingerprint recognition to authorization</source>
++        <translation>識別指紋以授權</translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1267"/>
++        <source>Voiceprint recognition to authorization</source>
++        <translation>識別聲紋以授權</translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1270"/>
++        <source>Finger veins recognition to authorization</source>
++        <translation>識別指靜脈以授權</translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1273"/>
++        <source>Iris recognition to authorization</source>
++        <translation>識別虹膜以授權</translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1276"/>
++        <source>Use the bound wechat scanning code to authorization</source>
++        <translation>微信掃碼以授權</translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="1579"/>
++        <source>Acquisition failure</source>
++        <translation>獲取失敗</translation>
++    </message>
++    <message>
++        <location filename="../src/mainwindow.cpp" line="638"/>
+         <source>hours left</source>
+         <translation>小時後解鎖</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="787"/>
++        <location filename="../src/mainwindow.cpp" line="641"/>
+         <source>minutes left</source>
+         <translation>分鐘後解鎖</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="791"/>
++        <location filename="../src/mainwindow.cpp" line="644"/>
+         <source>seconds left</source>
+         <translation>秒後解鎖</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="880"/>
+-        <location filename="../src/mainwindow.cpp" line="888"/>
++        <location filename="../src/mainwindow.cpp" line="734"/>
++        <location filename="../src/mainwindow.cpp" line="742"/>
++        <location filename="../src/mainwindow.cpp" line="1258"/>
+         <source>Input your password to authentication</source>
+         <translation>輸入密碼以認證</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1434"/>
+         <source>Verify face recognition or enter password to unlock</source>
+-        <translation>驗證人臉識別或輸入密碼解鎖</translation>
++        <translation type="vanished">驗證人臉識別或輸入密碼解鎖</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1439"/>
+         <source>Press fingerprint or enter password to unlock</source>
+-        <translation>按壓指紋或輸入密碼解鎖</translation>
++        <translation type="vanished">按壓指紋或輸入密碼解鎖</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1444"/>
+         <source>Verify voiceprint or enter password to unlock</source>
+-        <translation>驗證聲紋或輸入密碼解鎖</translation>
++        <translation type="vanished">驗證聲紋或輸入密碼解鎖</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1449"/>
+         <source>Verify finger vein or enter password to unlock</source>
+-        <translation>驗證指靜脈或輸入密碼解鎖</translation>
++        <translation type="vanished">驗證指靜脈或輸入密碼解鎖</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1454"/>
+         <source>Verify iris or enter password to unlock</source>
+-        <translation>驗證虹膜或輸入密碼解鎖</translation>
++        <translation type="vanished">驗證虹膜或輸入密碼解鎖</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="1459"/>
+         <source>Use the bound wechat scanning code or enter the password to unlock</source>
+-        <translation>使用綁定的微信掃碼或輸入密碼解鎖</translation>
++        <translation type="vanished">使用綁定的微信掃碼或輸入密碼解鎖</translation>
+     </message>
+     <message>
+         <source>Use the bound wechat scanning code or enter the password to log in</source>
+         <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
+     </message>
+     <message>
+-        <location filename="../src/mainwindow.cpp" line="779"/>
+-        <location filename="../src/mainwindow.cpp" line="783"/>
+-        <location filename="../src/mainwindow.cpp" line="787"/>
+-        <location filename="../src/mainwindow.cpp" line="791"/>
++        <location filename="../src/mainwindow.cpp" line="635"/>
++        <location filename="../src/mainwindow.cpp" line="638"/>
++        <location filename="../src/mainwindow.cpp" line="641"/>
++        <location filename="../src/mainwindow.cpp" line="644"/>
+         <source>Account locked,</source>
+         <translation>帳戶已鎖定,</translation>
+     </message>
+@@ -388,17 +430,17 @@
+ <context>
+     <name>PolkitListener</name>
+     <message>
+-        <location filename="../src/PolkitListener.cpp" line="88"/>
++        <location filename="../src/PolkitListener.cpp" line="86"/>
+         <source>Another client is already authenticating, please try again later.</source>
+         <translation>有另外一個用戶端正在認證,請稍後重試。</translation>
+     </message>
+     <message>
+-        <location filename="../src/PolkitListener.cpp" line="265"/>
++        <location filename="../src/PolkitListener.cpp" line="253"/>
+         <source>Authentication failure, please try again.</source>
+         <translation>認證失敗,請重試。</translation>
+     </message>
+     <message>
+-        <location filename="../src/PolkitListener.cpp" line="272"/>
++        <location filename="../src/PolkitListener.cpp" line="259"/>
+         <source>Password input error!</source>
+         <translation>密碼輸入錯誤!</translation>
+     </message>
+diff --git a/polkit-agent/src/PolkitListener.cpp b/polkit-agent/src/PolkitListener.cpp
+index 749e551..6a37a22 100644
+--- a/polkit-agent/src/PolkitListener.cpp
++++ b/polkit-agent/src/PolkitListener.cpp
+@@ -31,28 +31,21 @@
+ #include <QApplication>
+ #include <QScreen>
+ #include <fcntl.h>
+-#include <kysdk/kysdk-system/libkysysinfo.h>
+ 
+ #include "PolkitListener.h"
+ #include "mainwindow.h"
+ #include "generic.h"
+ #include <libkysysinfo.h>
+-#include "windowmanager/windowmanager.h"
+ 
+ PolkitListener::PolkitListener(QObject *parent)
+-    : Listener(parent),
+-      inProgress(false),
+-      currentIdentity(0),
+-      mainWindow(nullptr)
++    : Listener(parent), inProgress(false), currentIdentity(0), m_managerFullScreen(nullptr)
+ {
+     m_isSupportTableMode = isSupportTableMode();
+-    m_isMavis  = isMavis();
+-    qDebug()<<"isSupportTableMode:"<<m_isSupportTableMode;
++    m_isMavis = isMavis();
++    qDebug() << "isSupportTableMode:" << m_isSupportTableMode;
+ }
+ 
+-PolkitListener::~PolkitListener()
+-{
+-}
++PolkitListener::~PolkitListener() {}
+ 
+ bool PolkitListener::isMavis()
+ {
+@@ -81,12 +74,15 @@ bool PolkitListener::isSupportTableMode()
+ 
+ /* initiateAuthentication message from polkit */
+ void PolkitListener::initiateAuthentication(
+-    const QString &actionId, const QString &message,
+-    const QString &iconName, const PolkitQt1::Details &details,
+-    const QString &cookie, const PolkitQt1::Identity::List &identities,
++    const QString &actionId,
++    const QString &message,
++    const QString &iconName,
++    const PolkitQt1::Details &details,
++    const QString &cookie,
++    const PolkitQt1::Identity::List &identities,
+     PolkitQt1::Agent::AsyncResult *result)
+ {
+-    if(inProgress){
++    if (inProgress) {
+         result->setError(tr("Another client is already authenticating, please try again later."));
+         result->setCompleted();
+         qDebug() << "Another client is already authenticating, please try again later.";
+@@ -107,13 +103,13 @@ void PolkitListener::initiateAuthentication(
+ 
+     subjectPid = details.lookup("polkit.subject-pid");
+     callerPid = details.lookup("polkit.caller-pid");
++    implicitActiveStr = details.lookup("implicit_authorization");
+ 
+     /* find action description for actionId */
+-    foreach(const PolkitQt1::ActionDescription &desc,
+-            PolkitQt1::Authority::instance()->enumerateActionsSync()) {
++    foreach (const PolkitQt1::ActionDescription &desc, PolkitQt1::Authority::instance()->enumerateActionsSync()) {
+         if (actionId == desc.actionId()) {
+             actionDesc = desc;
+-            qDebug() << "Action description has been found" ;
++            qDebug() << "Action description has been found";
+             break;
+         }
+     }
+@@ -135,117 +131,103 @@ void PolkitListener::initiateAuthentication(
+     this->result = result;
+     session.clear();
+     if (identities.length() == 1) {
+-    	this->currentIdentity = identities[0];
++        this->currentIdentity = identities[0];
+     } else {
+         currentIdentity = identities[0];
+     }
+ 
+     /* Create the polkit window */
+ 
+-    mainWindow = new MainWindow;
+-//    MotifWmHints hints;
+-//    hints.flags = MWM_HINTS_FUNCTIONS|MWM_HINTS_DECORATIONS;
+-//    hints.functions = MWM_FUNC_ALL;
+-//    hints.decorations = MWM_DECOR_BORDER;
+-//    XAtomHelper::getInstance()->setWindowMotifHint(mainWindow->winId(), hints);
+-    mainWindow->setIcon(iconName);
+-    mainWindow->setCurProject(m_isMavis);
+-    mainWindow->setHeader(message);
+-    mainWindow->setUsers(usersList);
+-    mainWindow->setEditInputMethod(m_isSupportTableMode);
+-    mainWindow->setFixedSize(420, 297);
+-    /*
+-    mainWindow->setDetails(subjectPid, callerPid,
+-                           actionDesc.actionId(),
+-                           actionDesc.description(),
+-                           actionDesc.vendorName(),
+-                           actionDesc.vendorUrl());
+-    */
+-    /* set the position of the mainwindow */
+-    QPoint pos = QCursor::pos();
+-    QRect desScreenGeometry;
+-    for (QScreen *screen : qApp->screens()) {
+-        if (screen->geometry().contains(pos)) {
+-            desScreenGeometry = screen->geometry();
+-        }
+-    }
+-
+-    if (desScreenGeometry.isEmpty()) {
+-        desScreenGeometry = qApp->primaryScreen()->geometry();
+-    }
+-//    mainWindow->move(desScreenGeometry.x() + (desScreenGeometry.width() - mainWindow->width())/2,
+-//               desScreenGeometry.y() + (desScreenGeometry.height() - mainWindow->height())/2);
+-//    qDebug()<<"MoveWindow to center1:"<<desScreenGeometry<<","<<mainWindow->geometry()<<QGuiApplication::platformName();;
+-
+-
+-
+-    connect(mainWindow, &MainWindow::accept, this, &PolkitListener::onResponse);
+-    connect(mainWindow, &MainWindow::canceled, this, [&]{
+-        wasCancelled = true;
+-        unacknowledged_messages = false;
+-        if(!session.isNull()) {
+-            session.data()->cancel();
+-        }
+-    });
+-
+-    connect(mainWindow, &MainWindow::switchToBiometric, this, [&]{
+-        wasSwitchToBiometric = true;
+-        startAuthentication();
+-    });
+-
+-    connect(mainWindow, &MainWindow::restartAuth, this, [&]{
+-        startAuthentication();
+-    });
+-
+-    connect(mainWindow, &MainWindow::userChanged, this, [&](const QString &userName){
+-        for(int i = 0; i < this->identities.size(); i++) {
+-            auto identity = this->identities.at(i);
+-            if(identity.toString().remove("unix-user:") == userName) {
+-                this->currentIdentity = this->identities.at(i);
+-                numTries = 0;
+-                startAuthentication();
+-                break;
++    m_managerFullScreen = new FullScreenBackground();
++    m_managerFullScreen->initMainWindow(
++        iconName, message, usersList, subjectPid, callerPid, actionDesc, m_isMavis, m_isSupportTableMode);
++
++    if (m_managerFullScreen && m_managerFullScreen->getMainWindow()) {
++        connect(m_managerFullScreen->getMainWindow(), &MainWindow::accept, this, &PolkitListener::onResponse);
++        connect(m_managerFullScreen->getMainWindow(), &MainWindow::canceled, this, [&] {
++            if (inProgress && !gainedAuthorization) {
++                wasCancelled = true;
++                unacknowledged_messages = false;
++                if (!session.isNull()) {
++                    session.data()->cancel();
++                }
++                finishObtainPrivilege();
+             }
+-        }
+-    });
++        });
++
++        connect(m_managerFullScreen->getMainWindow(), &MainWindow::switchToBiometric, this, [&] {
++            wasSwitchToBiometric = true;
++            startAuthentication();
++        });
++
++        connect(m_managerFullScreen->getMainWindow(), &MainWindow::yesPrompted, this, [=] {
++            result->setCompleted();
++            this->gainedAuthorization = true;
++            finishObtainPrivilege();
++        });
++
++        connect(m_managerFullScreen->getMainWindow(), &MainWindow::restartAuth, this, [&] { startAuthentication(); });
++
++        connect(m_managerFullScreen->getMainWindow(), &MainWindow::userChanged, this, [&](const QString &userName) {
++            for (int i = 0; i < this->identities.size(); i++) {
++                auto identity = this->identities.at(i);
++                if (identity.toString().remove("unix-user:") == userName) {
++                    this->currentIdentity = this->identities.at(i);
++                    numTries = 0;
++                    startAuthentication();
++                    break;
++                }
++            }
++        });
+ 
+-    numTries = 0;
+-    wasCancelled = false;
+-    wasSwitchToBiometric = false;
++        numTries = 0;
++        wasCancelled = false;
++        wasSwitchToBiometric = false;
+ 
+-    mainWindow->userChanged(usersList.at(0));
++        if (implicitActiveStr == "yes_prompt") {
++            m_managerFullScreen->getMainWindow()->onShowYesPrompt();
++            m_managerFullScreen->getMainWindow()->setFixedSize(m_managerFullScreen->getMainWindow()->width(), 200);
++            m_managerFullScreen->getMainWindow()->show();
++            m_managerFullScreen->getMainWindow()->activateWindow();
++            return;
++        }
+ 
++        m_managerFullScreen->getMainWindow()->userChanged(usersList.at(0));
++    }
+ }
+ 
+-static
+-int get_pam_tally(int *deny, int *unlock_time)
++static int get_pam_tally(int *deny, int *unlock_time)
+ {
+     char buf[128];
+-    FILE *auth_file;
++    FILE *auth_file = NULL;
+ 
+-    if( (auth_file = fopen("/etc/pam.d/common-auth", "r")) == NULL)
++    if ((auth_file = fopen("/etc/pam.d/common-auth", "r")) == NULL)
+         return -1;
+ 
+-    while(fgets(buf, sizeof(buf), auth_file)) {
+-        if(strlen(buf) == 0 || buf[0] == '#')
++    while (fgets(buf, sizeof(buf), auth_file)) {
++        if (strlen(buf) == 0 || buf[0] == '#')
+             continue;
+-        if(!strstr(buf, "deny"))
++        if (!strstr(buf, "deny"))
+             continue;
+ 
+         char *ptr = strtok(buf, " \t");
+-        while(ptr) {
+-            if(strncmp(ptr, "deny=", 5)==0){
++        while (ptr) {
++            if (strncmp(ptr, "deny=", 5) == 0) {
+                 sscanf(ptr, "deny=%d", deny);
+-                //gs_debug("-------------------- deny=%d", *deny);
++                // gs_debug("-------------------- deny=%d", *deny);
+             }
+-            if(strncmp(ptr, "unlock_time=", 12)==0){
++            if (strncmp(ptr, "unlock_time=", 12) == 0) {
+                 sscanf(ptr, "unlock_time=%d", unlock_time);
+-                //gs_debug("-------------------- unlock_time=%d", *unlock_time);
++                // gs_debug("-------------------- unlock_time=%d", *unlock_time);
+             }
+             ptr = strtok(NULL, " \t");
+         }
++        fclose(auth_file);
++        auth_file = NULL;
+         return 1;
+     }
++    fclose(auth_file);
++    auth_file = NULL;
+     return 0;
+ }
+ 
+@@ -253,54 +235,59 @@ void PolkitListener::finishObtainPrivilege()
+ {
+     /* Number of tries increase only when some user is selected */
+     if (currentIdentity.isValid()) {
+-    	numTries++;
++        numTries++;
+     }
+     qDebug().noquote() << QString("Finishing obtaining "
+-                    "privileges (G:%1, C:%2, D:%3).")
+-                    .arg(gainedAuthorization)
+-                    .arg(wasCancelled)
+-                    .arg(mainWindow != NULL);
+-
+-    if (!gainedAuthorization && !wasCancelled && (mainWindow != NULL)) {
+-         int deny = 0, unlock_time = 0;
+-         mainWindow->stopDoubleAuth();
+-         if(!get_pam_tally(&deny, &unlock_time)||(deny  == 0 &&unlock_time == 0)) {
+-             //if(!wasSwitchToBiometric){
+-             if (!unacknowledged_messages)
+-                 mainWindow->setAuthResult(gainedAuthorization, tr("Authentication failure, please try again."));
+-             //}
+-             startAuthentication();
+-             return;
+-         }
+-         else {
+-             if (!unacknowledged_messages) {
+-                 mainWindow->setAuthResult(gainedAuthorization, tr("Password input error!"));
+-             }
+-             startAuthentication();
+-             return;
+-         }
+-        
+-        startAuthentication();
++                                  "privileges (G:%1, C:%2, D:%3).")
++                              .arg(gainedAuthorization)
++                              .arg(wasCancelled)
++                              .arg(m_managerFullScreen && m_managerFullScreen->getMainWindow());
++
++    if (!gainedAuthorization && !wasCancelled && (m_managerFullScreen && m_managerFullScreen->getMainWindow())) {
++        int deny = 0, unlock_time = 0;
++        m_managerFullScreen->getMainWindow()->stopDoubleAuth();
++        if (!get_pam_tally(&deny, &unlock_time) || (deny == 0 && unlock_time == 0)) {
++            // if(!wasSwitchToBiometric){
++            if (!unacknowledged_messages)
++                m_managerFullScreen->getMainWindow()->setAuthResult(
++                    gainedAuthorization, tr("Authentication failure, please try again."));
++            //}
++            startAuthentication();
+             return;
++        } else {
++            if (!unacknowledged_messages) {
++                m_managerFullScreen->getMainWindow()->setAuthResult(gainedAuthorization, tr("Password input error!"));
++            }
++            startAuthentication();
++            return;
++        }
++
++        startAuthentication();
++        return;
+     }
+ 
+-    if (mainWindow) {
+-        mainWindow->hide();
+-        mainWindow->stopDoubleAuth();
+-        mainWindow->close();
+-        mainWindow->deleteLater();
+-        mainWindow = NULL;
++    if (m_managerFullScreen) {
++        m_managerFullScreen->closeDialog();
++        m_managerFullScreen->deleteLater();
++        m_managerFullScreen = nullptr;
++    }
++
++    if ((implicitActiveStr == "yes_prompt") && wasCancelled) {
++        result->setError("polkit-ukui-authentication-agent-1 cancel");
+     }
+ 
+     if (!session.isNull()) {
+         session.data()->result()->setCompleted();
++        session.data()->deleteLater();
++        session.clear();
+     } else {
+         result->setCompleted();
+     }
+-    session.data()->deleteLater();
+ 
+     this->inProgress = false;
++    implicitActiveStr = "";
+     qDebug() << "Finish obtain authorization:" << gainedAuthorization;
++    gainedAuthorization = false;
+ }
+ 
+ void establishToBioPAM()
+@@ -308,12 +295,12 @@ void establishToBioPAM()
+     FILE *file;
+     const char *data = "polkit-ukui-authentication-agent-1";
+ 
+-    if( (file = fopen(BIO_COM_FILE, "w")) == NULL){
++    if ((file = fopen(BIO_COM_FILE, "w")) == NULL) {
+         qWarning() << "open communication file failed: " << strerror(errno);
+         return;
+     }
+ 
+-    if(fputs(data, file) == EOF) {
++    if (fputs(data, file) == EOF) {
+         qWarning() << "write to communication file error: " << strerror(errno);
+     }
+     fclose(file);
+@@ -323,7 +310,7 @@ void PolkitListener::startAuthentication()
+ {
+     qDebug() << "start authenticate user " << currentIdentity.toString();
+     unacknowledged_messages = false;
+-    if(!session.isNull()) {
++    if (!session.isNull()) {
+         session.data()->deleteLater();
+     }
+ 
+@@ -332,92 +319,61 @@ void PolkitListener::startAuthentication()
+ 
+         establishToBioPAM();
+ 
+-    	session = new Session(currentIdentity, cookie, result);
+-    	connect(session.data(), SIGNAL(request(QString, bool)), this,
+-                SLOT(onShowPrompt(QString,bool)));
+-    	connect(session.data(), SIGNAL(completed(bool)), this,
+-                SLOT(onAuthCompleted(bool)));
+-    	connect(session.data(), SIGNAL(showError(QString)), this,
+-                SLOT(onShowError(QString)));
+-        connect(session.data(), SIGNAL(showInfo(QString)), this,
+-                SLOT(onShowError(QString)));
+-    	session.data()->initiate();
++        session = new Session(currentIdentity, cookie, result);
++        connect(session.data(), SIGNAL(request(QString, bool)), this, SLOT(onShowPrompt(QString, bool)));
++        connect(session.data(), SIGNAL(completed(bool)), this, SLOT(onAuthCompleted(bool)));
++        connect(session.data(), SIGNAL(showError(QString)), this, SLOT(onShowError(QString)));
++        connect(session.data(), SIGNAL(showInfo(QString)), this, SLOT(onShowError(QString)));
++        session.data()->initiate();
+     }
+ 
+-    mainWindow->clearEdit();
++    if (m_managerFullScreen && m_managerFullScreen->getMainWindow()) {
++        m_managerFullScreen->getMainWindow()->clearEdit();
++    }
+ }
+ 
+ void PolkitListener::onShowPrompt(const QString &prompt, bool echo)
+ {
+     qDebug() << "Prompt: " << prompt << "echo: " << echo;
+-
+-    if(prompt == BIOMETRIC_PAM || prompt == BIOMETRIC_PAM_QRCODE) {
+-        mainWindow->setDoubleAuth(false);
+-        mainWindow->switchAuthMode(MainWindow::BIOMETRIC);
+-    }else if(prompt == BIOMETRIC_PAM_DOUBLE){
+-        mainWindow->setDoubleAuth(true);
+-        mainWindow->switchAuthMode(MainWindow::BIOMETRIC);
+-        //这时候不需要显示授权弹窗,下一次收到prompt请求的时候再显示
++    if (!m_managerFullScreen || !m_managerFullScreen->getMainWindow()) {
+         return;
+     }
+-    else {
++    if (prompt == BIOMETRIC_PAM || prompt == BIOMETRIC_PAM_QRCODE) {
++        m_managerFullScreen->getMainWindow()->setDoubleAuth(false);
++        m_managerFullScreen->getMainWindow()->switchAuthMode(MainWindow::BIOMETRIC);
++    } else if (prompt == BIOMETRIC_PAM_DOUBLE) {
++        m_managerFullScreen->getMainWindow()->setDoubleAuth(true);
++        m_managerFullScreen->getMainWindow()->switchAuthMode(MainWindow::BIOMETRIC);
++        //这时候不需要显示授权弹窗,下一次收到prompt请求的时候再显示
++        return;
++    } else {
+         unacknowledged_messages = false;
+-        mainWindow->switchAuthMode(MainWindow::PASSWORD);
+-        mainWindow->setPrompt(prompt, echo);
++        m_managerFullScreen->getMainWindow()->switchAuthMode(MainWindow::PASSWORD);
++        m_managerFullScreen->getMainWindow()->setPrompt(prompt, echo);
++        m_managerFullScreen->showDialog();
+     }
+-    mainWindow->setFixedSize(mainWindow->width(),mainWindow->height());
+-
+-    /* set the position of the mainwindow */
+-    QPoint pos = QCursor::pos();
+-    QRect desScreenGeometry;
+-    for (QScreen *screen : qApp->screens()) {
+-        if (screen->geometry().contains(pos)) {
+-            desScreenGeometry = screen->geometry();
+-        }
+-    }
+-
+-    if (desScreenGeometry.isEmpty()) {
+-        desScreenGeometry = qApp->primaryScreen()->geometry();
+-    }
+-
+-    kdk::WindowManager::setGeometry(mainWindow->windowHandle(),
+-                                    QRect(desScreenGeometry.left() + (desScreenGeometry.width() - mainWindow->width())/2,
+-                                          desScreenGeometry.top() + (desScreenGeometry.height() - mainWindow->height())/2,
+-                                          mainWindow->width(), mainWindow->height()));
+-
+-    mainWindow->show();
+-    // 重新开始认证不调整窗口位置
+-//    QPoint pos = QCursor::pos();
+-//    for(auto screen : QGuiApplication::screens())
+-//    {
+-//        if(screen->geometry().contains(pos))
+-//        {
+-//            mainWindow->move(screen->geometry().left() + (screen->geometry().width() - mainWindow->width()) / 2,
+-//                             screen->geometry().top() + (screen->geometry().height() - mainWindow->height()) / 2);
+-//        }
+-//    }
+-
+-    mainWindow->activateWindow();
+ }
+ 
+ //目前返回的pam错误就onShowError,onShowInfo两类
+ void PolkitListener::onShowError(const QString &text)
+ {
+-    qDebug() << "[Polkit]:"    << "Error:" << text;
++    qDebug() << "[Polkit]:"
++             << "Error:" << text;
+     unacknowledged_messages = true;
+-    if(mainWindow){
+-        QString strText = mainWindow->check_is_pam_message(text);
+-        mainWindow->setMessage(strText);
++    if (m_managerFullScreen && m_managerFullScreen->getMainWindow()) {
++        QString strText = m_managerFullScreen->getMainWindow()->check_is_pam_message(text);
++        m_managerFullScreen->getMainWindow()->setMessage(strText);
+     }
+ }
+ 
+ void PolkitListener::onShowInfo(const QString &text)
+ {
+-    qDebug() << "[Polkit]:"    << "Info:" << text;
++    qDebug() << "[Polkit]:"
++             << "Info:" << text;
+     unacknowledged_messages = true;
+-    if(mainWindow){
+-        QString strText = mainWindow->check_is_pam_message(text);
+-        mainWindow->setMessage(strText);
++    if (m_managerFullScreen && m_managerFullScreen->getMainWindow()) {
++        QString strText = m_managerFullScreen->getMainWindow()->check_is_pam_message(text);
++        m_managerFullScreen->getMainWindow()->setMessage(strText);
+     }
+ }
+ 
+diff --git a/polkit-agent/src/PolkitListener.h b/polkit-agent/src/PolkitListener.h
+index 850077c..4137f79 100644
+--- a/polkit-agent/src/PolkitListener.h
++++ b/polkit-agent/src/PolkitListener.h
+@@ -22,45 +22,47 @@
+ #include <QPointer>
+ 
+ #include "mainwindow.h"
++#include "fullscreenbackground.h"
+ 
+ using namespace PolkitQt1::Agent;
+ 
+ class PolkitListener : public Listener
+ {
+-	Q_OBJECT
++    Q_OBJECT
+ public:
+-	PolkitListener(QObject *parent = 0);
+-	virtual ~PolkitListener();
++    PolkitListener(QObject *parent = 0);
++    virtual ~PolkitListener();
+ 
+ private:
+     bool isSupportTableMode();
+     bool isMavis();
+ 
+ public slots:
+-	void initiateAuthentication(const QString &actionId,
+-				    const QString &message,
+-				    const QString &iconName,
+-				    const PolkitQt1::Details &details,
+-				    const QString &cookie,
+-				    const PolkitQt1::Identity::List &identities,
+-				    PolkitQt1::Agent::AsyncResult *result);
+-	bool initiateAuthenticationFinish();
+-	void cancelAuthentication();
+-	void finishObtainPrivilege();
+-
++    void initiateAuthentication(
++        const QString &actionId,
++        const QString &message,
++        const QString &iconName,
++        const PolkitQt1::Details &details,
++        const QString &cookie,
++        const PolkitQt1::Identity::List &identities,
++        PolkitQt1::Agent::AsyncResult *result);
++    bool initiateAuthenticationFinish();
++    void cancelAuthentication();
++    void finishObtainPrivilege();
+ 
+ private:
+-	bool gainedAuthorization;
+-	bool wasCancelled;
+-    bool wasSwitchToBiometric;
++    bool gainedAuthorization = false;
++    bool wasCancelled = false;
++    bool wasSwitchToBiometric = false;
+     bool inProgress;
+-	int numTries;
++    int numTries;
++    QString implicitActiveStr;
+     QPointer<Session> session;
+-	PolkitQt1::Identity::List identities;
+-	PolkitQt1::Identity currentIdentity;
+-	PolkitQt1::Agent::AsyncResult *result;
+-	QString cookie;
+-    MainWindow *mainWindow;
++    PolkitQt1::Identity::List identities;
++    PolkitQt1::Identity currentIdentity;
++    PolkitQt1::Agent::AsyncResult *result;
++    QString cookie;
++    FullScreenBackground *m_managerFullScreen;
+     bool unacknowledged_messages = false;
+     bool m_isSupportTableMode = false;
+     bool m_isMavis = false;
+diff --git a/polkit-agent/src/fullscreenbackground.cpp b/polkit-agent/src/fullscreenbackground.cpp
+new file mode 100644
+index 0000000..9bbaa3d
+--- /dev/null
++++ b/polkit-agent/src/fullscreenbackground.cpp
+@@ -0,0 +1,513 @@
++/*
++ * Copyright (C) 2024 Tianjin KYLIN Information Technology Co., Ltd.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 3, or (at your option)
++ * any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, see <http://www.gnu.org/licenses/>.
++ *
++ **/
++#include "fullscreenbackground.h"
++#include "mainwindow.h"
++#include <unistd.h>
++#include <QDebug>
++#include <QImageReader>
++#include <QPixmap>
++#include <QApplication>
++#include <QScreen>
++#include <QCursor>
++#include <QTimer>
++#include <QDesktopWidget>
++#include <QPainter>
++#include <QPainterPath>
++#include <KWindowSystem>
++#include <windowmanager/windowmanager.h>
++
++using namespace kdk;
++
++#define PERSONALSIE_SCHEMA "org.mate.background"
++#define PERSONALSIE_TRAN_KEY "picture-filename"
++
++#define USD_MEDIA_KEYS_SCHEMA "org.ukui.SettingsDaemon.plugins.media-keys"
++#define USD_MEDIA_KEYS_WINDOW_SWTICH_KEY "ukuiWindowSwitch"
++#define USD_MEDIA_KEYS_WINDOW_SWTICH2_KEY "ukuiWindowSwitch2"
++
++FullScreenBackground::FullScreenBackground(QWidget *parent) : QWidget(parent)
++{
++    m_isWayland = QString(qgetenv("XDG_SESSION_TYPE")) == "wayland";
++    initUI();
++    initConnections();
++}
++
++FullScreenBackground::~FullScreenBackground()
++{
++    closeDialog();
++}
++
++void FullScreenBackground::initMainWindow(
++    const QString &strIconName,
++    const QString &strMsg,
++    const QStringList &listUsers,
++    const QString &subjectPid,
++    const QString &callerPid,
++    const PolkitQt1::ActionDescription &actionDesc,
++    const bool &isMavis,
++    const bool &isSupportTableMode)
++{
++    if (!m_wndMain) {
++        if (m_isWayland) {
++            m_wndMain = new MainWindow();
++            m_wndMain->setWindowFlags(windowFlags() | Qt::Tool | Qt::WindowStaysOnTopHint);
++            KWindowSystem::setState(m_wndMain->winId(), NET::State::KeepAbove | NET::State::SkipTaskbar);
++        } else {
++            m_wndMain = new MainWindow(this);
++            m_wndMain->setModal(true);
++        }
++        setWindowFlags(windowFlags() & ~Qt::WindowMaximizeButtonHint & ~Qt::WindowMinimizeButtonHint);
++        m_wndMain->setWindowTitle(tr("Authentication"));
++        WindowManager::setSkipTaskBar(m_wndMain->windowHandle(), true);
++        m_wndMain->setIcon(strIconName);
++        m_wndMain->setCurProject(isMavis);
++        m_wndMain->setHeader(strMsg);
++        m_wndMain->setUsers(listUsers);
++        m_wndMain->setEditInputMethod(isSupportTableMode);
++        m_wndMain->setFixedSize(420, 337);
++        /*
++         *
++        mainWindow->setDetails(subjectPid, callerPid,
++                               actionDesc.actionId(),
++                               actionDesc.description(),
++                               actionDesc.vendorName(),
++                               actionDesc.vendorUrl());
++        */
++        connect(m_wndMain, &MainWindow::finished, this, [=](int nResult) {
++            qDebug() << "auth dialog finished:" << nResult;
++        });
++    }
++    if (m_isWayland) {
++        hide();
++    } else {
++        show();
++    }
++}
++
++void FullScreenBackground::initUI()
++{
++    setWindowTitle(tr("Authentication"));
++    if (m_isWayland) {
++        setAttribute(Qt::WA_TranslucentBackground);
++        setGeometry(0, 0, 0, 0);
++    } else {
++        setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint);
++        setWindowOpacity(0.25);
++        KWindowSystem::setState(winId(), NET::State::KeepAbove | NET::State::SkipTaskbar);
++        WindowManager::setSkipTaskBar(this->windowHandle(), true);
++        installEventFilter(this);
++
++        if (!isSupportCompositing()) {
++            m_pixmapBackground = getBackground();
++        }
++        setGeometry(0, 0, 7680, 4320);
++    }
++    qDebug() << "Window geometry:" << geometry();
++}
++
++void FullScreenBackground::initConnections()
++{
++    QDesktopWidget *desktop = QApplication::desktop();
++    if (desktop) {
++        connect(desktop, &QDesktopWidget::resized, this, &FullScreenBackground::onDesktopResized);
++        connect(desktop, &QDesktopWidget::workAreaResized, this, &FullScreenBackground::onWorkAreaResized);
++        connect(desktop, &QDesktopWidget::primaryScreenChanged, this, &FullScreenBackground::onPrimaryScreenChanged);
++        connect(desktop, &QDesktopWidget::screenCountChanged, this, &FullScreenBackground::onScreenCountChanged);
++    }
++}
++
++void FullScreenBackground::onScreenCountChanged(int)
++{
++    qDebug() << "onScreenCountChanged----";
++    if (m_isWayland) {
++        update();
++        moveToCursorScreen();
++        return;
++    }
++    QDesktopWidget *desktop = QApplication::desktop();
++    if ((desktop->geometry().x() != 0 || desktop->geometry().y() != 0) && this->geometry().contains(desktop->geometry())
++        && (QApplication::screens().count() == 1)) {
++        return;
++    }
++    if (desktop->geometry().height() > height() || desktop->geometry().width() > width()) {
++        setGeometry(
++            desktop->geometry().x(),
++            desktop->geometry().y(),
++            desktop->geometry().width() + 1,
++            desktop->geometry().height() + 1);
++    }
++
++    update();
++    moveToCursorScreen();
++    qDebug() << desktop->geometry();
++}
++
++void FullScreenBackground::onWorkAreaResized()
++{
++    qDebug() << "onWorkAreaResized----";
++    update();
++}
++
++void FullScreenBackground::onPrimaryScreenChanged()
++{
++    qDebug() << "onPrimaryScreenChanged----";
++    moveToCursorScreen();
++}
++
++void FullScreenBackground::onDesktopResized()
++{
++    qDebug() << "onDesktopResized----";
++    if (m_isWayland) {
++        update();
++        moveToCursorScreen();
++        return;
++    }
++    QDesktopWidget *desktop = QApplication::desktop();
++    if ((desktop->geometry().x() != 0 || desktop->geometry().y() != 0) && this->geometry().contains(desktop->geometry())
++        && (QGuiApplication::screens().count() == 1)) {
++        return;
++    }
++    if (desktop->geometry().height() > height() || desktop->geometry().width() > width()) {
++        setGeometry(
++            desktop->geometry().x(),
++            desktop->geometry().y(),
++            desktop->geometry().width() + 1,
++            desktop->geometry().height() + 1);
++    }
++
++    update();
++    moveToCursorScreen();
++    qDebug() << desktop->geometry();
++}
++
++void FullScreenBackground::showDialog()
++{
++    if (m_isFirstShow) {
++        m_isFirstShow = false;
++        blockSomeShortCut(true);
++        if (!m_isWayland) {
++            show();
++        }
++        if (m_wndMain) {
++            qDebug() << "DialogGeometry:" << m_wndMain->geometry();
++            m_wndMain->show();
++            m_wndMain->activateWindow();
++            // move auth dialog to cursor screen
++            moveToCursorScreen();
++        }
++    }
++}
++
++void FullScreenBackground::closeDialog()
++{
++    blockSomeShortCut(false);
++    if (m_wndMain) {
++        m_wndMain->hide();
++        m_wndMain->stopDoubleAuth();
++        m_wndMain->close();
++        m_wndMain->deleteLater();
++        m_wndMain = nullptr;
++    }
++}
++
++bool FullScreenBackground::isSupportCompositing()
++{
++    if (QString(qgetenv("XDG_SESSION_TYPE")) == "wayland") {
++        return true;
++    }
++    QDBusInterface kwinCompositor(
++        "org.ukui.KWin", "/Compositor", "org.freedesktop.DBus.Properties", QDBusConnection::sessionBus());
++    QDBusReply<QDBusVariant> sessionReply = kwinCompositor.call("Get", "org.kde.kwin.Compositing", "compositingType");
++    if (!sessionReply.isValid()) {
++        qWarning() << sessionReply.error();
++    } else {
++        QString strType = sessionReply.value().variant().toString();
++        if (strType.isEmpty() || strType == "none")
++            return false;
++    }
++    return true;
++}
++
++QPixmap FullScreenBackground::getBackground()
++{
++    QPixmap pixmapBackground;
++    QString strPicName = "";
++
++    // 获取桌面壁纸路径
++    QGSettings *personalGSettings = nullptr;
++    if (QGSettings::isSchemaInstalled(PERSONALSIE_SCHEMA)) {
++        personalGSettings = new QGSettings(PERSONALSIE_SCHEMA, QByteArray(), this);
++        QStringList keys = personalGSettings->keys();
++        if (keys.contains(PERSONALSIE_TRAN_KEY)) {
++            strPicName = personalGSettings->get(PERSONALSIE_TRAN_KEY).toString();
++        }
++        delete personalGSettings;
++        personalGSettings = nullptr;
++    }
++
++    // 文件存在且可读则加载图片
++    QFileInfo fileInfo(strPicName);
++    if (fileInfo.exists() && fileInfo.isReadable()) {
++        // do nothing
++    } else {
++        strPicName = getAccountBackground();
++    }
++
++    if (!strPicName.isEmpty()) {
++        QImageReader reader;
++        reader.setFileName(strPicName);
++        reader.setAutoTransform(true);
++        reader.setDecideFormatFromContent(true);
++        pixmapBackground = QPixmap::fromImageReader(&reader);
++    }
++
++    return pixmapBackground;
++}
++
++QString FullScreenBackground::getAccountBackground()
++{
++    QString strTmpPicName = "/usr/share/backgrounds/ubuntukylin-default-settings.jpg";
++
++    uid_t uid = getuid();
++    QDBusInterface iface(
++        "org.freedesktop.Accounts",
++        "/org/freedesktop/Accounts",
++        "org.freedesktop.Accounts",
++        QDBusConnection::systemBus());
++
++    QDBusReply<QDBusObjectPath> userPath = iface.call("FindUserById", (qint64)uid);
++    if (!userPath.isValid()) {
++        return strTmpPicName;
++    } else {
++        QDBusInterface userIface(
++            "org.freedesktop.Accounts",
++            userPath.value().path(),
++            "org.freedesktop.DBus.Properties",
++            QDBusConnection::systemBus());
++        QDBusReply<QDBusVariant> backgroundReply
++            = userIface.call("Get", "org.freedesktop.Accounts.User", "BackgroundFile");
++        if (backgroundReply.isValid()) {
++            QString strPicName = backgroundReply.value().variant().toString();
++            if (!strPicName.isEmpty()) {
++                QFileInfo fileInfo(strPicName);
++                if (fileInfo.exists() && fileInfo.isReadable()) {
++                    return strPicName;
++                }
++            }
++        }
++    }
++
++    return strTmpPicName;
++}
++
++void FullScreenBackground::moveToScreen(QScreen *screen)
++{
++    // 将主全屏更新到新屏幕上,并重新将对话框居中
++    if (!screen) {
++        return;
++    }
++
++    if (m_wndMain) {
++        QRect rectParent = screen->geometry();
++        QRect rectDes = QRect(
++            rectParent.x() + (rectParent.width() - m_wndMain->width()) / 2,
++            rectParent.y() + (rectParent.height() - m_wndMain->height()) / 2,
++            m_wndMain->width(),
++            m_wndMain->height());
++
++        WindowManager::setGeometry(m_wndMain->windowHandle(), rectDes);
++        qDebug() << "new rect:" << rectParent << "," << rectDes << "," << m_wndMain->geometry();
++    }
++}
++
++void FullScreenBackground::moveToCursorScreen()
++{
++    bool isFoundScreen = false;
++    if (m_isWayland) {
++        QString strCurScreen = WindowManager::currentOutputName();
++        for (auto screen : QApplication::screens()) {
++            qDebug() << "Screen:" << screen->name() << "," << screen->geometry();
++            if (screen && screen->name() == strCurScreen) {
++                isFoundScreen = true;
++                moveToScreen(screen);
++                break;
++            }
++        }
++    } else {
++        QPoint cursor = QCursor::pos();
++        for (auto screen : QApplication::screens()) {
++            qDebug() << "Screen:" << screen->name() << "," << screen->geometry();
++            if (screen && screen->geometry().contains(cursor)) {
++                isFoundScreen = true;
++                moveToScreen(screen);
++                break;
++            }
++        }
++    }
++    if (!isFoundScreen) {
++        if (QApplication::primaryScreen()) {
++            moveToScreen(QApplication::primaryScreen());
++        }
++        isFoundScreen = true;
++    }
++}
++
++void FullScreenBackground::paintEvent(QPaintEvent *event)
++{
++    if (!m_isWayland) {
++        for (auto screen : QApplication::screens()) {
++            QPainter painter(this);
++            if (!m_pixmapBackground.isNull()) {
++                painter.drawPixmap(screen->geometry(), m_pixmapBackground);
++            }
++        }
++    }
++    return QWidget::paintEvent(event);
++}
++
++void FullScreenBackground::closeEvent(QCloseEvent *event)
++{
++    qDebug() << "FullScreenBackground::closeEvent";
++    if (!m_isWayland) {
++        // 断开屏幕变化信号
++        QDesktopWidget *desktop = QApplication::desktop();
++        disconnect(desktop, &QDesktopWidget::resized, this, &FullScreenBackground::onDesktopResized);
++        disconnect(desktop, &QDesktopWidget::workAreaResized, this, &FullScreenBackground::onWorkAreaResized);
++        disconnect(desktop, &QDesktopWidget::primaryScreenChanged, this, &FullScreenBackground::onPrimaryScreenChanged);
++        disconnect(desktop, &QDesktopWidget::screenCountChanged, this, &FullScreenBackground::onScreenCountChanged);
++    }
++
++    return QWidget::closeEvent(event);
++}
++
++void FullScreenBackground::resizeEvent(QResizeEvent *event)
++{
++    Q_UNUSED(event);
++    qDebug() << "WndSize:" << this->size();
++}
++
++void FullScreenBackground::blockSomeShortCut(bool isBlock /* = false*/)
++{
++    static bool sIsBlocked = false;
++    if (sIsBlocked == isBlock) {
++        return;
++    }
++    QStringList listBlockShortCut = {
++        "Minimize All Window",                                               // 最小化所有窗口
++        "Minimize Or Unminimize All Window Besides Active Window",           // 最小化或还原非焦点窗口
++        "Multitask View show",                                               // 显示工作区
++        "Show/Hide Desktop",                                                 // 显示/隐藏桌面
++        "ShowDesktopGrid",                                                   // Show Desktop Grid
++        "ShowMultitaskView",                                                 // Show Multitask View
++        "Switch One Desktop Down",                                           // 切换到下面的桌面
++        "Switch One Desktop Up",                                             // 切换到上面的桌面
++        "Switch One Desktop to the Left",                                    // 切换到左边的工作区
++        "Switch One Desktop to the Right",                                   // 切换到右边的工作区
++        "Switch to Desktop 1",                                               // 切换到桌面 1
++        "Switch to Desktop 2",                                               // 切换到桌面 2
++        "Switch to Desktop 3",                                               // 切换到桌面 3
++        "Switch to Desktop 4",                                               // 切换到桌面 4
++        "Switch to Next Screen",                                             // 切换到下一屏幕
++        "Switch to Previous Screen",                                         // 切换到上一个屏幕
++        "Toggle Window Raise/Lower",                                         // 窗口置前或置后
++        "Unminimize All Window",                                             // 还原所有最小化窗口
++        "Walk Through Desktop List",                                         // 遍历桌面列表
++        "Walk Through Desktop List (Reverse)",                               // 遍历桌面列表(反向)
++        "Walk Through Desktops",                                             // 遍历桌面
++        "Walk Through Desktops (Reverse)",                                   // 遍历桌面(反向)
++        "Walk Through Windows",                                              // 遍历窗口
++        "Walk Through Windows (Reverse)",                                    // 遍历窗口(反向)
++        "Walk Through Windows Alternative",                                  // 遍历窗口候选
++        "Walk Through Windows Alternative (Reverse)",                        // 遍历窗口候选(反向)
++        "Walk Through Windows of Current Application",                       // 遍历当前应用程序窗口
++        "Walk Through Windows of Current Application (Reverse)",             // 遍历当前应用程序窗口(反向)
++        "Walk Through Windows of Current Application Alternative",           // 遍历当前应用程序窗口候选
++        "Walk Through Windows of Current Application Alternative (Reverse)", // 遍历当前应用程序窗口候选(反向)
++        "Walk Through fullscreenWindows",                                    // 遍历所有最大化或全屏窗口
++        "Window Lower",                                                      // 降低窗口
++        "Window Maximize",                                                   // 最大化窗口
++        "Window Maximize Horizontal",                                        // 水平最大化窗口
++        "Window Maximize Vertical",                                          // 垂直最大化窗口
++        "Window Minimize",                                                   // 最小化窗口
++        "Window On All Desktops",                                            // 将窗口放到全部桌面
++        "Window One Desktop Down",                                           // 窗口下移一个桌面
++        "Window One Desktop Up",                                             // 窗口上移一个桌面
++        "Window One Desktop to the Left",                                    // 窗口左移一个桌面
++        "Window One Desktop to the Right",                                   // 窗口右移一个桌面
++        "Window Operations Menu",                                            // 窗口操作菜单
++        "Window Quick Move And Maximize Left Screen",  // 窗口快速移动并最大化到下一个屏幕
++        "Window Quick Move And Maximize Right Screen", // 窗口快速移动并最大化到上一个屏幕
++        "Window Quick Move Left Screen",               // 窗口快速移动到下一个屏幕
++        "Window Quick Move Right Screen",              // 窗口快速移动到上一个屏幕
++        "Window to Desktop 1",                         // 窗口到桌面 1
++        "Window to Desktop 2",                         // 窗口到桌面 2
++        "Window to Desktop 3",                         // 窗口到桌面 3
++        "Window to Desktop 4",                         // 窗口到桌面 4
++        "Window to Next Desktop",                      // 窗口到下一桌面
++        "Window to Next Screen",                       // 窗口到下一屏幕
++        "Window to Previous Desktop",                  // 窗口到前一桌面
++        "Window to Previous Screen",                   // 窗口到前一屏幕
++        "Window to Screen 0",                          // 窗口到屏幕 0
++        "Window to Screen 1",                          // 窗口到屏幕 1
++        "Window to Screen 2",                          // 窗口到屏幕 2
++        "Window to Screen 3",                          // 窗口到屏幕 3
++        "Window to Screen 4",                          // 窗口到屏幕 4
++    };
++    sIsBlocked = isBlock;
++    if (sIsBlocked) {
++        if (!m_isWayland) {
++            // kwin shortcut
++            QDBusInterface kwinInterface("org.ukui.KWin", "/KWin", "org.kde.KWin", QDBusConnection::sessionBus());
++            for (QString strShortCut : listBlockShortCut) {
++                QDBusMessage blockMessage = kwinInterface.call("blockShortcut", strShortCut, true);
++                if (blockMessage.type() == QDBusMessage::ErrorMessage) {
++                    qWarning() << "Kwin dbus error:" << blockMessage.errorMessage();
++                    break;
++                }
++            }
++        }
++
++        //  usd shortcut
++        if (!m_usdBlockShortCut) {
++            m_usdBlockShortCut = new USDBlockShortCut(this);
++        }
++    } else {
++        if (!m_isWayland) {
++            // kwin shortcut
++            QDBusInterface kwinInterface("org.ukui.KWin", "/KWin", "org.kde.KWin", QDBusConnection::sessionBus());
++            for (QString strShortCut : listBlockShortCut) {
++                QDBusMessage blockMessage = kwinInterface.call("blockShortcut", strShortCut, false);
++                if (blockMessage.type() == QDBusMessage::ErrorMessage) {
++                    qWarning() << "Kwin dbus error1:" << blockMessage.errorMessage();
++                    break;
++                }
++            }
++        }
++
++        //  usd shortcut
++        if (m_usdBlockShortCut) {
++            delete m_usdBlockShortCut;
++            m_usdBlockShortCut = nullptr;
++        }
++    }
++}
++
++bool FullScreenBackground::eventFilter(QObject *obj, QEvent *event)
++{
++    return QWidget::eventFilter(obj, event);
++}
+diff --git a/polkit-agent/src/fullscreenbackground.h b/polkit-agent/src/fullscreenbackground.h
+new file mode 100644
+index 0000000..90c0665
+--- /dev/null
++++ b/polkit-agent/src/fullscreenbackground.h
+@@ -0,0 +1,173 @@
++/*
++ * Copyright (C) 2024 Tianjin KYLIN Information Technology Co., Ltd.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 3, or (at your option)
++ * any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, see <http://www.gnu.org/licenses/>.
++ *
++ **/
++#ifndef FULLSCREENMANAGER_H
++#define FULLSCREENMANAGER_H
++
++#include <QWidget>
++#include <QList>
++#include <QPair>
++#include <QRect>
++#include <PolkitQt1/ActionDescription>
++#include <QPixmap>
++#include <QScreen>
++#include "usdblockshortcut.h"
++
++class MainWindow;
++class FullScreenBackground : public QWidget
++{
++    Q_OBJECT
++public:
++    explicit FullScreenBackground(QWidget *parent = nullptr);
++    virtual ~FullScreenBackground();
++
++    /**
++     * @brief getMainWindow 获取认证对话框
++     * @return 认证对话框指针
++     */
++    inline MainWindow *getMainWindow()
++    {
++        return m_wndMain;
++    }
++
++    /**
++     * @brief initMainWindow 初始化认证对话框
++     * @param strIconName 认证图标名称
++     * @param strMsg 认证消息
++     * @param listUsers 认证用户列表
++     * @param subjectPid 项目进程号
++     * @param callerPid 调用者进程号
++     * @param actionDesc 动作描述
++     * @param isMavis 是否为mavis平台
++     * @param isSupportTableMode 是否支持平板模式
++     */
++    void initMainWindow(
++        const QString &strIconName,
++        const QString &strMsg,
++        const QStringList &listUsers,
++        const QString &subjectPid,
++        const QString &callerPid,
++        const PolkitQt1::ActionDescription &actionDesc,
++        const bool &isMavis,
++        const bool &isSupportTableMode);
++
++    /**
++     * @brief showDialog 显示认证对话框
++     */
++    void showDialog();
++
++    /**
++     * @brief closeDialog 关闭认证对话框
++     */
++    void closeDialog();
++
++protected:
++    /**
++     * @brief paintEvent 绘制事件处理
++     * @param event 事件指针
++     */
++    void paintEvent(QPaintEvent *event);
++
++    /**
++     * @brief closeEvent 窗口关闭事件处理
++     * @param event 事件指针
++     */
++    void closeEvent(QCloseEvent *event);
++
++    /**
++     * @brief resizeEvent 窗口大小改变事件处理
++     * @param event 事件指针
++     */
++    void resizeEvent(QResizeEvent *event);
++
++    bool eventFilter(QObject *obj, QEvent *event);
++
++private Q_SLOTS:
++    /**
++     * @brief onScreenCountChanged 屏幕数变化处理
++     */
++    void onScreenCountChanged(int);
++
++    /**
++     * @brief onDesktopResized 桌面大小变化处理
++     */
++    void onDesktopResized();
++
++    /**
++     * @brief onPrimaryScreenChanged 主屏变化处理
++     */
++    void onPrimaryScreenChanged();
++
++    /**
++     * @brief onWorkAreaResized 工作区大小变化处理
++     */
++    void onWorkAreaResized();
++
++private:
++    /**
++     * @brief initUI 初始化UI
++     */
++    void initUI();
++
++    /**
++     * @brief initConnections 初始化信号槽连接
++     */
++    void initConnections();
++    /**
++     * @brief isSupportCompositing 是否支持窗口复合
++     * @return true 支持,否则不支持
++     */
++    bool isSupportCompositing();
++
++    /**
++     * @brief getBackground 获取背景
++     * @return 背景pixmap
++     */
++    QPixmap getBackground();
++
++    /**
++     * @brief getAccountBackground 获取账户背景
++     * @return 背景路径
++     */
++    QString getAccountBackground();
++
++    /**
++     * @brief moveToScreen 移动认证弹窗到指定屏幕
++     * @param screen 屏幕信息指针
++     */
++    void moveToScreen(QScreen *screen);
++
++    /**
++     * @brief moveToCursorScreen 移动认证窗口到光标屏幕
++     */
++    void moveToCursorScreen();
++
++    /**
++     * @brief blockSomeShortCut 禁启用快捷键
++     * @param isBlock 是否为禁用
++     */
++    void blockSomeShortCut(bool isBlock = false);
++
++private:
++    MainWindow *m_wndMain = nullptr;                // 认证对话框
++    QPixmap m_pixmapBackground;                     // 背景图
++    bool m_isFirstShow = true;                      // 第一次显示才主动移动对话框居中
++    USDBlockShortCut *m_usdBlockShortCut = nullptr; // usd禁启用快捷键实例
++    bool m_isWayland = false;
++};
++
++#endif // FULLSCREENMANAGER_H
+diff --git a/polkit-agent/src/kalabel.cpp b/polkit-agent/src/kalabel.cpp
+index a74f9da..9f14c79 100644
+--- a/polkit-agent/src/kalabel.cpp
++++ b/polkit-agent/src/kalabel.cpp
+@@ -17,15 +17,12 @@
+ **/
+ #include "kalabel.h"
+ 
+-
+-KALabel::KALabel(QWidget *parent)
+-    : QLabel(parent)
++KALabel::KALabel(QWidget *parent) : QLabel(parent)
+ {
+     m_strText = "";
+ }
+ 
+-KALabel::KALabel(QString strText, QWidget *parent)
+-    : QLabel(strText, parent)
++KALabel::KALabel(QString strText, QWidget *parent) : QLabel(strText, parent)
+ {
+     m_strText = strText;
+ }
+@@ -38,7 +35,7 @@ void KALabel::setText(const QString &strText)
+ 
+ void KALabel::paintEvent(QPaintEvent *event)
+ {
+-    QString strEText = getElidedText(font(),  width() ,m_strText);
++    QString strEText = getElidedText(font(), width(), m_strText);
+     if (strEText != m_strText) {
+         QLabel::setText(strEText);
+         setToolTip(m_strText);
+@@ -49,13 +46,12 @@ void KALabel::paintEvent(QPaintEvent *event)
+     QLabel::paintEvent(event);
+ }
+ 
+-QString KALabel::getElidedText(QFont font,int width,QString strInfo)
++QString KALabel::getElidedText(QFont font, int width, QString strInfo)
+ {
+     QFontMetrics fontMetrics(font);
+     //如果当前字体下,字符串长度大于指定宽度
+-    if(fontMetrics.width(strInfo) > width)
+-    {
+-        strInfo= QFontMetrics(font).elidedText(strInfo, Qt::ElideRight, width);
++    if (fontMetrics.width(strInfo) > width) {
++        strInfo = QFontMetrics(font).elidedText(strInfo, Qt::ElideRight, width);
+     }
+     return strInfo;
+ }
+diff --git a/polkit-agent/src/kalabel.h b/polkit-agent/src/kalabel.h
+index 8fc9b53..7ee60cb 100644
+--- a/polkit-agent/src/kalabel.h
++++ b/polkit-agent/src/kalabel.h
+@@ -26,7 +26,8 @@ class KALabel : public QLabel
+ public:
+     KALabel(QWidget *parent = nullptr);
+     KALabel(QString strText, QWidget *parent = nullptr);
+-    QString getElidedText(QFont font,int width,QString strInfo);
++    QString getElidedText(QFont font, int width, QString strInfo);
++
+ public slots:
+     void setText(const QString &);
+ 
+diff --git a/polkit-agent/src/mainwindow.cpp b/polkit-agent/src/mainwindow.cpp
+index 74a0730..1a99b89 100644
+--- a/polkit-agent/src/mainwindow.cpp
++++ b/polkit-agent/src/mainwindow.cpp
+@@ -13,8 +13,8 @@
+  *
+  * You should have received a copy of the GNU General Public License
+  * along with this program; if not, see <http://www.gnu.org/licenses/>.
+- * 
+-**/
++ *
++ **/
+ #include "mainwindow.h"
+ #include "ui_mainwindow.h"
+ #include <QMovie>
+@@ -44,58 +44,38 @@
+ #include "biotypes.h"
+ #include "modeButton.h"
+ #include <QDebug>
++#include <windowmanager/windowmanager.h>
+ #define _(string) gettext(string)
+ extern void qt_blurImage(QImage &blurImage, qreal radius, bool quality, int transposed);
+ 
+-MainWindow::MainWindow(QWidget *parent) :
+-    QWidget(parent),
+-    ui(new Ui::MainWindow),
+-    users(new Users(this)),
+-    enableBioAuth(false),
+-    receiveBioPAM(false),
+-    authMode(UNDEFINED),
+-    useDoubleAuth(false),
+-    m_timer(nullptr),
+-    w_timer(nullptr),
+-    isLockingFlg(false),
+-    m_nCurLockMin(0),
+-    isbioSuccess(false)
++MainWindow::MainWindow(QWidget *parent)
++    : kdk::KDialog(parent)
++    , ui(new Ui::MainWindow)
++    , users(new Users(this))
++    , enableBioAuth(false)
++    , receiveBioPAM(false)
++    , authMode(UNDEFINED)
++    , useDoubleAuth(false)
++    , m_timer(nullptr)
++    , w_timer(nullptr)
++    , isLockingFlg(false)
++    , m_nCurLockMin(0)
++    , isbioSuccess(false)
+ {
+-    setWindowFlags(Qt::Tool | Qt::WindowCloseButtonHint | Qt::WindowStaysOnTopHint);
+     ui->setupUi(this);
+-    setWindowTitle(tr("Authentication"));
++    mainLayout()->addLayout(ui->verticalLayout_2);
+ 
+     pam_tally_init(); //
+ 
+-//    headerLayout = new QHBoxLayout();
+-//    headerLayout->setContentsMargins(8,0,8,0);
+-//    headerLayout->setSpacing(8);
+-//    logoLabel = new QLabel();
+-//    logoLabel->setPixmap(QIcon::fromTheme("ukui-polkit").pixmap(QSize(24,24)));
+-//    headerLayout->addWidget(logoLabel);
+-//    titleLabel = new QLabel();
+-//    titleLabel->setText(tr("Authenticate"));
+-//    headerLayout->addWidget(titleLabel);
+-//    ui->headerWidget->setLayout(headerLayout);
+-//    headerLayout->addStretch();
+-//    closeBtn = new QPushButton();
+-//    closeBtn->setFixedSize(30, 30);
+-//    closeBtn->setToolTip(tr("Close"));
+-//    closeBtn->setProperty("isWindowButton", 0x02);
+-//    closeBtn->setProperty("useIconHighlightEffect", 0x08);
+-//    closeBtn->setFlat(true);
+-//    closeBtn->setIcon(QIcon::fromTheme("window-close-symbolic"));
+-//    connect(closeBtn, &QPushButton::clicked, this, &MainWindow::close);
+-//    headerLayout->addWidget(closeBtn);
+-
+     // 登录选项
+     m_labelTip = new KALabel();
+     m_labelTip->setText("");
++    m_labelTip->setFixedHeight(30);
+     m_labelTip->hide();
+     m_loginOptsWidget = new LoginOptionsWidget();
+     m_loginOptsWidget->hide();
+     ui->titleTipLayout->addWidget(m_labelTip);
+-    ui->loginOptionsLayout->setAlignment(Qt::AlignTop|Qt::AlignCenter);
++    ui->loginOptionsLayout->setAlignment(Qt::AlignTop | Qt::AlignCenter);
+     ui->loginOptionsLayout->addWidget(m_loginOptsWidget);
+     ui->loadingUkeyWidget->adjustSize();
+     ui->loadingUkeyWidget->hide();
+@@ -103,174 +83,19 @@ MainWindow::MainWindow(QWidget *parent) :
+     ui->loadingUkeyBtn->setAttribute(Qt::WA_TransparentForMouseEvents, true);
+     ui->ukeyPassword->setEchoMode(QLineEdit::Password);
+     ui->loadingUkeyLbl->setText(tr("Insert the ukey into the USB port"));
+-    ui->loadingUkeyLbl->setAlignment(Qt::AlignTop|Qt::AlignHCenter);
++    ui->loadingUkeyLbl->setAlignment(Qt::AlignTop | Qt::AlignHCenter);
+     ui->ukeyTipLbl->setText(tr("Enter the ukey password"));
+     ui->ukeyPassword->setPlaceholderText(tr("Input Password"));
++    ui->btnCancel->setAutoDefault(false);
++    ui->btnCancel->setDefault(false);
+     maxFailedTimes = bioDevices.getFailedTimes();
+     isHiddenSwitchButton = bioDevices.GetHiddenSwitchButton();
++    closeButton()->setToolTip(tr("Close"));
+ 
+-    connect(m_loginOptsWidget, &LoginOptionsWidget::optionSelected,
+-            this, [&](unsigned uCurLoginOptType, const DeviceInfoPtr &deviceInfo){
+-        isLoadingUkey = false;
+-
+-        if(uCurLoginOptType == LOGINOPT_TYPE_GENERAL_UKEY){
+-            stopLoadingUkey();
+-        }
+-
+-        if(uCurLoginOptType == LOGINOPT_TYPE_PASSWORD){
+-            switchLoginOptType(uCurLoginOptType);
+-            if(m_loginOptsWidget){
+-                m_loginOptsWidget->stopAuth();
+-            }
+-            m_deviceInfo = nullptr;
+-            authMode = PASSWORD;
+-            emit restartAuth();
+-            return;
+-        }
+-
+-        if (uCurLoginOptType != LOGINOPT_TYPE_GENERAL_UKEY && !deviceInfo)
+-            return;
+-
+-        if(deviceInfo)
+-            qDebug() << "device changed: " << deviceInfo->biotype;
+-
+-        if(deviceInfo && m_failMap[getUid(userName)][deviceInfo->device_id] >= maxFailedTimes){
+-            qDebug() << "Failed MAX!!";
+-            return ;
+-        }
+-
+-        if (uCurLoginOptType == LOGINOPT_TYPE_GENERAL_UKEY && !deviceInfo){
+-            isLoadingUkey = true;
+-            startLoadingUkey();
+-            m_loginOptsWidget->updateUkeyUIStatus(LOGINOPT_TYPE_GENERAL_UKEY);
+-        }else if(uCurLoginOptType == LOGINOPT_TYPE_GENERAL_UKEY && deviceInfo){
+-            stopLoadingUkey();
+-            m_loginOptsWidget->updateUkeyUIStatus(LOGINOPT_TYPE_GENERAL_UKEY);
+-        }
+-
+-        if (deviceInfo == m_deviceInfo) {
+-            return;
+-        }
+-
+-        if (uCurLoginOptType != LOGINOPT_TYPE_GENERAL_UKEY && deviceInfo == m_deviceInfo) {
+-            return ;
+-        }
+-
+-        if(m_bioTimer)
+-            m_bioTimer->stop();
+-
+-        m_deviceInfo = deviceInfo;
+-        switchLoginOptType(uCurLoginOptType);
+-        if(!isbioSuccess && m_deviceInfo) {
+-            startBioAuth();
+-        }
+-    });
+-
+-    connect(m_loginOptsWidget, &LoginOptionsWidget::notifyOptionsChange,
+-            this, [&](unsigned uOptionsCount){
+-        if (uOptionsCount > 0) {
+-            m_loginOptsWidget->show();
+-        } else {
+-            //m_loginOptsWidget->hide();
+-        }
+-	
+-        if (m_deviceInfo && m_deviceInfo->biotype == LOGINOPT_TYPE_GENERAL_UKEY){
+-    		stopLoadingUkey();
+-        }
+-
+-        if (!m_deviceInfo || !m_loginOptsWidget->findDeviceById(m_deviceInfo->device_id)
+-                || m_loginOptsWidget->isDeviceDisable(m_deviceInfo->device_id)) {
+-            m_loginOptsWidget->stopAuth();
+-            if (authMode != UNDEFINED) {
+-                authMode = UNDEFINED;
+-                emit switchToBiometric();
+-            }
+-        }
+-    });
+-
+-    connect(m_loginOptsWidget, &LoginOptionsWidget::authComplete,
+-            this, [&](uid_t uid, bool ret, int nStatus){
+-        qDebug() << "biometric authentication complete: " << uid << ret << nStatus;
+-
+-        if(m_deviceInfo && m_deviceInfo->biotype == LOGINOPT_TYPE_GENERAL_UKEY && ui->widgetUkeyAuth->isVisible()){
+-            ui->ukeyPassword->setText("");
+-        }
+-
+-        if(uid == getUid(userName) && ret) {
+-            isbioSuccess = true;
+-            emit switchToBiometric();
+-            authMode = UNDEFINED;
+-        } else {
+-            if (nStatus == 5 && m_deviceInfo) {
+-                if(w_timer && w_timer->isActive())
+-                    w_timer->stop();
+-                QImage imgFailed;
+-                m_loginOptsWidget->setFaceImg(imgFailed, 2);
+-                return;
+-            } else if (nStatus >= 2 && nStatus != 5)if (nStatus >= 2) {
+-                if (m_deviceInfo) {
+-                    uid_t curUid = getUid(userName);
+-                    if(m_failMap.contains(curUid) && m_failMap[curUid].contains(m_deviceInfo->device_id)){
+-                        m_failMap[curUid][m_deviceInfo->device_id] = m_failMap[curUid][m_deviceInfo->device_id] + 1;
+-                    }else{
+-                        m_failMap[curUid][m_deviceInfo->device_id] = 1;
+-                    }
+-                    qDebug()<<"Failed count:"<<m_failMap[curUid][m_deviceInfo->device_id]<<",Max:"<<maxFailedTimes;
+-                    if (m_deviceInfo->biotype == BIOTYPE_FACE) {
+-                        QImage imgFailed;
+-                        m_loginOptsWidget->setFaceImg(imgFailed, 1);
+-                    }
+-                    if(m_failMap[curUid][m_deviceInfo->device_id] >= maxFailedTimes){
+-                        no_changes = true;
+-                        if (m_deviceInfo->biotype == REMOTE_QRCODE_TYPE) {
+-                            setLoginTypeTip(tr("Failed to verify %1, please enter password to unlock").arg(BioDevices::bioTypeToString_tr(m_deviceInfo->biotype)));
+-                            QImage nullImage;
+-                            m_loginOptsWidget->setQRCode(nullImage);
+-                        } else if(m_deviceInfo->biotype == LOGINOPT_TYPE_GENERAL_UKEY){
+-                            ui->ukeyPassword->setReadOnly(true);
+-                            setUkeyTypeTip(tr("Unable to verify %1, please enter password to unlock").arg(BioDevices::bioTypeToString_tr(m_deviceInfo->biotype)));
+-                        }else {
+-                            setLoginTypeTip(tr("Unable to verify %1, please enter password to unlock").arg(BioDevices::bioTypeToString_tr(m_deviceInfo->biotype)));
+-                        }
+-
+-                        m_loginOptsWidget->setDeviceDisable(m_deviceInfo->device_id, true);
+-                        useDoubleAuth = false;
+-                        return ;
+-                    }
+-                    no_changes = false;
+-                    if(m_deviceInfo->biotype == LOGINOPT_TYPE_GENERAL_UKEY){
+-                        setUkeyTypeTip(tr("Failed to verify %1, you still have %2 verification opportunities")
+-                                       .arg(BioDevices::bioTypeToString_tr(m_deviceInfo->biotype))
+-                                       .arg(maxFailedTimes-m_failMap[curUid][m_deviceInfo->device_id]));
+-                    }else{
+-                        setLoginTypeTip(tr("Failed to verify %1, you still have %2 verification opportunities")
+-                                        .arg(BioDevices::bioTypeToString_tr(m_deviceInfo->biotype))
+-                                        .arg(maxFailedTimes-m_failMap[curUid][m_deviceInfo->device_id]));
+-                    }
+-                }
+-            }
+-            if(!isbioSuccess) {
+-                // dbus error
+-                if (nStatus == -1) {
+-                    qDebug()<<"Biometric dbus error:"<<authMode;
+-                }
+-                if (m_uCurLoginOptType == LOGINOPT_TYPE_QRCODE && nStatus == 1) {
+-                    m_isNetworkErr = true;
+-                    m_loginOptsWidget->setQRCodeMsg(tr("Abnormal network"));
+-                    startBioAuth(10000);
+-                } else {
+-                    startBioAuth();
+-                }
+-                if (nStatus >= 2 && m_deviceInfo) {
+-                    if (m_deviceInfo->biotype == BIOTYPE_FACE) {
+-                        QImage imgFailed;
+-                        m_loginOptsWidget->setFaceImg(imgFailed, 1);
+-                    }
+-                }
+-            }
+-        }
+-    });
+-
++    // 连接登录选项信号响应槽
++    connect(m_loginOptsWidget, &LoginOptionsWidget::optionSelected, this, &MainWindow::onOptionSelected);
++    connect(m_loginOptsWidget, &LoginOptionsWidget::notifyOptionsChange, this, &MainWindow::onNotifyOptionsChanged);
++    connect(m_loginOptsWidget, &LoginOptionsWidget::authComplete, this, &MainWindow::onLoginOptionsAuthCompleted);
+     connect(m_loginOptsWidget, &LoginOptionsWidget::updateAuthMsg, this, &MainWindow::onUpdateBioAuthMsg);
+     connect(m_loginOptsWidget, &LoginOptionsWidget::updateWndSize, this, &MainWindow::onUpdateWndSize);
+ 
+@@ -279,36 +104,29 @@ MainWindow::MainWindow(QWidget *parent) :
+     setStyleSheet(qssFile.readAll());
+     qssFile.close();
+ 
+-    //ui->cmbUsers->hide();
+-    //ui->widgetDetails->hide();
+-    //ui->btnDetails->setIcon(QIcon(":/image/assets/arrow_right.svg"));
+-    //ui->btnDetails->hide();
+     ui->lePassword->installEventFilter(this);
++    // 初始化UI状态
+     switchWidget(UNDEFINED);
+     editIcon();
+     ui->lblContent->adjustSize();
+-    ui->lblContent->height();
+-    ui->lblMessage->adjustSize();
++    ui->lblContent->hide();
++    ui->lblMessage->setFixedSize(372, 30);
+     ui->widgetPasswdAuth->adjustSize();
+     ui->widgetUkeyAuth->adjustSize();
+-    ui->lblMessage->height();
+     ui->cmbUsers->view()->setTextElideMode(Qt::ElideRight);
+-
+-    settings = new QGSettings("org.ukui.style","",this);
+-    fontSize  = settings->get("system-font-size").toInt();
+-    connect(settings, &QGSettings::changed,
+-            this, &MainWindow::onConfigurationChanged);
+-
+-    QDBusInterface *interfaceScreensaver = new QDBusInterface(
+-                "org.ukui.ScreenSaver",
+-                "/",
+-                "org.ukui.ScreenSaver",
+-                QDBusConnection::sessionBus());
+-    connect(interfaceScreensaver, SIGNAL(lock()),
+-            this, SLOT(onLockStatus()));
+-    connect(interfaceScreensaver, SIGNAL(unlock()),
+-            this, SLOT(onUnlockStatus()));
+-
++    ui->cmbUsers->setFixedHeight(36);
++    ui->lePassword->setFixedHeight(36);
++    ui->btnBioAuth->hide();
++    ui->returnButton->hide();
++
++    settings = new QGSettings("org.ukui.style", "", this);
++    fontSize = settings->get("system-font-size").toInt();
++    connect(settings, &QGSettings::changed, this, &MainWindow::onConfigurationChanged);
++
++    QDBusInterface *interfaceScreensaver
++        = new QDBusInterface("org.ukui.ScreenSaver", "/", "org.ukui.ScreenSaver", QDBusConnection::sessionBus());
++    connect(interfaceScreensaver, SIGNAL(lock()), this, SLOT(onLockStatus()));
++    connect(interfaceScreensaver, SIGNAL(unlock()), this, SLOT(onUnlockStatus()));
+ }
+ 
+ MainWindow::~MainWindow()
+@@ -318,19 +136,31 @@ MainWindow::~MainWindow()
+ 
+ void MainWindow::onConfigurationChanged(QString key)
+ {
+-    if(key == "systemFontSize"){
++    if (key == "systemFontSize") {
+         m_loginOptsWidget->updateUIStatus(false);
+-        fontSize  = settings->get("system-font-size").toInt();
++        fontSize = settings->get("system-font-size").toInt();
+     }
+-    if(key == "iconThemeName") {
++    if (key == "iconThemeName") {
+         setIcon(app_IconName);
+     }
++    if (key == "styleName") {
++        QPalette pe;
++        if (no_changes) {
++            pe.setColor(QPalette::WindowText, Qt::red);
++            m_labelTip->setPalette(pe);
++        } else {
++            QColor color = palette().color(QPalette::WindowText);
++            QPalette pal(this->palette());
++            pal.setColor(QPalette::WindowText, QColor(color));
++            m_labelTip->setPalette(pal);
++        }
++    }
+ }
+ 
+ void MainWindow::restart_bio_identify()
+ {
+     DeviceInfoPtr device = bioDevices.getDefaultDevice(getUid(userName));
+-    if(device){
++    if (device) {
+         m_loginOptsWidget->startAuth(device, getUid(userName));
+         setMessage(tr("Please enter your password or enroll your fingerprint "));
+     }
+@@ -338,21 +168,20 @@ void MainWindow::restart_bio_identify()
+ 
+ void MainWindow::closeEvent(QCloseEvent *event)
+ {
+-    m_loginOptsWidget->stopAuth();
++    if (m_loginOptsWidget) {
++        m_loginOptsWidget->stopAuth();
++    }
+     m_failMap.clear();
+     emit canceled();
+-
+-    return QWidget::closeEvent(event);
++    return kdk::KDialog::closeEvent(event);
+ }
+ 
+ void MainWindow::setUkeyTypeTip(QString text)
+ {
+     QString textTip = text;
+     if (!textTip.isEmpty()) {
+-//        QFontMetrics font(m_ukeyMessageLabel->font());
+-//        QString textTip = font.elidedText(textTip, Qt::ElideRight, m_messageLabel->width()-8);
+         QPalette pe;
+-        pe.setColor(QPalette::WindowText,Qt::red);
++        pe.setColor(QPalette::WindowText, Qt::red);
+         ui->ukeyMessage->setPalette(pe);
+         ui->ukeyMessage->setText(textTip);
+         ui->ukeyMessage->setToolTip(text);
+@@ -364,7 +193,7 @@ void MainWindow::setUkeyTypeTip(QString text)
+ 
+ void MainWindow::startLoadingUkey()
+ {
+-    m_loadingPixmap = QIcon::fromTheme("ukui-loading-0-symbolic").pixmap(27,27);
++    m_loadingPixmap = QIcon::fromTheme("ukui-loading-0-symbolic").pixmap(27, 27);
+     ui->loadingUkeyBtn->setIcon(m_loadingPixmap);
+     ui->loadingUkeyBtn->setIconSize(QSize(27, 27));
+ 
+@@ -378,8 +207,7 @@ void MainWindow::startLoadingUkey()
+     isLoadingUkey = true;
+     ui->loadingUkeyWidget->show();
+ 
+-    if(!m_loadingTimer)
+-    {
++    if (!m_loadingTimer) {
+         m_loadingTimer = new QTimer(this);
+         m_loadingTimer->setInterval(150);
+         connect(m_loadingTimer, &QTimer::timeout, this, &MainWindow::updateLoadingPixmap);
+@@ -390,13 +218,13 @@ void MainWindow::startLoadingUkey()
+ void MainWindow::stopLoadingUkey()
+ {
+     isLoadingUkey = false;
+-    if(m_loadingTimer){
++    if (m_loadingTimer) {
+         m_loadingTimer->stop();
+     }
+ 
+     ui->loadingUkeyWidget->hide();
+-    //ui->cmbUsers->show();
+-    //ui->widgetUkeyAuth->show();
++    // ui->cmbUsers->show();
++    // ui->widgetUkeyAuth->show();
+ }
+ 
+ void MainWindow::updateLoadingPixmap()
+@@ -409,20 +237,19 @@ void MainWindow::updateLoadingPixmap()
+ 
+ void MainWindow::paintEvent(QPaintEvent *event)
+ {
+-
+     Q_UNUSED(event);
+     QStyleOption *option = new QStyleOption();
+     QPainter p(this);
+     p.setRenderHint(QPainter::Antialiasing);
+     QPainterPath rectPath;
+-    rectPath.addRoundedRect(this->rect().adjusted(0,0,0,0),0,0);
++    rectPath.addRoundedRect(this->rect().adjusted(0, 0, 0, 0), 0, 0);
+     // 画一个黑底
+     QPixmap pixmap(this->rect().size());
+     pixmap.fill(Qt::transparent);
+     QPainter pixmapPainter(&pixmap);
+     pixmapPainter.setRenderHint(QPainter::Antialiasing);
+     pixmapPainter.setPen(Qt::transparent);
+-    pixmapPainter.setBrush(QColor(0,0,0,100));
++    pixmapPainter.setBrush(QColor(0, 0, 0, 100));
+     pixmapPainter.drawPath(rectPath);
+     pixmapPainter.end();
+ 
+@@ -444,34 +271,49 @@ void MainWindow::paintEvent(QPaintEvent *event)
+ 
+     // 绘制一个背景
+     p.save();
+-    p.fillPath(rectPath,option->palette.color(QPalette::Base));
++    p.fillPath(rectPath, option->palette.color(QPalette::Base));
+     p.restore();
+-    //绘制一个矩形
+-
+-    p.setPen(Qt::red);
+-    QRectF rect(0,290,20,20);
+-
+ }
+ 
+ bool MainWindow::eventFilter(QObject *obj, QEvent *event)
+ {
+-    if(obj == ui->lePassword){
+-        if(event->type() == QEvent::KeyPress){ //禁止复制粘贴功能。
++    if (obj == ui->lePassword) {
++        if (event->type() == QEvent::KeyPress) { // 禁止复制粘贴功能。
+             QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
+-            if(keyEvent->matches(QKeySequence::Copy) || keyEvent->matches(QKeySequence::Cut) || keyEvent->matches(QKeySequence::Paste)){
++            if (keyEvent->matches(QKeySequence::Copy) || keyEvent->matches(QKeySequence::Cut)
++                || keyEvent->matches(QKeySequence::Paste)) {
+                 event->ignore();
+                 return true;
+             }
+         }
+-        if(event->type() == QEvent::MouseButtonRelease) { //禁用鼠标中键
+-            QMouseEvent *mouseevent = static_cast<QMouseEvent*>(event);
+-            if(mouseevent->button() == Qt::MidButton){
++        if (event->type() == QEvent::MouseButtonRelease) { // 禁用鼠标中键
++            QMouseEvent *mouseevent = static_cast<QMouseEvent *>(event);
++            if (mouseevent->button() == Qt::MidButton) {
+                 event->ignore();
+                 return true;
+             }
+         }
++    } else if (obj == this) {
++        if (event->type() == QEvent::Show || event->type() == QEvent::UpdateRequest) {
++            if (QString(qgetenv("XDG_SESSION_TYPE")) == "wayland") {
++                WindowManager::setWindowLayer(this->windowHandle(), (kdk::WindowLayer)15);
++            }
++        }
++    }
++    return kdk::KDialog::eventFilter(obj, event);
++}
++
++void MainWindow::keyPressEvent(QKeyEvent *event)
++{
++    switch (event->key()) {
++        case Qt::Key_Escape: {
++            break;
++        }
++        default: {
++            kdk::KDialog::keyPressEvent(event);
++            break;
++        }
+     }
+-    return false;
+ }
+ 
+ /*** main ***/
+@@ -479,14 +321,14 @@ void MainWindow::on_cmbUsers_currentTextChanged(const QString &userName)
+ {
+     qDebug() << "user changed to " << userName;
+     m_loginOptsWidget->stopAuth();
+-    if(m_bioTimer && m_bioTimer->isActive())
++    if (m_bioTimer && m_bioTimer->isActive())
+         m_bioTimer->stop();
+-    authMode=UNDEFINED;
++    authMode = UNDEFINED;
+ 
+     QList<UserItem> accountUsers = users->getUsers();
+     this->userName = userName;
+-    for(UserItem user:accountUsers){
+-        if(user.realName == userName){
++    for (UserItem user : accountUsers) {
++        if (user.realName == userName) {
+             this->userName = user.name;
+         }
+     }
+@@ -506,36 +348,35 @@ int MainWindow::enable_biometric_authentication()
+     char line[1024], is_enable[16];
+     int i;
+ 
+-
+-    if((file = fopen(conf_file, "r")) == NULL){
++    if ((file = fopen(conf_file, "r")) == NULL) {
+         return 0;
+     }
+-    while(fgets(line, sizeof(line), file)) {
+-        i = sscanf(line, "EnableAuth=%s\n",  is_enable);
+-        if(i > 0) {
++    while (fgets(line, sizeof(line), file)) {
++        i = sscanf(line, "EnableAuth=%s\n", is_enable);
++        if (i > 0) {
+             break;
+         }
+     }
+ 
+     fclose(file);
+-    if(!strcmp(is_enable, "true"))
++    if (!strcmp(is_enable, "true"))
+         return 1;
+     return 0;
+ }
+ 
+ void MainWindow::on_btnDetails_clicked()
+-{/*
+-    if(ui->widgetDetails->isHidden()) {
+-        ui->widgetDetails->show();
+-        ui->btnDetails->setIcon(QIcon(":/image/assets/arrow_down.svg"));
+-//        resize(width(), height() + ui->widgetDetails->height());
+-    }
+-    else {
+-        ui->widgetDetails->hide();
+-        ui->btnDetails->setIcon(QIcon(":/image/assets/arrow_right.svg"));
+-//        resize(width(), height() - ui->widgetDetails->height());
+-    }
+-    adjustSize();*/
++{ /*
++     if(ui->widgetDetails->isHidden()) {
++         ui->widgetDetails->show();
++         ui->btnDetails->setIcon(QIcon(":/image/assets/arrow_down.svg"));
++ //        resize(width(), height() + ui->widgetDetails->height());
++     }
++     else {
++         ui->widgetDetails->hide();
++         ui->btnDetails->setIcon(QIcon(":/image/assets/arrow_right.svg"));
++ //        resize(width(), height() - ui->widgetDetails->height());
++     }
++     adjustSize();*/
+ }
+ 
+ void MainWindow::on_btnCancel_clicked()
+@@ -545,22 +386,37 @@ void MainWindow::on_btnCancel_clicked()
+ 
+ void MainWindow::on_btnAuth_clicked()
+ {
+-    if(ui->widgetUkeyAuth->isVisible()){
++    if (doNotNeedAuth) {
++        emit yesPrompted();
++        return;
++    }
++
++    if (ui->widgetUkeyAuth->isVisible()) {
+         on_ukeyPassword_returnPressed();
+-    }else{
++    } else {
+         on_lePassword_returnPressed();
+     }
+ }
+ 
++void MainWindow::onShowYesPrompt()
++{
++    doNotNeedAuth = true;
++    ui->widgetPasswdAuth->hide();
++    ui->cmbUsers->hide();
++    ui->btnBioAuth->hide();
++    ui->returnButton->hide();
++    ui->btnAuth->show();
++}
++
+ void MainWindow::onLockStatus()
+ {
+-    //m_loginOptsWidget->stopAuth();
++    // m_loginOptsWidget->stopAuth();
+     m_loginOptsWidget->lockStatusChanged(true);
+ }
+ 
+ void MainWindow::onUnlockStatus()
+ {
+-    //m_loginOptsWidget->readDevicesInfo();
++    // m_loginOptsWidget->readDevicesInfo();
+     m_loginOptsWidget->lockStatusChanged(false);
+     startBioAuth();
+ }
+@@ -570,7 +426,7 @@ void MainWindow::editIcon()
+ {
+     m_modeButton = new ModeButton(ui->lePassword);
+     m_modeButton->setFocusPolicy(Qt::NoFocus);
+-    connect(m_modeButton, &QPushButton::clicked, this, [=](){
++    connect(m_modeButton, &QPushButton::clicked, this, [=]() {
+         if (ui->lePassword->echoMode() == QLineEdit::Password) {
+             ui->lePassword->setEchoMode(QLineEdit::Normal);
+         } else {
+@@ -580,15 +436,15 @@ void MainWindow::editIcon()
+     QHBoxLayout *layout = new QHBoxLayout(ui->lePassword);
+     layout->addStretch();
+     layout->addWidget(m_modeButton);
+-    layout->setContentsMargins(0,0,8,0);
++    layout->setContentsMargins(0, 0, 8, 0);
+ 
+-    ui->lePassword->setTextMargins(1, 1, 4+ m_modeButton->width(), 1);
++    ui->lePassword->setTextMargins(1, 1, 4 + m_modeButton->width(), 1);
+ }
+ 
+ void MainWindow::on_ukeyPassword_returnPressed()
+ {
+-    if(m_loginOptsWidget && m_deviceInfo){
+-        m_loginOptsWidget->SetExtraInfo(ui->ukeyPassword->text(),"pincode");
++    if (m_loginOptsWidget && m_deviceInfo) {
++        m_loginOptsWidget->SetExtraInfo(ui->ukeyPassword->text(), "pincode");
+         m_loginOptsWidget->startAuth(m_deviceInfo, getUid(userName));
+     }
+ }
+@@ -598,8 +454,7 @@ void MainWindow::on_lePassword_returnPressed()
+     emit accept(ui->lePassword->text());
+     ui->btnAuth->hide();
+     ui->btnLoading->show();
+-    if(!w_timer)
+-    {
++    if (!w_timer) {
+         w_timer = new QTimer(this);
+         w_timer->setInterval(150);
+         connect(w_timer, &QTimer::timeout, this, &MainWindow::updatePixmap);
+@@ -625,20 +480,19 @@ void MainWindow::on_returnButton_clicked()
+ }
+ /*** end of control's slot ***/
+ 
+-
+ /*** public member ***/
+ 
+ void MainWindow::setIcon(const QString &iconName)
+ {
+-//    QIcon::setThemeName("ukui-icon-theme");
++    //    QIcon::setThemeName("ukui-icon-theme");
+     app_IconName = iconName;
+-    if(!QIcon::hasThemeIcon("ukui-polkit")) {
++    if (!QIcon::hasThemeIcon("ukui-polkit")) {
+         QDir iconsDir("/usr/share/icons");
+         auto themesList = iconsDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
+         qDebug() << themesList;
+-        for(auto theme : themesList) {
++        for (auto theme : themesList) {
+             QIcon::setThemeName(theme);
+-            if(QIcon::hasThemeIcon("ukui-polkit")) {
++            if (QIcon::hasThemeIcon("ukui-polkit")) {
+                 qDebug() << theme << "has ukui-polkit icon";
+                 break;
+             }
+@@ -649,25 +503,22 @@ void MainWindow::setIcon(const QString &iconName)
+     QPainter painter;
+ 
+     painter.begin(&icon);
+-    QRect rect(32,
+-               32,
+-               32, 32);
++    QRect rect(32, 32, 32, 32);
+     painter.drawPixmap(rect, actionIcon);
+     painter.end();
+ 
+     setWindowIcon(icon);
+-    //ui->lblIcon->setPixmap(icon);
++    // ui->lblIcon->setPixmap(icon);
+ }
+ 
+ void MainWindow::setHeader(const QString &text)
+ {
+-    if(is_Mavis)
++    if (is_Mavis)
+         ui->lblHeader->setText(tr("This operation requires the administrator's authorization. "
+-                               "Please enter your password to allow this operation."));
++                                  "Please enter your password to allow this operation."));
+     else
+         ui->lblHeader->setText(text);
+     ui->lblHeader->adjustSize();
+-    ui->lblHeader->height();
+     ui->lblContent->setText(tr("A program is attempting to perform an action that requires privileges."
+                                "It requires authorization to perform the action."));
+     ui->lblContent->adjustSize();
+@@ -675,24 +526,24 @@ void MainWindow::setHeader(const QString &text)
+ 
+ void MainWindow::setUsers(const QStringList &usersList)
+ {
+-    if(usersList.isEmpty())
++    if (usersList.isEmpty())
+         return;
+ 
+-    if(usersList.size() == 1) {
++    if (usersList.size() == 1) {
+         UserItem user = users->getUserByName(usersList.at(0));
+-        if(user.realName != ""){
++        if (user.realName != "") {
+             userName = user.realName;
+-        }else{
++        } else {
+             userName = usersList.at(0);
+         }
+     }
+ 
+     QList<UserItem> accountUsers = users->getUsers();
+-    for(QString identifyUser:usersList){
++    for (QString identifyUser : usersList) {
+         bool isFoundAccount = false;
+-        for(UserItem user:accountUsers){
+-            if(identifyUser == user.name){
+-                if(user.realName != "")
++        for (UserItem user : accountUsers) {
++            if (identifyUser == user.name) {
++                if (user.realName != "")
+                     ui->cmbUsers->addItem(user.realName);
+                 else
+                     ui->cmbUsers->addItem(user.name);
+@@ -706,7 +557,7 @@ void MainWindow::setUsers(const QStringList &usersList)
+     }
+ 
+     ui->cmbUsers->show();
+-    //ui->cmbUsers->adjustSize();
++    // ui->cmbUsers->adjustSize();
+ }
+ /*
+ void MainWindow::setDetails(const QString &subPid, const QString &callerPid, const QString &actionId,
+@@ -725,7 +576,7 @@ void MainWindow::setPrompt(const QString &text, bool echo)
+ {
+     QString prompt = text;
+ 
+-    if(text == "Input Password"){
++    if (text == "Input Password") {
+         prompt = tr("Input Password");
+     } else if (text == "Password: " || text == "Password:") {
+         prompt = tr("Password: ");
+@@ -734,18 +585,18 @@ void MainWindow::setPrompt(const QString &text, bool echo)
+     } else if (text == "_Password:") {
+         prompt = tr("_Password:");
+     }
+-    if(!m_timer){
++    if (!m_timer) {
+         m_timer = new QTimer(this);
+         m_timer->setInterval(200);
+         connect(m_timer, &QTimer::timeout, this, &MainWindow::unlock_countdown);
+     }
+-    //qDebug() << "6666";
++    // qDebug() << "6666";
+     m_timer->start();
+     unlock_countdown();
+ 
+     ui->lePassword->clear();
+     ui->lePassword->setPlaceholderText(prompt);
+-  //  switchWidget(PASSWORD);
++    //  switchWidget(PASSWORD);
+ }
+ 
+ /*
+@@ -756,89 +607,92 @@ void MainWindow::setPrompt(const QString &text, bool echo)
+ */
+ QString MainWindow::check_is_pam_message(QString text)
+ {
+-    setlocale(LC_ALL,"");
+-    bindtextdomain("Linux-PAM","/usr/share/locale");
+-    bind_textdomain_codeset("Linux-PAM","UTF-8");
++    if (text.isEmpty()) {
++        return text;
++    }
++    setlocale(LC_ALL, "");
++    bindtextdomain("Linux-PAM", "/usr/share/locale");
++    bind_textdomain_codeset("Linux-PAM", "UTF-8");
+     textdomain("Linux-PAM");
+-    char*  str;
++    char *str;
+     QString strTrans = "";
+     QByteArray ba = text.toLocal8Bit(); // must
+-    str=ba.data();
++    str = ba.data();
+     char l_str[1024];
+-    int a,b;
+-    //兼容旧版本翻译,以及适配新版本翻译
+-    //因为不知道什么原因,pam发过来的始终为英文,因此这里主动加载pam的翻译文件,使用gettext获取翻译
+-    if(text.contains("attemps",Qt::CaseSensitive) && sscanf(str,"Authenticated failed, %d login attemps left",&a))
+-          snprintf(l_str,1024,_("Authenticated failed, %d login attemps left"),a);
+-    else if(text.contains("attempts",Qt::CaseSensitive) && sscanf(str,"Authenticated failed, %d login attempts left",&a))
+-          snprintf(l_str,1024,_("Authenticated failed, %d login attempts left"),a);
+-    else if(text.contains("attempt",Qt::CaseSensitive) && sscanf(str,"Authenticated failed, %d login attempt left",&a))
+-          snprintf(l_str,1024,_("Authenticated failed, %d login attempt left"),a);
+-    else if(text.contains("days",Qt::CaseSensitive) && sscanf(str,"Account locked, %d days left",&a)){
+-	 //这里的消息是多个字符串拼接起来的,无法在翻译文件中找到对应的句子,只能自己翻译   
++    int a, b;
++    // 兼容旧版本翻译,以及适配新版本翻译
++    // 因为不知道什么原因,pam发过来的始终为英文,因此这里主动加载pam的翻译文件,使用gettext获取翻译
++    if (text.contains("attemps", Qt::CaseSensitive) && sscanf(str, "Authenticated failed, %d login attemps left", &a))
++        snprintf(l_str, 1024, _("Authenticated failed, %d login attemps left"), a);
++    else if (
++        text.contains("attempts", Qt::CaseSensitive) && sscanf(str, "Authenticated failed, %d login attempts left", &a))
++        snprintf(l_str, 1024, _("Authenticated failed, %d login attempts left"), a);
++    else if (
++        text.contains("attempt", Qt::CaseSensitive) && sscanf(str, "Authenticated failed, %d login attempt left", &a))
++        snprintf(l_str, 1024, _("Authenticated failed, %d login attempt left"), a);
++    else if (text.contains("days", Qt::CaseSensitive) && sscanf(str, "Account locked, %d days left", &a)) {
++        // 这里的消息是多个字符串拼接起来的,无法在翻译文件中找到对应的句子,只能自己翻译
+         strTrans = tr("Account locked,") + QString("%1 ").arg(a) + tr("days left");
+         return strTrans;
+-    }
+-    else if(text.contains("hours",Qt::CaseSensitive) && sscanf(str,"Account locked, %d hours left",&a)){
++    } else if (text.contains("hours", Qt::CaseSensitive) && sscanf(str, "Account locked, %d hours left", &a)) {
+         strTrans = tr("Account locked,") + QString("%1 ").arg(a) + tr("hours left");
+         return strTrans;
+-    }
+-    else if(text.contains("minutes",Qt::CaseSensitive) && sscanf(str,"Account locked, %d minutes left",&a)){
++    } else if (text.contains("minutes", Qt::CaseSensitive) && sscanf(str, "Account locked, %d minutes left", &a)) {
+         strTrans = tr("Account locked,") + QString("%1 ").arg(a) + tr("minutes left");
+         return strTrans;
+-    }
+-    else if(text.contains("seconds",Qt::CaseSensitive) && sscanf(str,"Account locked, %d seconds left",&a)){
++    } else if (text.contains("seconds", Qt::CaseSensitive) && sscanf(str, "Account locked, %d seconds left", &a)) {
+         strTrans = tr("Account locked,") + QString("%1 ").arg(a) + tr("seconds left");
+         return strTrans;
+-    }else if(text.contains("Warning: ",Qt::CaseSensitive) && sscanf(str,"Warning: your password will expire in %d day",&a)){
+-        snprintf(l_str,1024,_("Warning: your password will expire in %d day"),a);
+-    }else if(text.contains("Warning: ",Qt::CaseSensitive) && sscanf(str,"Warning: your password will expire in %d days",&a)){
+-        snprintf(l_str,1024,_("Warning: your password will expire in %d days"),a);
+-    }
+-    else{
++    } else if (
++        text.contains("Warning: ", Qt::CaseSensitive)
++        && sscanf(str, "Warning: your password will expire in %d day", &a)) {
++        snprintf(l_str, 1024, _("Warning: your password will expire in %d day"), a);
++    } else if (
++        text.contains("Warning: ", Qt::CaseSensitive)
++        && sscanf(str, "Warning: your password will expire in %d days", &a)) {
++        snprintf(l_str, 1024, _("Warning: your password will expire in %d days"), a);
++    } else {
+         return _(str);
+     }
+-          
+-    qDebug()<<"l_str = "<<l_str;
++
++    qDebug() << "l_str = " << l_str;
+     return QString(l_str);
+ }
+ 
+-void MainWindow::setMessage(const QString &text,situation situat)
++void MainWindow::setMessage(const QString &text, situation situat)
+ {
+ 
+-    if(situat == ERROR){
++    if (situat == ERROR) {
+         QPalette pe;
+-        pe.setColor(QPalette::WindowText,Qt::red);
++        pe.setColor(QPalette::WindowText, Qt::red);
+         ui->lblMessage->setPalette(pe);
+-//        ui->lePassword->setStyleSheet("QLineEdit{background-color: palette(Button);"
+-//                                      "border-radius: 6px;border: 1px solid #F3222D;}");
+-    }else if(situat == TRUE){
+-       QColor color = palette().color(QPalette::WindowText);
+-       QPalette pal(this->palette());
+-       pal.setColor(QPalette::WindowText,QColor(color));
+-       ui->lblMessage->setPalette(pal);
++        //        ui->lePassword->setStyleSheet("QLineEdit{background-color: palette(Button);"
++        //                                      "border-radius: 6px;border: 1px solid #F3222D;}");
++    } else if (situat == TRUE) {
++        QColor color = palette().color(QPalette::WindowText);
++        QPalette pal(this->palette());
++        pal.setColor(QPalette::WindowText, QColor(color));
++        ui->lblMessage->setPalette(pal);
+     }
+ 
+     // qDebug()<<"receive:text = "<<text;
+-    if (text.indexOf("account locked") != -1 || text.indexOf("账户已锁定") != -1 
+-        || text.indexOf("Account locked") != -1 || text.indexOf("永久锁定") != -1)
+-    {
+-        if(!m_timer){
++    if (text.indexOf("account locked") != -1 || text.indexOf("账户已锁定") != -1 || text.indexOf("Account locked") != -1
++        || text.indexOf("永久锁定") != -1) {
++        if (!m_timer) {
+             m_timer = new QTimer(this);
+             m_timer->setInterval(800);
+             connect(m_timer, &QTimer::timeout, this, &MainWindow::unlock_countdown);
+         }
+         m_timer->start();
+-    }else if (text.indexOf("No password received, please input password") != -1)
+-    {
++    } else if (text.indexOf("No password received, please input password") != -1) {
+         ui->lblMessage->setText(tr("Password cannot be empty"));
+         ui->lblMessage->setToolTip(tr("Password cannot be empty"));
+-    }else{
++    } else {
+         ui->lblMessage->setText(text);
+         ui->lblMessage->setToolTip(text);
+     }
+-    ui->lblMessage->adjustSize();
+-    //ui->widgetPasswdAuth->adjustSize();
++    // ui->lblMessage->adjustSize();
++    // ui->widgetPasswdAuth->adjustSize();
+     // ui->lblMessage->setText(text);
+ }
+ 
+@@ -846,36 +700,36 @@ void MainWindow::setAuthResult(bool result, const QString &text)
+ {
+     QString message = text;
+ 
+-    if(!result && text.isEmpty()){
++    if (!result && text.isEmpty()) {
+         message = tr("Authentication failed, please try again.");
+     }
+ 
+-    if(authMode == PASSWORD) {
++    if (authMode == PASSWORD) {
+         switchWidget(PASSWORD);
+-        setMessage(message,ERROR);
+-    }
+-    else if(authMode == BIOMETRIC)
+-        setMessage(message,ERROR);
+-
+-
++        setMessage(message, ERROR);
++    } else if (authMode == BIOMETRIC)
++        setMessage(message, ERROR);
+ }
+ 
+ void MainWindow::clearEdit()
+ {
+     ui->lePassword->setText("");
++    ui->lePassword->setDisabled(true);
++    ui->lePassword->setReadOnly(true);
+     ui->ukeyPassword->setText("");
++    ui->btnAuth->setDisabled(true);
+ }
+ 
+ void MainWindow::switchAuthMode(Mode mode)
+ {
+-    if(isbioSuccess){
++    if (isbioSuccess) {
+         accept(BIOMETRIC_SUCCESS);
+-        return ;
++        return;
+     }
+     int uid = getUid(userName);
+     m_loginOptsWidget->setUser(uid);
+     int count = m_loginOptsWidget->getLoginOptCount();
+-    enableBioAuth  = count > 0;
++    enableBioAuth = count > 0;
+     if (count < 1) {
+         setLoginTypeTip(tr("Input your password to authentication"));
+         m_loginOptsWidget->hide();
+@@ -884,185 +738,131 @@ void MainWindow::switchAuthMode(Mode mode)
+         m_loginOptsWidget->setEnabled(true);
+     }
+ 
+-    if(m_loginOptsWidget->getHasUkeyOptions()){
++    if (m_loginOptsWidget->getHasUkeyOptions()) {
+         setLoginTypeTip(tr("Input your password to authentication"));
+         m_loginOptsWidget->show();
+     }
+-    
+-    switch(mode){
+-    case PASSWORD:
+-    {
+-        qDebug() << "switch to password";
+ 
+-        authMode = mode;
++    switch (mode) {
++        case PASSWORD: {
++            qDebug() << "switch to password";
+ 
+-        if(!enableBioAuth || !receiveBioPAM || useDoubleAuth) {
+-            ui->btnBioAuth->hide();
+-        }else{
+-            ui->btnBioAuth->show();
+-        }
+-	
+-        if(isHiddenSwitchButton)
+-            ui->btnBioAuth->hide();
+-
+-
+-        // if(enableBioAuth && useDoubleAuth){
+-        //     DeviceInfoPtr device = bioDevices.getDefaultDevice(getUid(userName));
+-        //     if(device){
+-        //         widgetBioAuth->startAuth(getUid(userName), device);
+-        //     }
+-        // }
+-    }
+-        break;
+-    case BIOMETRIC:
+-    {
+-        if(authMode == PASSWORD){
+-            emit accept(BIOMETRIC_IGNORE);
+-            isFirstAuth = false;
+-            return;
+-        }
+-        authMode = mode;
+-        qDebug() << "switch to biometric";
+-        if (m_deviceInfo) {
+-            if (!m_loginOptsWidget->findDeviceById(m_deviceInfo->device_id)
+-                || m_loginOptsWidget->isDeviceDisable(m_deviceInfo->device_id)) {
+-                m_deviceInfo = DeviceInfoPtr();
+-            }
+-        }
++            authMode = mode;
+ 
+-        if(!enableBioAuth){
+-            qDebug() << "It doesn't meet the condition for enabling biometric authentication, switch to password.";
+-            emit accept(BIOMETRIC_IGNORE);
+-            isFirstAuth = false;
+-            return;
+-        } else if(authMode == BIOMETRIC) {
+-	    QString strDeviceName;
+-	    if(isLoadingUkey){
+-            strDeviceName = m_loginOptsWidget->GetDefaultDevice(uid, UniT_General_Ukey);
+-	    }else{
+-            strDeviceName = m_loginOptsWidget->GetDefaultDevice(uid);
+-	    }
+-	    //如果默认设备为空的话,第一次不启动生物识别认证
+-            if(strDeviceName.isEmpty() && !m_deviceInfo)
+-            {
+-                qDebug() << "No default device";
+-                emit accept(BIOMETRIC_IGNORE);
+-                isFirstAuth = false;
+-                return;
++            if (!enableBioAuth || !receiveBioPAM || useDoubleAuth) {
++                ui->btnBioAuth->hide();
++            } else {
++                ui->btnBioAuth->show();
+             }
+ 
+-            //第一次,获取默认设备的设备信息,之后使用的则是从设备选择窗口传出的设备信息
+-            if(!m_deviceInfo)
+-            {
+-                m_deviceInfo = m_loginOptsWidget->findDeviceByName(strDeviceName);
++            if (isHiddenSwitchButton) {
++                ui->btnBioAuth->hide();
+             }
+-            if(!m_deviceInfo){
++        } break;
++        case BIOMETRIC: {
++            if (authMode == PASSWORD) {
+                 emit accept(BIOMETRIC_IGNORE);
+                 isFirstAuth = false;
+                 return;
+             }
++            authMode = mode;
++            qDebug() << "switch to biometric";
++            if (m_deviceInfo) {
++                if (!m_loginOptsWidget->findDeviceById(m_deviceInfo->device_id)
++                    || m_loginOptsWidget->isDeviceDisable(m_deviceInfo->device_id)) {
++                    m_deviceInfo = DeviceInfoPtr();
++                }
++            }
+ 
+-            if(m_failMap.contains(uid) && m_failMap[uid].contains(m_deviceInfo->device_id)
+-                && m_failMap[uid][m_deviceInfo->device_id] >= maxFailedTimes){
++            if (!enableBioAuth) {
++                qDebug() << "It doesn't meet the condition for enabling biometric authentication, switch to password.";
+                 emit accept(BIOMETRIC_IGNORE);
+                 isFirstAuth = false;
+                 return;
+-            }
+-
+-            if(m_deviceInfo->biotype == LOGINOPT_TYPE_GENERAL_UKEY){
+-                if(isFirstAuth){
+-                    isFirstAuth = false;
+-                    m_deviceInfo = nullptr;
+-                    emit accept(BIOMETRIC_IGNORE);
+-                    return ;
++            } else if (authMode == BIOMETRIC) {
++                QString strDeviceName;
++                if (isLoadingUkey) {
++                    strDeviceName = m_loginOptsWidget->GetDefaultDevice(uid, UniT_General_Ukey);
++                } else {
++                    strDeviceName = m_loginOptsWidget->GetDefaultDevice(uid);
+                 }
+-                switchLoginOptType(LOGINOPT_TYPE_GENERAL_UKEY);
+-                stopLoadingUkey();
+-                startBioAuth();
+-                m_loginOptsWidget->setCurrentDevice(m_deviceInfo);
+-                m_loginOptsWidget->updateUIStatus(false);
+-
+-                return ;
+-            }
+-
+-            isFirstAuth = false;
+-            startBioAuth();
+-            emit accept(BIOMETRIC_IGNORE);
+-            return;
+-        } /*else if(authMode == UNDEFINED){
+-            authMode = BIOMETRIC;
+-
+-            if(enableBioAuth) {
+-                qDebug() << "enable biometric authenticaion";
+-                QString strDeviceName = m_loginOptsWidget->GetDefaultDevice(uid);
+-                //如果默认设备为空的话,第一次不启动生物识别认证
+-                if(strDeviceName.isEmpty() && !m_deviceInfo)
+-                {
++                // 如果默认设备为空的话,第一次不启动生物识别认证
++                if (strDeviceName.isEmpty() && !m_deviceInfo) {
+                     qDebug() << "No default device";
+-                    if(useFirstDevice == true){
+-                        m_deviceInfo = m_loginOptsWidget->getFirstDevInfo();
+-                    }else{
+-                        emit accept(BIOMETRIC_IGNORE);
+-                        return;
+-                    }
++                    emit accept(BIOMETRIC_IGNORE);
++                    isFirstAuth = false;
++                    return;
+                 }
+-                //第一次,获取默认设备的设备信息,之后使用的则是从设备选择窗口传出的设备信息
+-                if(!m_deviceInfo)
+-                {
++
++                // 第一次,获取默认设备的设备信息,之后使用的则是从设备选择窗口传出的设备信息
++                if (!m_deviceInfo) {
+                     m_deviceInfo = m_loginOptsWidget->findDeviceByName(strDeviceName);
+-                    if (!m_deviceInfo)
+-                        m_deviceInfo = m_loginOptsWidget->getFirstDevInfo();
+                 }
+-                if(!m_deviceInfo){
++
++                if (!m_deviceInfo) {
+                     emit accept(BIOMETRIC_IGNORE);
++                    isFirstAuth = false;
+                     return;
+                 }
+-                if(m_failMap.contains(uid) && m_failMap[uid].contains(m_deviceInfo->device_id)
+-                    && m_failMap[uid][m_deviceInfo->device_id] >= maxFailedTimes){
++
++                if (m_failMap.contains(uid) && m_failMap[uid].contains(m_deviceInfo->device_id)
++                    && m_failMap[uid][m_deviceInfo->device_id] >= maxFailedTimes) {
+                     emit accept(BIOMETRIC_IGNORE);
++                    isFirstAuth = false;
++                    return;
++                }
++
++                if (m_deviceInfo->biotype == LOGINOPT_TYPE_GENERAL_UKEY) {
++                    if (isFirstAuth) {
++                        isFirstAuth = false;
++                        m_deviceInfo = nullptr;
++                        emit accept(BIOMETRIC_IGNORE);
++                        return;
++                    }
++                    switchLoginOptType(LOGINOPT_TYPE_GENERAL_UKEY);
++                    stopLoadingUkey();
++                    startBioAuth();
++                    m_loginOptsWidget->setCurrentDevice(m_deviceInfo);
++                    m_loginOptsWidget->updateUIStatus(false);
+                     return;
+                 }
++
++                isFirstAuth = false;
++                switchLoginOptType(m_loginOptsWidget->convertDeviceType(m_deviceInfo->biotype));
+                 startBioAuth();
+                 emit accept(BIOMETRIC_IGNORE);
+                 return;
+-            } else {*/
+-                /* pass biometric's pam module if there are not available devices */
+-//                qDebug() << "It doesn't meet the condition for enabling biometric authentication, switch to password.";
+-//                emit accept(BIOMETRIC_IGNORE);
+-//                return;
+-//            }
+-//        }
+-    }
+-        break;
+-    default:
+-        break;
++            }
++        } break;
++        default:
++            break;
+     }
+     switchWidget(mode);
+ }
+ 
+ /*** end of public memeber ***/
+ 
+-
+ /*** private member ***/
+ 
+ uid_t MainWindow::getUid(const QString &userName)
+ {
+     struct passwd *pwd = getpwnam(userName.toStdString().c_str());
+-    if(pwd == NULL) {
++    if (pwd == NULL) {
+         qWarning() << "getpwnam error: " << strerror(errno);
+         return -1;
+     }
+     return pwd->pw_uid;
+ }
+ 
+-void MainWindow::setDoubleAuth(bool val){
+-     useDoubleAuth = val;
++void MainWindow::setDoubleAuth(bool val)
++{
++    useDoubleAuth = val;
+ }
+ 
+ void MainWindow::stopDoubleAuth()
+ {
+-//    if(useDoubleAuth && widgetBioAuth)
+-//        widgetBioAuth->stopAuth();
++    //    if(useDoubleAuth && widgetBioAuth)
++    //        widgetBioAuth->stopAuth();
+ }
+ 
+ void MainWindow::switchWidget(Mode mode)
+@@ -1071,127 +871,110 @@ void MainWindow::switchWidget(Mode mode)
+     ui->btnAuth->hide();
+     ui->btnLoading->hide();
+     ui->btnAuth->setText(tr("Authenticate"));
+-    ui->btnAuth->adjustSize();
+     ui->btnBioAuth->setText(tr("Biometric"));
+-    ui->btnBioAuth->adjustSize();
+     ui->btnCancel->setText(tr("Cancel"));
+-    ui->btnCancel->adjustSize();
+     ui->returnButton->setText(tr("Use password"));
+     ui->btnLoading->setDisabled(true);
+-    ui->returnButton->adjustSize();
+-    m_labelTip->adjustSize();
+-    if(is_Mavis){
++    if (is_Mavis) {
+         ui->cmbUsers->setFixedHeight(48);
+         ui->lePassword->setFixedHeight(48);
+         ui->ukeyPassword->setFixedHeight(48);
+         ui->btnAuth->setFixedHeight(48);
+         ui->btnCancel->setFixedHeight(48);
+-    }
+-    switch(mode){
+-    case PASSWORD:
+-    {
+-        setFixedWidth(420);
+-
+-        if (m_deviceInfo && m_loginOptsWidget->findDeviceById(m_deviceInfo->device_id)) {
+-            switchLoginOptType(m_loginOptsWidget->convertDeviceType(m_deviceInfo->biotype));
+-        } else {
+-            switchLoginOptType(LOGINOPT_TYPE_PASSWORD);
+-        }
+-        if (!m_loginOptsWidget->isHidden()) {
+-            m_loginOptsWidget->adjustSize();
+-        }
+-        int height;
+-        if(fontSize = 10){
+-            height = 130 + ui->lblHeader->height() /*+ ui->lblContent->height()*/
+-                    + ui->cmbUsers->height() + ui->lePassword->height() + ui->lblMessage->height()
+-                    + ui->btnAuth->height();
+-        } else if(fontSize = 11 ){
+-            height = 150 + ui->lblHeader->height() /*+ ui->lblContent->height()*/
+-                    + ui->cmbUsers->height() + ui->lePassword->height() + ui->lblMessage->height()
+-                    + ui->btnAuth->height();
+-        } else if (fontSize = 12){
+-            height = 160 + ui->lblHeader->height() /*+ ui->lblContent->height()*/
+-                    + ui->cmbUsers->height() + ui->lePassword->height() + ui->lblMessage->height()
+-                    + ui->btnAuth->height();
+-        } else if (fontSize = 13){
+-            height = 170 + ui->lblHeader->height() /*+ ui->lblContent->height()*/
+-                    + ui->cmbUsers->height() + ui->lePassword->height() + ui->lblMessage->height()
+-                    + ui->btnAuth->height();
+-        } else if (fontSize = 14){
+-            height = 190 + ui->lblHeader->height() /*+ ui->lblContent->height()*/
+-                    + ui->cmbUsers->height() + ui->lePassword->height() + ui->lblMessage->height()
+-                    + ui->btnAuth->height();
+-        } else if (fontSize = 15){
+-            height = 230 + ui->lblHeader->height() /*+ ui->lblContent->height()*/
+-                    + ui->cmbUsers->height() + ui->lePassword->height() + ui->lblMessage->height()
+-                    + ui->btnAuth->height();
+-        }
+-//        if (m_loginOptsWidget->isHidden()) {
+-//            height = height - m_labelTip->height() - 10;
+-//        }
+-
+-        unsigned uOptsWidgetHeight = m_loginOptsWidget->height();
+-        if (m_loginOptsWidget->isHidden()) {
+-            uOptsWidgetHeight = 0;
+-            height = height + m_labelTip->height() - 10;
+-        }
+-        setFixedHeight(height + uOptsWidgetHeight + 10);
+-
+-        //m_loginOptsWidget->updateUIStatus();
+-        ui->btnBioAuth->setStyleSheet("QPushButton{font-size:14px;}QPushButton:hover{border:none;color:#3E6CE5;}QPushButton:pressed{border:none;}");
+-        ui->btnBioAuth->setFlat(true);
+-        ui->btnBioAuth->setText(tr("Biometric"));
+-        ui->btnBioAuth->setAttribute(Qt::WA_UnderMouse,false);
+-        ui->btnBioAuth->adjustSize();
+-        ui->widgetPasswdAuth->show();
+-        ui->lePassword->setFocus();
+-        //ui->lePassword->setAttribute(Qt::WA_InputMethodEnabled, false);
+-        if (m_modeButton && m_modeButton->isShowPwd()) {
+-            ui->lePassword->setEchoMode(QLineEdit::Normal);
+-        } else {
+-            ui->lePassword->setEchoMode(QLineEdit::Password);
+-        }
+-        ui->btnAuth->show();
+-        ui->btnLoading->hide();
+-        //ui->lePassword->setDisabled(false);
+-        if(w_timer && w_timer->isActive())
+-        {
+-            w_timer->stop();
+-        }
+-        ui->btnCancel->show();
+-        //ui->lblContent->show();
+-        ui->returnButton->hide();
+-        ui->lblContent->hide();
+-    }
+-        break;
+-
+-    case BIOMETRIC:
+-        setFixedWidth(420);
+-        if(m_loginOptsWidget->getLoginOptCount() <= 1){
+-            setFixedHeight(392+ui->cmbUsers->height()+ui->lblHeader->height());
+-        } else {
+-            setFixedHeight(482+ui->cmbUsers->height()+ui->lblHeader->height());
+-        }
+-
+-        ui->btnCancel->hide();
+-        ui->lblContent->hide();
+-        ui->btnBioAuth->hide();
+-        ui->returnButton->show();
+-        ui->returnButton->setAttribute(Qt::WA_UnderMouse,false);
+-        ui->returnButton->setFlat(true);
+-        ui->returnButton->setStyleSheet("QPushButton{font-size:14px;}QPushButton:hover{border:none;color:#3E6CE5;}QPushButton:pressed{border:none;}");
+-        ui->returnButton->setText(tr("Use password"));
+-        ui->returnButton->adjustSize();
+-        break;
+-//    case DEVICES:
+-//        widgetBioAuth->show();
+-
+-//        break;
+-    default:
+-        break;
++    } else {
++        ui->cmbUsers->setFixedHeight(36);
++        ui->lePassword->setFixedHeight(36);
++        ui->ukeyPassword->setFixedHeight(36);
++        ui->btnAuth->setFixedHeight(36);
++        ui->btnBioAuth->setFixedHeight(36);
++        ui->btnCancel->setFixedHeight(36);
++        ui->returnButton->setFixedHeight(36);
++    }
++    switch (mode) {
++        case PASSWORD: {
++            setFixedWidth(420);
++
++            if (m_deviceInfo && m_loginOptsWidget->findDeviceById(m_deviceInfo->device_id)) {
++                switchLoginOptType(m_loginOptsWidget->convertDeviceType(m_deviceInfo->biotype));
++            } else {
++                switchLoginOptType(LOGINOPT_TYPE_PASSWORD);
++            }
++            // 标题+间隔+内容头+间隔+类型提示+间隔+用户列表+间隔+
++            // (密码输入框+间隔+验证提示+间隔+授权按钮+边距)/  --仅密码方式
++            // (密码输入框+间隔+验证提示+间隔+登录选项+间隔+授权按钮+边距)/ --密码+生物识别 选择密码
++            // (登录选项+间隔+授权按钮+边距)/ --密码+生物识别 选择生物识别
++            // (ukey加载页+间隔+登录选项+间隔+授权按钮+边距)/(ukey认证页+间隔+登录选项+间隔+授权按钮+边距)
++            // --选择Ukey
++            int height = 40 + 8 + ui->lblHeader->height() + 8 + m_labelTip->height() + 8;
++            switch (m_uCurLoginOptType) {
++                case LOGINOPT_TYPE_PASSWORD: {
++                    height += ui->cmbUsers->height() + 8 + ui->lePassword->height() + 8 + ui->lblMessage->height() + 8;
++                } break;
++                case LOGINOPT_TYPE_FACE:
++                case LOGINOPT_TYPE_FINGERPRINT:
++                case LOGINOPT_TYPE_FINGERVEIN:
++                case LOGINOPT_TYPE_IRIS:
++                case LOGINOPT_TYPE_VOICEPRINT:
++                case LOGINOPT_TYPE_QRCODE: {
++                    height += ui->cmbUsers->height() + 8;
++                } break;
++                case LOGINOPT_TYPE_GENERAL_UKEY:
++                case LOGINOPT_TYPE_ADVANCED_UKEY: {
++                    if (!ui->widgetUkeyAuth->isHidden()) {
++                        height += ui->widgetUkeyAuth->height() + 8;
++                    } else if (!ui->loadingUkeyWidget->isHidden()) {
++                        height += ui->loadingUkeyWidget->height() + 8;
++                    }
++                } break;
++                default:
++                    break;
++            }
++            if (!m_loginOptsWidget->isHidden()) {
++                height += m_loginOptsWidget->height() + 8;
++            }
++            height += ui->btnAuth->height() + 24;
++            setFixedSize(width(), height);
++            qInfo() << "MainWindow geometry:" << geometry() << height;
++
++            // m_loginOptsWidget->updateUIStatus();
++            ui->btnBioAuth->setStyleSheet("QPushButton{font-size:14px;}QPushButton:hover{border:none;color:#3E6CE5;}"
++                                          "QPushButton:pressed{border:none;}");
++            ui->btnBioAuth->setFlat(true);
++            ui->btnBioAuth->setText(tr("Biometric"));
++            ui->btnBioAuth->setAttribute(Qt::WA_UnderMouse, false);
++            ui->btnBioAuth->adjustSize();
++            if (m_uCurLoginOptType == LOGINOPT_TYPE_PASSWORD) {
++                ui->widgetPasswdAuth->show();
++                ui->lePassword->setFocus();
++                // ui->lePassword->setAttribute(Qt::WA_InputMethodEnabled, false);
++                if (m_modeButton && m_modeButton->isShowPwd()) {
++                    ui->lePassword->setEchoMode(QLineEdit::Normal);
++                } else {
++                    ui->lePassword->setEchoMode(QLineEdit::Password);
++                }
++            }
++            ui->btnAuth->show();
++            ui->btnLoading->hide();
++            if (w_timer && w_timer->isActive()) {
++                w_timer->stop();
++            }
++            ui->btnCancel->show();
++            // ui->lblContent->show();
++            ui->returnButton->hide();
++            ui->lblContent->hide();
++        } break;
++
++        case BIOMETRIC:
++            setFixedWidth(420);
++            ui->btnCancel->hide();
++            ui->lblContent->hide();
++            ui->btnBioAuth->hide();
++            break;
++        default:
++            break;
+     }
+ 
+-//  adjustSize();
++    //  adjustSize();
+ }
+ 
+ void MainWindow::unlock_countdown()
+@@ -1199,70 +982,75 @@ void MainWindow::unlock_countdown()
+     int failed_count = 0;
+     int time_left = 0;
+     int deny = 0;
+-    int fail_time =0;
++    int fail_time = 0;
+     int unlock_time = 0;
+-    pam_tally_unlock_time_left(getUid(userName),&failed_count, &time_left, &deny,&fail_time,&unlock_time);
++    pam_tally_unlock_time_left(getUid(userName), &failed_count, &time_left, &deny, &fail_time, &unlock_time);
+ 
+-    // qDebug() << "failed_count:" << failed_count << "time_left:" <<time_left <<"deny:"<<deny<<"fail_time:"<< fail_time<<"unlock_time:" << unlock_time;
+-    if(time_left >= 60)//请多少分钟后重试
++    // qDebug() << "failed_count:" << failed_count << "time_left:" <<time_left <<"deny:"<<deny<<"fail_time:"<<
++    // fail_time<<"unlock_time:" << unlock_time;
++    if (time_left >= 60) // 请多少分钟后重试
+     {
+-        int nMinuteleft = time_left/60;
+-        if (isLockingFlg == false){
+-            m_nCurLockMin = unlock_time/60;//获取当前需要锁定的分钟数
++        int nMinuteleft = time_left / 60;
++        if (isLockingFlg == false) {
++            m_nCurLockMin = unlock_time / 60; // 获取当前需要锁定的分钟数
+         }
+ 
+-        //如果当前设置的不是1min钟锁定,那么1min显示成2min,由2min直接跳到59s || 剩余分钟数小于当前设置的锁定时间,并且大于1min,自增+1
+-        if ((nMinuteleft == 1 && m_nCurLockMin != 1)  || (nMinuteleft > 1 && nMinuteleft < m_nCurLockMin))
+-        {
++        // 如果当前设置的不是1min钟锁定,那么1min显示成2min,由2min直接跳到59s ||
++        // 剩余分钟数小于当前设置的锁定时间,并且大于1min,自增+1
++        if ((nMinuteleft == 1 && m_nCurLockMin != 1) || (nMinuteleft > 1 && nMinuteleft < m_nCurLockMin)) {
+             nMinuteleft = nMinuteleft + 1;
+         }
+-        setMessage(tr("Please try again in %1 minutes.").arg(nMinuteleft),TRUE);
+-        //ui->lblMessage->setToolTip(tr("Please try again in %1 minutes.").arg(nMinute));
++        setMessage(tr("Please try again in %1 minutes.").arg(nMinuteleft), ERROR);
++        // ui->lblMessage->setToolTip(tr("Please try again in %1 minutes.").arg(nMinute));
+         ui->lePassword->setText("");
+         ui->lePassword->setDisabled(true);
++        ui->lePassword->setReadOnly(true);
+         ui->btnAuth->setDisabled(true);
+         isLockingFlg = true;
+-        return ;
+-    }
+-    else if(time_left > 0 && time_left < 60)//请多少秒后重试
++        setBiometricAuthDisabledStatus(isLockingFlg);
++        return;
++    } else if (time_left > 0 && time_left < 60) // 请多少秒后重试
+     {
+-        char ch[100]={0};
+-        setMessage(tr("Please try again in %1 seconds.").arg(time_left%60),TRUE);
+-        //ui->lblMessage->setToolTip(tr("Please try again in %1 seconds.").arg(time_left%60));
++        char ch[100] = { 0 };
++        setMessage(tr("Please try again in %1 seconds.").arg(time_left % 60), ERROR);
++        // ui->lblMessage->setToolTip(tr("Please try again in %1 seconds.").arg(time_left%60));
+         ui->lePassword->setText("");
+         ui->lePassword->setDisabled(true);
++        ui->lePassword->setReadOnly(true);
+         ui->btnAuth->setDisabled(true);
+         isLockingFlg = true;
+-        return ;
+-    }
+-    else if (failed_count == 0xFFFF)//账号被永久锁定
++        setBiometricAuthDisabledStatus(isLockingFlg);
++        return;
++    } else if (failed_count == 0xFFFF) // 账号被永久锁定
+     {
+         ui->lblMessage->setText(tr("Account locked permanently."));
+         ui->lblMessage->setToolTip(tr("Account locked permanently."));
+         ui->lePassword->setText("");
+         ui->lePassword->setDisabled(true);
++        ui->lePassword->setReadOnly(true);
+         ui->btnAuth->setDisabled(true);
+         isLockingFlg = true;
+-        return ;
+-    }
+-    else
+-    {
+-        if(ui->lePassword){
++        setBiometricAuthDisabledStatus(isLockingFlg);
++        return;
++    } else {
++        if (ui->lePassword) {
+             ui->lePassword->setDisabled(false);
++            ui->lePassword->setReadOnly(false);
+             ui->lePassword->setFocus();
+         }
+-        if(ui->btnAuth){
++        if (ui->btnAuth) {
+             ui->btnAuth->setDisabled(false);
+         }
+ 
+         if (isLockingFlg) {
+-            //setMessage(tr("Authentication failed, please try again."),ERROR);
++            // setMessage(tr("Authentication failed, please try again."),ERROR);
+             setMessage("");
+             isLockingFlg = false;
++            setBiometricAuthDisabledStatus(isLockingFlg);
+         }
+         m_timer->stop();
+     }
+-    return ;
++    return;
+ }
+ 
+ void MainWindow::root_unlock_countdown()
+@@ -1270,22 +1058,23 @@ void MainWindow::root_unlock_countdown()
+     int failed_count = 0;
+     int time_left = 0;
+     int deny = 0;
+-    int fail_time =0;
++    int fail_time = 0;
+     int unlock_time = 0;
+-    pam_tally_root_unlock_time_left(&failed_count, &time_left, &deny,&fail_time,&unlock_time);
++    pam_tally_root_unlock_time_left(&failed_count, &time_left, &deny, &fail_time, &unlock_time);
+ 
+-    // qDebug() << "failed_count:" << failed_count << "time_left:" <<time_left <<"deny:"<<deny<<"fail_time:"<< fail_time<<"unlock_time:" << unlock_time;
+-    int nMinuteleft = time_left/60;
+-    if(time_left >= 60)//请多少分钟后重试
++    // qDebug() << "failed_count:" << failed_count << "time_left:" <<time_left <<"deny:"<<deny<<"fail_time:"<<
++    // fail_time<<"unlock_time:" << unlock_time;
++    int nMinuteleft = time_left / 60;
++    if (time_left >= 60) // 请多少分钟后重试
+     {
+-        int nMinuteleft = time_left/60;
+-        if (isLockingFlg == false){
+-            m_nCurLockMin = unlock_time/60;//获取当前需要锁定的分钟数
++        int nMinuteleft = time_left / 60;
++        if (isLockingFlg == false) {
++            m_nCurLockMin = unlock_time / 60; // 获取当前需要锁定的分钟数
+         }
+ 
+-        //如果当前设置的不是1min钟锁定,那么1min显示成2min,由2min直接跳到59s || 剩余分钟数小于当前设置的锁定时间,并且大于1min,自增+1
+-        if ((nMinuteleft == 1 && m_nCurLockMin != 1)  || (nMinuteleft > 1 && nMinuteleft < m_nCurLockMin))
+-        {
++        // 如果当前设置的不是1min钟锁定,那么1min显示成2min,由2min直接跳到59s ||
++        // 剩余分钟数小于当前设置的锁定时间,并且大于1min,自增+1
++        if ((nMinuteleft == 1 && m_nCurLockMin != 1) || (nMinuteleft > 1 && nMinuteleft < m_nCurLockMin)) {
+             nMinuteleft = nMinuteleft + 1;
+         }
+ 
+@@ -1293,179 +1082,204 @@ void MainWindow::root_unlock_countdown()
+         ui->lblMessage->setToolTip(tr("Please try again in %1 minutes.").arg(nMinuteleft));
+         ui->lePassword->setText("");
+         ui->lePassword->setDisabled(true);
++        ui->lePassword->setReadOnly(true);
++        ui->btnAuth->setDisabled(true);
+         isLockingFlg = true;
+-        return ;
+-    }
+-    else if(time_left > 0 && time_left < 60)//请多少秒后重试
++        setBiometricAuthDisabledStatus(isLockingFlg);
++        return;
++    } else if (time_left > 0 && time_left < 60) // 请多少秒后重试
+     {
+-        char ch[100]={0};
+-        ui->lblMessage->setText(tr("Please try again in %1 seconds.").arg(time_left%60));
+-        ui->lblMessage->setToolTip(tr("Please try again in %1 seconds.").arg(time_left%60));
++        char ch[100] = { 0 };
++        ui->lblMessage->setText(tr("Please try again in %1 seconds.").arg(time_left % 60));
++        ui->lblMessage->setToolTip(tr("Please try again in %1 seconds.").arg(time_left % 60));
+         ui->lePassword->setText("");
+         ui->lePassword->setDisabled(true);
++        ui->lePassword->setReadOnly(true);
++        ui->btnAuth->setDisabled(true);
+         isLockingFlg = true;
+-        return ;
+-    }
+-    else if (failed_count == 0xFFFF)//账号被永久锁定
++        setBiometricAuthDisabledStatus(isLockingFlg);
++        return;
++    } else if (failed_count == 0xFFFF) // 账号被永久锁定
+     {
+         ui->lblMessage->setText(tr("Account locked permanently."));
+         ui->lblMessage->setToolTip(tr("Account locked permanently."));
+         ui->lePassword->setText("");
+         ui->lePassword->setDisabled(true);
++        ui->lePassword->setReadOnly(false);
++        ui->btnAuth->setDisabled(true);
+         isLockingFlg = true;
+-        return ;
+-    }
+-    else
+-    {
+-        if(ui->lePassword){
++        setBiometricAuthDisabledStatus(isLockingFlg);
++        return;
++    } else {
++        if (ui->lePassword) {
+             ui->lePassword->setDisabled(false);
++            ui->lePassword->setReadOnly(false);
+             ui->lePassword->setFocus();
+         }
++        if (ui->btnAuth) {
++            ui->btnAuth->setDisabled(false);
++        }
+ 
+-        if (isLockingFlg)
+-        {
+-            //setMessage(tr("Authentication failed, please try again."),ERROR);
++        if (isLockingFlg) {
++            // setMessage(tr("Authentication failed, please try again."),ERROR);
+             setMessage("");
+             isLockingFlg = false;
++            setBiometricAuthDisabledStatus(isLockingFlg);
+         }
+-            
++
+         m_timer->stop();
+     }
+-    return ;
++    return;
++}
++
++void MainWindow::setBiometricAuthDisabledStatus(bool locked)
++{
++    if (locked) {
++        if (m_loginOptsWidget) {
++            m_loginOptsWidget->stopAuth();
++            m_loginOptsWidget->setAllDeviceDisable(true);
++            if (m_bioTimer && m_bioTimer->isActive())
++                m_bioTimer->stop();
++        }
++        if (m_deviceInfo && m_deviceInfo->biotype == BIOTYPE_FACE) {
++            QImage imgFailed;
++            m_loginOptsWidget->setFaceImg(imgFailed, 1);
++        } else if (m_deviceInfo && m_deviceInfo->biotype == REMOTE_QRCODE_TYPE) {
++            QImage nullImage;
++            m_loginOptsWidget->setQRCode(nullImage);
++        }
++    } else {
++        if (m_deviceInfo && m_loginOptsWidget) {
++            m_loginOptsWidget->startAuth(m_deviceInfo, getUid(userName));
++            m_loginOptsWidget->setAllDeviceDisable(false);
++        }
++    }
+ }
+ 
+ void MainWindow::onRespondUkey(const QString &text)
+ {
+-     if (m_loginOptsWidget){
+-         m_loginOptsWidget->SetExtraInfo(text,"pincode");
+-     }
++    if (m_loginOptsWidget) {
++        m_loginOptsWidget->SetExtraInfo(text, "pincode");
++    }
+ }
+ 
+ void MainWindow::switchLoginOptType(unsigned uLoginOptType)
+ {
+-    switch(uLoginOptType) {
+-    case LOGINOPT_TYPE_PASSWORD:
+-    {
+-        //m_loginOptsWidget->hide();
+-        ui->lePassword->show();
+-        ui->cmbUsers->show();
+-        ui->widgetPasswdAuth->show();
+-        ui->widgetUkeyAuth->hide();
+-        ui->ukeyPassword->clearFocus();
+-        ui->loadingUkeyWidget->hide();
+-        setFocusProxy(ui->lePassword);
+-        ui->cmbUsers->show();
+-    }
+-        break;
+-    case LOGINOPT_TYPE_FACE:
+-    case LOGINOPT_TYPE_FINGERPRINT:
+-    case LOGINOPT_TYPE_IRIS:
+-    case LOGINOPT_TYPE_VOICEPRINT:
+-    case LOGINOPT_TYPE_FINGERVEIN:
+-    case LOGINOPT_TYPE_QRCODE:
+-    {
+-        //m_loginOptsWidget->show();
+-        // 延迟检查错误状态
+-        m_isNetworkErr = false;
+-        QTimer::singleShot(500, this, [&,this](){
+-            if (!this->m_isNetworkErr) {
+-                m_loginOptsWidget->setQRCodeMsg("");
++    switch (uLoginOptType) {
++        case LOGINOPT_TYPE_PASSWORD: {
++            // m_loginOptsWidget->hide();
++            ui->lePassword->show();
++            ui->cmbUsers->show();
++            ui->widgetPasswdAuth->show();
++            ui->widgetUkeyAuth->hide();
++            ui->ukeyPassword->clearFocus();
++            ui->loadingUkeyWidget->hide();
++            setFocusProxy(ui->lePassword);
++            ui->cmbUsers->show();
++            m_loginOptsWidget->stopBioWaiting();
++        } break;
++        case LOGINOPT_TYPE_FACE:
++        case LOGINOPT_TYPE_FINGERPRINT:
++        case LOGINOPT_TYPE_IRIS:
++        case LOGINOPT_TYPE_VOICEPRINT:
++        case LOGINOPT_TYPE_FINGERVEIN:
++        case LOGINOPT_TYPE_QRCODE: {
++            switch (uLoginOptType) {
++                case LOGINOPT_TYPE_FINGERPRINT:
++                case LOGINOPT_TYPE_IRIS:
++                case LOGINOPT_TYPE_VOICEPRINT:
++                case LOGINOPT_TYPE_FINGERVEIN: {
++                    m_loginOptsWidget->startBioWaiting(uLoginOptType);
++                } break;
++                default:
++                    m_loginOptsWidget->stopBioWaiting();
++                    break;
+             }
+-        });
+-
+-        //m_loginOptsWidget->hide();
+-        ui->lePassword->show();
+-        ui->widgetUkeyAuth->hide();
+-        ui->loadingUkeyWidget->hide();
+-        ui->ukeyPassword->clearFocus();
+-        setFocusProxy(ui->lePassword);
+-        ui->cmbUsers->show();
+-        ui->widgetPasswdAuth->show();
+-    }
+-        break;
+-    case LOGINOPT_TYPE_GENERAL_UKEY:
+-    {
+-        ui->lePassword->hide();
+-        ui->cmbUsers->hide();
+-        if(m_deviceInfo){
+-            stopLoadingUkey();
+-            ui->widgetUkeyAuth->show();
+-        }else{
+-            startLoadingUkey();
+-        }
+-        setFocusProxy(ui->ukeyPassword);
+-        ui->ukeyPassword->setFocusPolicy(Qt::StrongFocus);
+-        ui->ukeyPassword->setFocus();
+-        ui->widgetPasswdAuth->hide();
+-    }
+-        break;
+-    default:
+-        return;
++
++            // 延迟检查错误状态
++            m_isNetworkErr = false;
++            QTimer::singleShot(500, this, [&, this]() {
++                if (!this->m_isNetworkErr) {
++                    m_loginOptsWidget->setQRCodeMsg("");
++                }
++            });
++
++            ui->lePassword->show();
++            ui->widgetUkeyAuth->hide();
++            ui->loadingUkeyWidget->hide();
++            ui->ukeyPassword->clearFocus();
++            setFocusProxy(ui->lePassword);
++            ui->cmbUsers->show();
++            ui->widgetPasswdAuth->hide();
++        } break;
++        case LOGINOPT_TYPE_GENERAL_UKEY: {
++            ui->lePassword->hide();
++            ui->cmbUsers->hide();
++            if (m_deviceInfo) {
++                stopLoadingUkey();
++                ui->widgetUkeyAuth->show();
++            } else {
++                startLoadingUkey();
++            }
++            setFocusProxy(ui->ukeyPassword);
++            ui->ukeyPassword->setFocusPolicy(Qt::StrongFocus);
++            ui->ukeyPassword->setFocus();
++            ui->widgetPasswdAuth->hide();
++            m_loginOptsWidget->stopBioWaiting();
++        } break;
++        default:
++            return;
+     }
+-    qDebug()<<"CurOptType:"<<uLoginOptType;
+-    if(m_deviceInfo && m_failMap.contains(getUid(userName))
++    qDebug() << "CurOptType:" << uLoginOptType;
++    if (m_deviceInfo && m_failMap.contains(getUid(userName))
+         && m_failMap[getUid(userName)].contains(m_deviceInfo->device_id)
+-        && m_failMap[getUid(userName)][m_deviceInfo->device_id] >= maxFailedTimes){
++        && m_failMap[getUid(userName)][m_deviceInfo->device_id] >= maxFailedTimes) {
+         if (m_deviceInfo->biotype == BIOTYPE_FACE) {
+             QImage imgFailed;
+             m_loginOptsWidget->setFaceImg(imgFailed, 1);
+         }
+         no_changes = true;
+         if (m_deviceInfo->biotype == REMOTE_QRCODE_TYPE) {
+-            setLoginTypeTip(tr("Failed to verify %1, please enter password to unlock").arg(BioDevices::bioTypeToString_tr(m_deviceInfo->biotype)));
+-        }else if(m_deviceInfo->biotype == LOGINOPT_TYPE_GENERAL_UKEY){
+-            setUkeyTypeTip(tr("Failed to verify %1, please enter password to unlock").arg(BioDevices::bioTypeToString_tr(m_deviceInfo->biotype)));
+-        }else {
+-            setLoginTypeTip(tr("Unable to verify %1, please enter password to unlock").arg(BioDevices::bioTypeToString_tr(m_deviceInfo->biotype)));
++            setLoginTypeTip(tr("Failed to verify %1, please enter password to unlock")
++                                .arg(BioDevices::bioTypeToString_tr(m_deviceInfo->biotype)));
++        } else if (m_deviceInfo->biotype == LOGINOPT_TYPE_GENERAL_UKEY) {
++            setUkeyTypeTip(tr("Failed to verify %1, please enter password to unlock")
++                               .arg(BioDevices::bioTypeToString_tr(m_deviceInfo->biotype)));
++        } else {
++            setLoginTypeTip(tr("Unable to verify %1, please enter password to unlock")
++                                .arg(BioDevices::bioTypeToString_tr(m_deviceInfo->biotype)));
+         }
+         m_loginOptsWidget->setDeviceDisable(m_deviceInfo->device_id, true);
+     } else {
+         no_changes = false;
+         if (uLoginOptType != m_uCurLoginOptType || (m_deviceInfo && m_deviceInfo->device_id != m_nLastDeviceId)) {
+-            switch(uLoginOptType) {
+-            case LOGINOPT_TYPE_PASSWORD:
+-            {
+-                setLoginTypeTip("");
+-                //setMessage("",TRUE);
+-            }
+-                break;
+-            case LOGINOPT_TYPE_FACE:
+-            {
+-                setLoginTypeTip(tr("Verify face recognition or enter password to unlock"));
+-            }
+-                break;
+-            case LOGINOPT_TYPE_FINGERPRINT:
+-            {
+-                setLoginTypeTip(tr("Press fingerprint or enter password to unlock"));
+-            }
+-                break;
+-            case LOGINOPT_TYPE_VOICEPRINT:
+-            {
+-                setLoginTypeTip(tr("Verify voiceprint or enter password to unlock"));
+-            }
+-                break;
+-            case LOGINOPT_TYPE_FINGERVEIN:
+-            {
+-                setLoginTypeTip(tr("Verify finger vein or enter password to unlock"));
+-            }
+-                break;
+-            case LOGINOPT_TYPE_IRIS:
+-            {
+-                setLoginTypeTip(tr("Verify iris or enter password to unlock"));
+-            }
+-                break;
+-            case LOGINOPT_TYPE_QRCODE:
+-            {
+-                setLoginTypeTip(tr("Use the bound wechat scanning code or enter the password to unlock"));
+-            }
+-                break;
+-            case LOGINOPT_TYPE_GENERAL_UKEY:
+-            {
+-                setLoginTypeTip("");
+-            }
+-                break;
+-            default:
+-                return;
++            switch (uLoginOptType) {
++                case LOGINOPT_TYPE_PASSWORD: {
++                    setLoginTypeTip(tr("Input your password to authentication"));
++                } break;
++                case LOGINOPT_TYPE_FACE: {
++                    setLoginTypeTip(tr("Facial recognition to authorization"));
++                } break;
++                case LOGINOPT_TYPE_FINGERPRINT: {
++                    setLoginTypeTip(tr("Fingerprint recognition to authorization"));
++                } break;
++                case LOGINOPT_TYPE_VOICEPRINT: {
++                    setLoginTypeTip(tr("Voiceprint recognition to authorization"));
++                } break;
++                case LOGINOPT_TYPE_FINGERVEIN: {
++                    setLoginTypeTip(tr("Finger veins recognition to authorization"));
++                } break;
++                case LOGINOPT_TYPE_IRIS: {
++                    setLoginTypeTip(tr("Iris recognition to authorization"));
++                } break;
++                case LOGINOPT_TYPE_QRCODE: {
++                    setLoginTypeTip(tr("Use the bound wechat scanning code to authorization"));
++                } break;
++                case LOGINOPT_TYPE_GENERAL_UKEY: {
++                    setLoginTypeTip("");
++                } break;
++                default:
++                    return;
+             }
+         }
+     }
+@@ -1475,6 +1289,7 @@ void MainWindow::switchLoginOptType(unsigned uLoginOptType)
+         m_nLastDeviceId = -1;
+     }
+     m_uCurLoginOptType = uLoginOptType;
++    m_loginOptsWidget->updateUIStatus(true, m_uCurLoginOptType);
+ }
+ 
+ void MainWindow::setLoginTypeTip(QString strLoginTypeTip)
+@@ -1484,13 +1299,13 @@ void MainWindow::setLoginTypeTip(QString strLoginTypeTip)
+         m_labelTip->hide();
+     } else {
+         QPalette pe;
+-        if(no_changes) {
+-            pe.setColor(QPalette::WindowText,Qt::red);
++        if (no_changes) {
++            pe.setColor(QPalette::WindowText, Qt::red);
+             m_labelTip->setPalette(pe);
+         } else {
+             QColor color = palette().color(QPalette::WindowText);
+             QPalette pal(this->palette());
+-            pal.setColor(QPalette::WindowText,QColor(color));
++            pal.setColor(QPalette::WindowText, QColor(color));
+             m_labelTip->setPalette(pal);
+         }
+         m_labelTip->setText(m_strLoginTypeTip);
+@@ -1501,9 +1316,9 @@ void MainWindow::setLoginTypeTip(QString strLoginTypeTip)
+ void MainWindow::startBioAuthDelay()
+ {
+     if (m_deviceInfo) {
+-        if(m_deviceInfo->biotype == LOGINOPT_TYPE_GENERAL_UKEY){
++        if (m_deviceInfo->biotype == LOGINOPT_TYPE_GENERAL_UKEY) {
+ 
+-        }else{
++        } else {
+             m_loginOptsWidget->startAuth(m_deviceInfo, getUid(userName));
+         }
+         switchLoginOptType(m_loginOptsWidget->convertDeviceType(m_deviceInfo->biotype));
+@@ -1517,11 +1332,11 @@ void MainWindow::startBioAuth(unsigned uTimeout)
+ {
+     m_loginOptsWidget->stopAuth();
+ 
+-    if(m_deviceInfo && m_deviceInfo->biotype == LOGINOPT_TYPE_GENERAL_UKEY){
++    if (m_deviceInfo && m_deviceInfo->biotype == LOGINOPT_TYPE_GENERAL_UKEY) {
+         switchLoginOptType(m_loginOptsWidget->convertDeviceType(m_deviceInfo->biotype));
+     }
+ 
+-    if(!m_bioTimer){
++    if (!m_bioTimer) {
+         m_bioTimer = new QTimer(this);
+         connect(m_bioTimer, SIGNAL(timeout()), this, SLOT(startBioAuthDelay()));
+     }
+@@ -1538,8 +1353,10 @@ void MainWindow::onUpdateBioAuthMsg(QString strMsg)
+ void MainWindow::updatePixmap()
+ {
+     ui->btnAuth->hide();
++    ui->btnAuth->setDisabled(true);
+     ui->btnLoading->show();
+     ui->lePassword->setDisabled(true);
++    ui->lePassword->setReadOnly(true);
+     QMatrix matrix;
+     matrix.rotate(90.0);
+     m_waitingPixmap = m_waitingPixmap.transformed(matrix, Qt::FastTransformation);
+@@ -1549,64 +1366,49 @@ void MainWindow::updatePixmap()
+ void MainWindow::onUpdateWndSize(unsigned uLoginOptType, unsigned uLoginOptSize)
+ {
+     ui->lblContent->hide();
+-    if (!m_loginOptsWidget->isHidden()) {
+-        m_loginOptsWidget->adjustSize();
+-    }
+-    unsigned uOptsWidgetHeight = m_loginOptsWidget->height();
+-    if (m_loginOptsWidget->isHidden() ||
+-        (uLoginOptSize == 1 && uLoginOptType != LOGINOPT_TYPE_QRCODE && uLoginOptType != LOGINOPT_TYPE_FACE)) {
+-        uOptsWidgetHeight = 0;
+-    }
+     ui->lblHeader->adjustSize();
+-    if(uLoginOptType == LOGINOPT_TYPE_QRCODE && uLoginOptType == LOGINOPT_TYPE_FACE){
+-            uOptsWidgetHeight = m_loginOptsWidget->height() + 20;
+-    }
+-    else if(uLoginOptType == LOGINOPT_TYPE_FINGERPRINT){
+-            uOptsWidgetHeight = m_loginOptsWidget->height() + 10 ;
+-    }
+-//    ui->lblContent->adjustSize();
+-//    ui->lblHeader->adjustSize();
+-    int height;
+-    if(fontSize = 10){
+-        height = 130 + ui->lblHeader->height() /*+ ui->lblContent->height()*/
+-                + ui->cmbUsers->height() + ui->lePassword->height() + ui->lblMessage->height()
+-                + ui->btnAuth->height();
+-    } else if(fontSize = 11 ){
+-        height = 150 + ui->lblHeader->height() /*+ ui->lblContent->height()*/
+-                + ui->cmbUsers->height() + ui->lePassword->height() + ui->lblMessage->height()
+-                + ui->btnAuth->height();
+-    } else if (fontSize = 12){
+-        height = 160 + ui->lblHeader->height() /*+ ui->lblContent->height()*/
+-                + ui->cmbUsers->height() + ui->lePassword->height() + ui->lblMessage->height()
+-                + ui->btnAuth->height();
+-    } else if (fontSize = 13){
+-        height = 170 + ui->lblHeader->height() /*+ ui->lblContent->height()*/
+-                + ui->cmbUsers->height() + ui->lePassword->height() + ui->lblMessage->height()
+-                + ui->btnAuth->height();
+-    } else if (fontSize = 14){
+-        height = 190 + ui->lblHeader->height() /*+ ui->lblContent->height()*/
+-                + ui->cmbUsers->height() + ui->lePassword->height() + ui->lblMessage->height()
+-                + ui->btnAuth->height();
+-    } else if (fontSize = 15){
+-        height = 230 + ui->lblHeader->height() /*+ ui->lblContent->height()*/
+-                + ui->cmbUsers->height() + ui->lePassword->height() + ui->lblMessage->height()
+-                + ui->btnAuth->height();
+-    }
+-    if (m_loginOptsWidget->isHidden()) {
+-        height = height + m_labelTip->height() - 10;
+-    }
+ 
+-    if(uLoginOptType == LOGINOPT_TYPE_GENERAL_UKEY){
+-        setLoginTypeTip("");
+-        setFixedSize(width(), height + uOptsWidgetHeight + 10);
+-    }else{
+-        setFixedSize(width(), height + uOptsWidgetHeight);
++    // 标题+间隔+内容头+间隔+类型提示+间隔+用户列表+间隔+
++    // (密码输入框+间隔+验证提示+间隔+授权按钮+边距)/  --仅密码方式
++    // (密码输入框+间隔+验证提示+间隔+登录选项+间隔+授权按钮+边距)/ --密码+生物识别 选择密码
++    // (登录选项+间隔+授权按钮+边距)/ --密码+生物识别 选择生物识别
++    // (ukey加载页+间隔+登录选项+间隔+授权按钮+边距)/(ukey认证页+间隔+登录选项+间隔+授权按钮+边距)
++    // --选择Ukey
++    int height = 40 + 8 + ui->lblHeader->height() + 8 + m_labelTip->height() + 8;
++    switch (m_uCurLoginOptType) {
++        case LOGINOPT_TYPE_PASSWORD: {
++            height += ui->cmbUsers->height() + 8 + ui->lePassword->height() + 8 + ui->lblMessage->height() + 8;
++        } break;
++        case LOGINOPT_TYPE_FACE:
++        case LOGINOPT_TYPE_FINGERPRINT:
++        case LOGINOPT_TYPE_FINGERVEIN:
++        case LOGINOPT_TYPE_IRIS:
++        case LOGINOPT_TYPE_VOICEPRINT:
++        case LOGINOPT_TYPE_QRCODE: {
++            height += ui->cmbUsers->height() + 8;
++        } break;
++        case LOGINOPT_TYPE_GENERAL_UKEY:
++        case LOGINOPT_TYPE_ADVANCED_UKEY: {
++            if (!ui->widgetUkeyAuth->isHidden()) {
++                height += ui->widgetUkeyAuth->height() + 8;
++            } else if (!ui->loadingUkeyWidget->isHidden()) {
++                height += ui->loadingUkeyWidget->height() + 8;
++            }
++        } break;
++        default:
++            break;
++    }
++    if (!m_loginOptsWidget->isHidden()) {
++        height += m_loginOptsWidget->height() + 8;
+     }
++    height += ui->btnAuth->height() + 24;
++    setFixedSize(width(), height);
++    qInfo() << "MainWindow geometry update:" << geometry() << height;
+ }
+ 
+ void MainWindow::setEditInputMethod(bool bEnable)
+ {
+-    qDebug()<<"setEditInputMethod:"<<bEnable;
++    qDebug() << "setEditInputMethod:" << bEnable;
+     if (bEnable) {
+         ui->lePassword->setAttribute(Qt::WA_InputMethodEnabled, true);
+     } else {
+@@ -1619,4 +1421,174 @@ void MainWindow::setCurProject(bool isMavis)
+     is_Mavis = isMavis;
+ }
+ 
++void MainWindow::onOptionSelected(unsigned uCurLoginOptType, const DeviceInfoPtr &deviceInfo)
++{
++    isLoadingUkey = false;
++
++    if (uCurLoginOptType == LOGINOPT_TYPE_GENERAL_UKEY) {
++        stopLoadingUkey();
++    }
++
++    if (uCurLoginOptType == LOGINOPT_TYPE_PASSWORD) {
++        switchLoginOptType(uCurLoginOptType);
++        if (m_loginOptsWidget) {
++            m_loginOptsWidget->stopAuth();
++        }
++        m_deviceInfo = nullptr;
++        authMode = PASSWORD;
++        emit restartAuth();
++        return;
++    }
++
++    if (uCurLoginOptType != LOGINOPT_TYPE_GENERAL_UKEY && !deviceInfo)
++        return;
++
++    if (deviceInfo)
++        qDebug() << "device changed: " << deviceInfo->biotype;
++
++    if (deviceInfo && m_failMap[getUid(userName)][deviceInfo->device_id] >= maxFailedTimes) {
++        qDebug() << "Failed MAX!!";
++        return;
++    }
++
++    if (uCurLoginOptType == LOGINOPT_TYPE_GENERAL_UKEY && !deviceInfo) {
++        isLoadingUkey = true;
++        startLoadingUkey();
++        m_loginOptsWidget->updateUkeyUIStatus(LOGINOPT_TYPE_GENERAL_UKEY);
++    } else if (uCurLoginOptType == LOGINOPT_TYPE_GENERAL_UKEY && deviceInfo) {
++        stopLoadingUkey();
++        m_loginOptsWidget->updateUkeyUIStatus(LOGINOPT_TYPE_GENERAL_UKEY);
++    }
++
++    if (deviceInfo == m_deviceInfo) {
++        return;
++    }
++
++    if (uCurLoginOptType != LOGINOPT_TYPE_GENERAL_UKEY && deviceInfo == m_deviceInfo) {
++        return;
++    }
++
++    if (m_bioTimer)
++        m_bioTimer->stop();
++
++    m_deviceInfo = deviceInfo;
++    switchLoginOptType(uCurLoginOptType);
++    if (!isbioSuccess && m_deviceInfo) {
++        startBioAuth();
++    }
++}
++
++void MainWindow::onNotifyOptionsChanged(unsigned uOptionsCount)
++{
++    if (uOptionsCount > 0) {
++        m_loginOptsWidget->show();
++    } else {
++        // m_loginOptsWidget->hide();
++    }
++
++    if (m_deviceInfo && m_deviceInfo->biotype == LOGINOPT_TYPE_GENERAL_UKEY) {
++        stopLoadingUkey();
++    }
++
++    if (!m_deviceInfo || !m_loginOptsWidget->findDeviceById(m_deviceInfo->device_id)
++        || m_loginOptsWidget->isDeviceDisable(m_deviceInfo->device_id)) {
++        m_loginOptsWidget->stopAuth();
++        if (authMode != UNDEFINED) {
++            authMode = UNDEFINED;
++            emit switchToBiometric();
++        }
++    }
++}
++
++void MainWindow::onLoginOptionsAuthCompleted(uid_t uid, bool ret, int nStatus)
++{
++    qDebug() << "biometric authentication complete: " << uid << ret << nStatus;
++    if (m_deviceInfo && m_deviceInfo->biotype == LOGINOPT_TYPE_GENERAL_UKEY && ui->widgetUkeyAuth->isVisible()) {
++        ui->ukeyPassword->setText("");
++    }
++
++    if (uid == getUid(userName) && ret) {
++        isbioSuccess = true;
++        emit switchToBiometric();
++        authMode = UNDEFINED;
++    } else {
++        if (nStatus == 5 && m_deviceInfo) {
++            if (w_timer && w_timer->isActive())
++                w_timer->stop();
++            QImage imgFailed;
++            m_loginOptsWidget->setFaceImg(imgFailed, 2);
++            return;
++        } else if (nStatus >= 2 && nStatus != 5)
++            if (nStatus >= 2) {
++                if (m_deviceInfo) {
++                    uid_t curUid = getUid(userName);
++                    if (m_failMap.contains(curUid) && m_failMap[curUid].contains(m_deviceInfo->device_id)) {
++                        m_failMap[curUid][m_deviceInfo->device_id] = m_failMap[curUid][m_deviceInfo->device_id] + 1;
++                    } else {
++                        m_failMap[curUid][m_deviceInfo->device_id] = 1;
++                    }
++                    qDebug() << "Failed count:" << m_failMap[curUid][m_deviceInfo->device_id]
++                             << ",Max:" << maxFailedTimes;
++                    if (m_deviceInfo->biotype == BIOTYPE_FACE) {
++                        QImage imgFailed;
++                        m_loginOptsWidget->setFaceImg(imgFailed, 1);
++                    }
++                    if (m_failMap[curUid][m_deviceInfo->device_id] >= maxFailedTimes) {
++                        no_changes = true;
++                        if (m_deviceInfo->biotype == REMOTE_QRCODE_TYPE) {
++                            setLoginTypeTip(tr("Failed to verify %1, please enter password to unlock")
++                                                .arg(BioDevices::bioTypeToString_tr(m_deviceInfo->biotype)));
++                            QImage nullImage;
++                            m_loginOptsWidget->setQRCode(nullImage);
++                        } else if (m_deviceInfo->biotype == LOGINOPT_TYPE_GENERAL_UKEY) {
++                            ui->ukeyPassword->setReadOnly(true);
++                            setUkeyTypeTip(tr("Unable to verify %1, please enter password to unlock")
++                                               .arg(BioDevices::bioTypeToString_tr(m_deviceInfo->biotype)));
++                        } else {
++                            setLoginTypeTip(tr("Unable to verify %1, please enter password to unlock")
++                                                .arg(BioDevices::bioTypeToString_tr(m_deviceInfo->biotype)));
++                        }
++
++                        m_loginOptsWidget->setDeviceDisable(m_deviceInfo->device_id, true);
++                        useDoubleAuth = false;
++                        return;
++                    }
++                    no_changes = false;
++                    if (m_deviceInfo->biotype == LOGINOPT_TYPE_GENERAL_UKEY) {
++                        setUkeyTypeTip(tr("Failed to verify %1, you still have %2 verification opportunities")
++                                           .arg(BioDevices::bioTypeToString_tr(m_deviceInfo->biotype))
++                                           .arg(maxFailedTimes - m_failMap[curUid][m_deviceInfo->device_id]));
++                    } else {
++                        setLoginTypeTip(tr("Failed to verify %1, you still have %2 verification opportunities")
++                                            .arg(BioDevices::bioTypeToString_tr(m_deviceInfo->biotype))
++                                            .arg(maxFailedTimes - m_failMap[curUid][m_deviceInfo->device_id]));
++                    }
++                }
++            }
++        if (!isbioSuccess) {
++            // dbus error
++            if (nStatus == -1) {
++                qDebug() << "Biometric dbus error:" << authMode;
++            }
++            if (m_uCurLoginOptType == LOGINOPT_TYPE_QRCODE && nStatus == 1) {
++                m_isNetworkErr = true;
++                m_loginOptsWidget->setQRCodeMsg(tr("Abnormal network"));
++                startBioAuth(10000);
++            } else if (m_uCurLoginOptType == LOGINOPT_TYPE_QRCODE && nStatus == -4) {
++                m_isNetworkErr = true;
++                m_loginOptsWidget->setQRCodeMsg(tr("Acquisition failure"));
++                startBioAuth(10000);
++            } else {
++                startBioAuth();
++            }
++            if (nStatus >= 2 && m_deviceInfo) {
++                if (m_deviceInfo->biotype == BIOTYPE_FACE) {
++                    QImage imgFailed;
++                    m_loginOptsWidget->setFaceImg(imgFailed, 1);
++                }
++            }
++        }
++    }
++}
++
+ /*** end of private member ***/
+diff --git a/polkit-agent/src/mainwindow.h b/polkit-agent/src/mainwindow.h
+index 898f2d0..bf8e9ab 100644
+--- a/polkit-agent/src/mainwindow.h
++++ b/polkit-agent/src/mainwindow.h
+@@ -31,11 +31,14 @@
+ #include "loginoptionswidget.h"
+ #include "modeButton.h"
+ #include "kalabel.h"
++#include <kysdk/applications/kdialog.h>
++using namespace kdk;
++
+ namespace Ui {
+ class MainWindow;
+ }
+ 
+-class MainWindow : public QWidget
++class MainWindow : public kdk::KDialog
+ {
+     Q_OBJECT
+ 
+@@ -45,17 +48,32 @@ public:
+     void closeEvent(QCloseEvent *event);
+     bool eventFilter(QObject *obj, QEvent *event);
+     void paintEvent(QPaintEvent *event);
+-    enum Mode{UNDEFINED, PASSWORD, BIOMETRIC, DEVICES};
+-    enum situation{TRUE, ERROR};
++    void keyPressEvent(QKeyEvent *event); //屏蔽esc按钮
++    enum Mode
++    {
++        UNDEFINED,
++        PASSWORD,
++        BIOMETRIC,
++        DEVICES
++    };
++    enum situation
++    {
++        TRUE,
++        ERROR
++    };
+     void setIcon(const QString &iconName);
+     void setHeader(const QString &text);
+     void setUsers(const QStringList &usersList);
+-    void setDetails(const QString &subPid, const QString &callerPid,
+-                    const QString &actionId, const QString &actionDesc,
+-                    const QString vendorName, const QString vendorUrl);
++    void setDetails(
++        const QString &subPid,
++        const QString &callerPid,
++        const QString &actionId,
++        const QString &actionDesc,
++        const QString vendorName,
++        const QString vendorUrl);
+     void setPrompt(const QString &text, bool echo);
+-    void setMessage(const QString &text,situation situat = ERROR);
+-    void setAuthResult(bool result, const QString &text="");
++    void setMessage(const QString &text, situation situat = ERROR);
++    void setAuthResult(bool result, const QString &text = "");
+     void clearEdit();
+     void switchAuthMode(Mode mode);
+     void setDoubleAuth(bool val);
+@@ -69,15 +87,14 @@ public:
+     void stopLoadingUkey();
+     void updateLoadingPixmap();
+ 
+-private:    
++private:
+     uid_t getUid(const QString &userName);
+     void setMovie();
+     void setPixmap();
+-    void startBioAuth(unsigned uTimeout = 1000);
++    void startBioAuth(unsigned uTimeout = 200);
+     void switchWidget(Mode mode);
+     int enable_biometric_authentication();
+ 
+-
+     void root_unlock_countdown();
+     void unlock_countdown();
+     void editIcon();
+@@ -85,11 +102,35 @@ private:
+     void setMavisSheel();
+     void updatePixmap();
+ 
++    void setBiometricAuthDisabledStatus(bool locked);
++
+ public slots:
+     void onUpdateBioAuthMsg(QString strMsg);
+     void onUpdateWndSize(unsigned uLoginOptType, unsigned uLoginOptSize);
++    void onShowYesPrompt();
+ 
+ private slots:
++    /**
++     * @brief onOptionSelected
++     * @param uCurLoginOptType
++     * @param deviceInfo
++     */
++    void onOptionSelected(unsigned uCurLoginOptType, const DeviceInfoPtr &deviceInfo);
++
++    /**
++     * @brief onNotifyOptionsChanged
++     * @param uOptionsCount
++     */
++    void onNotifyOptionsChanged(unsigned uOptionsCount);
++
++    /**
++     * @brief onLoginOptionsAuthCompleted
++     * @param uid
++     * @param ret
++     * @param nStatus
++     */
++    void onLoginOptionsAuthCompleted(uid_t uid, bool ret, int nStatus);
++
+     void on_btnDetails_clicked();
+     void on_lePassword_returnPressed();
+     void on_ukeyPassword_returnPressed();
+@@ -112,10 +153,11 @@ signals:
+     void switchToBiometric();
+     void userChanged(const QString &userName);
+     void restartAuth();
++    void yesPrompted();
+ 
+ private:
+     Ui::MainWindow *ui;
+-    Users    *users;
++    Users *users;
+     QString userName;
+     bool enableBioAuth;
+     bool receiveBioPAM;
+@@ -124,25 +166,25 @@ private:
+     bool isFirst;
+     bool useDoubleAuth;
+     bool isbioSuccess;
+-    QMap<qint32,QMap<int,int>> m_failMap;
+-    int  maxFailedTimes;
++    QMap<qint32, QMap<int, int>> m_failMap;
++    int maxFailedTimes;
+     bool isHiddenSwitchButton;
+     ModeButton *m_modeButton;
+     QIcon modeIcon;
+     bool pwdShow = false;
+     bool isHover = false;
+ 
+-    //ukey优先级比密码低,该变量用于判断是否第一次认证,并选中密码
++    // ukey优先级比密码低,该变量用于判断是否第一次认证,并选中密码
+     bool isFirstAuth = true;
+ 
+     QTimer *m_timer;
+-    //const DeviceInfo *device = NULL;
+-    bool isLockingFlg;   //判断当前是否正在锁定倒计时
+-    int  m_nCurLockMin;  //当前锁定的分钟数
++    // const DeviceInfo *device = NULL;
++    bool isLockingFlg; //判断当前是否正在锁定倒计时
++    int m_nCurLockMin; //当前锁定的分钟数
+     // 登录选项
+     KALabel *m_labelTip = nullptr;
+     LoginOptionsWidget *m_loginOptsWidget = nullptr;
+-    unsigned m_uCurLoginOptType = LOGINOPT_TYPE_PASSWORD;   // 当前登录验证方式
++    unsigned m_uCurLoginOptType = LOGINOPT_TYPE_PASSWORD; // 当前登录验证方式
+     QString m_strLoginTypeTip = "";
+     QTimer *m_bioTimer = nullptr;
+     DeviceInfoPtr m_deviceInfo = nullptr;
+@@ -153,7 +195,7 @@ private:
+     QLabel *titleLabel;
+     QPushButton *closeBtn;
+ 
+-    QGSettings	*settings;
++    QGSettings *settings;
+     int fontSize;
+ 
+     QString app_IconName;
+@@ -165,9 +207,11 @@ private:
+     QTimer *w_timer;
+     QPixmap m_waitingPixmap;
+ 
+-    QTimer          *m_loadingTimer = nullptr;
+-    QPixmap         m_loadingPixmap;
+-    bool           isLoadingUkey = false;
++    QTimer *m_loadingTimer = nullptr;
++    QPixmap m_loadingPixmap;
++    bool isLoadingUkey = false;
++
++    bool doNotNeedAuth = false;
+ };
+ 
+ #endif // MAINWINDOW_H
+diff --git a/polkit-agent/src/mainwindow.ui b/polkit-agent/src/mainwindow.ui
+index 01fc13b..7a29dab 100644
+--- a/polkit-agent/src/mainwindow.ui
++++ b/polkit-agent/src/mainwindow.ui
+@@ -7,7 +7,7 @@
+     <x>0</x>
+     <y>0</y>
+     <width>459</width>
+-    <height>646</height>
++    <height>716</height>
+    </rect>
+   </property>
+   <property name="sizePolicy">
+@@ -27,7 +27,7 @@
+   </property>
+   <layout class="QVBoxLayout" name="verticalLayout_2">
+    <property name="spacing">
+-    <number>0</number>
++    <number>8</number>
+    </property>
+    <property name="sizeConstraint">
+     <enum>QLayout::SetDefaultConstraint</enum>
+@@ -36,7 +36,7 @@
+     <number>0</number>
+    </property>
+    <property name="topMargin">
+-    <number>6</number>
++    <number>8</number>
+    </property>
+    <property name="rightMargin">
+     <number>0</number>
+@@ -45,21 +45,15 @@
+     <number>24</number>
+    </property>
+    <item>
+-    <layout class="QFormLayout" name="formLayout">
+-     <property name="fieldGrowthPolicy">
+-      <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
+-     </property>
+-     <property name="rowWrapPolicy">
+-      <enum>QFormLayout::WrapAllRows</enum>
+-     </property>
+-     <property name="horizontalSpacing">
+-      <number>0</number>
++    <layout class="QVBoxLayout" name="verticalLayout_5">
++     <property name="spacing">
++      <number>8</number>
+      </property>
+      <property name="leftMargin">
+       <number>24</number>
+      </property>
+      <property name="topMargin">
+-      <number>15</number>
++      <number>0</number>
+      </property>
+      <property name="rightMargin">
+       <number>24</number>
+@@ -67,7 +61,7 @@
+      <property name="bottomMargin">
+       <number>0</number>
+      </property>
+-     <item row="0" column="1">
++     <item>
+       <widget class="QLabel" name="lblHeader">
+        <property name="minimumSize">
+         <size>
+@@ -98,7 +92,7 @@
+        </property>
+       </widget>
+      </item>
+-     <item row="1" column="1">
++     <item>
+       <widget class="QLabel" name="lblContent">
+        <property name="styleSheet">
+         <string notr="true"/>
+@@ -111,24 +105,20 @@
+        </property>
+       </widget>
+      </item>
+-     <item row="3" column="1">
+-      <layout class="QFormLayout" name="bioAuthLayout">
+-       <property name="bottomMargin">
+-        <number>8</number>
+-       </property>
+-      </layout>
+-     </item>
+-     <item row="4" column="1">
++     <item>
+       <layout class="QHBoxLayout" name="titleTipLayout">
++       <property name="spacing">
++        <number>0</number>
++       </property>
+        <property name="topMargin">
+-        <number>8</number>
++        <number>0</number>
+        </property>
+        <property name="bottomMargin">
+-        <number>8</number>
++        <number>0</number>
+        </property>
+       </layout>
+      </item>
+-     <item row="5" column="1">
++     <item>
+       <widget class="QWidget" name="loadingUkeyWidget" native="true">
+        <property name="minimumSize">
+         <size>
+@@ -140,6 +130,9 @@
+         <string notr="true"/>
+        </property>
+        <layout class="QVBoxLayout" name="verticalLayout_4">
++        <property name="spacing">
++         <number>8</number>
++        </property>
+         <property name="leftMargin">
+          <number>0</number>
+         </property>
+@@ -149,6 +142,9 @@
+         <property name="rightMargin">
+          <number>0</number>
+         </property>
++        <property name="bottomMargin">
++         <number>0</number>
++        </property>
+         <item>
+          <widget class="QPushButton" name="loadingUkeyBtn">
+           <property name="text">
+@@ -169,7 +165,7 @@
+        </layout>
+       </widget>
+      </item>
+-     <item row="6" column="1">
++     <item>
+       <widget class="QComboBox" name="cmbUsers">
+        <property name="enabled">
+         <bool>true</bool>
+@@ -179,14 +175,7 @@
+        </property>
+       </widget>
+      </item>
+-     <item row="7" column="1">
+-      <layout class="QFormLayout" name="bioDeviceLayout">
+-       <property name="bottomMargin">
+-        <number>8</number>
+-       </property>
+-      </layout>
+-     </item>
+-     <item row="8" column="1">
++     <item>
+       <widget class="QWidget" name="widgetUkeyAuth" native="true">
+        <property name="minimumSize">
+         <size>
+@@ -211,12 +200,9 @@
+          <number>9</number>
+         </property>
+         <item>
+-         <layout class="QFormLayout" name="formLayout_3">
+-          <property name="horizontalSpacing">
+-           <number>0</number>
+-          </property>
+-          <property name="verticalSpacing">
+-           <number>6</number>
++         <layout class="QVBoxLayout" name="verticalLayout_7">
++          <property name="spacing">
++           <number>8</number>
+           </property>
+           <property name="topMargin">
+            <number>0</number>
+@@ -227,7 +213,17 @@
+           <property name="bottomMargin">
+            <number>0</number>
+           </property>
+-          <item row="1" column="0" colspan="2">
++          <item>
++           <widget class="QLabel" name="ukeyTipLbl">
++            <property name="text">
++             <string/>
++            </property>
++            <property name="alignment">
++             <set>Qt::AlignCenter</set>
++            </property>
++           </widget>
++          </item>
++          <item>
+            <widget class="QLineEdit" name="ukeyPassword">
+             <property name="contextMenuPolicy">
+              <enum>Qt::NoContextMenu</enum>
+@@ -237,7 +233,7 @@
+             </property>
+            </widget>
+           </item>
+-          <item row="3" column="0" colspan="2">
++          <item>
+            <widget class="KALabel" name="ukeyMessage">
+             <property name="minimumSize">
+              <size>
+@@ -262,22 +258,12 @@
+             </property>
+            </widget>
+           </item>
+-          <item row="0" column="0" colspan="2">
+-           <widget class="QLabel" name="ukeyTipLbl">
+-            <property name="text">
+-             <string/>
+-            </property>
+-            <property name="alignment">
+-             <set>Qt::AlignCenter</set>
+-            </property>
+-           </widget>
+-          </item>
+          </layout>
+         </item>
+        </layout>
+       </widget>
+      </item>
+-     <item row="9" column="1">
++     <item>
+       <widget class="QWidget" name="widgetPasswdAuth" native="true">
+        <property name="minimumSize">
+         <size>
+@@ -299,17 +285,14 @@
+          <number>0</number>
+         </property>
+         <item>
+-         <layout class="QFormLayout" name="formLayout_2">
+-          <property name="horizontalSpacing">
+-           <number>0</number>
+-          </property>
+-          <property name="verticalSpacing">
+-           <number>6</number>
++         <layout class="QVBoxLayout" name="verticalLayout_6">
++          <property name="spacing">
++           <number>8</number>
+           </property>
+           <property name="topMargin">
+            <number>0</number>
+           </property>
+-          <item row="0" column="0" colspan="2">
++          <item>
+            <widget class="QLineEdit" name="lePassword">
+             <property name="contextMenuPolicy">
+              <enum>Qt::NoContextMenu</enum>
+@@ -319,7 +302,7 @@
+             </property>
+            </widget>
+           </item>
+-          <item row="2" column="0" colspan="2">
++          <item>
+            <widget class="KALabel" name="lblMessage">
+             <property name="minimumSize">
+              <size>
+@@ -351,23 +334,10 @@
+      </item>
+     </layout>
+    </item>
+-   <item>
+-    <spacer name="verticalSpacer_2">
+-     <property name="orientation">
+-      <enum>Qt::Vertical</enum>
+-     </property>
+-     <property name="sizeHint" stdset="0">
+-      <size>
+-       <width>20</width>
+-       <height>40</height>
+-      </size>
+-     </property>
+-    </spacer>
+-   </item>
+    <item>
+     <layout class="QVBoxLayout" name="loginOptionsLayout">
+      <property name="spacing">
+-      <number>8</number>
++      <number>0</number>
+      </property>
+      <property name="leftMargin">
+       <number>24</number>
+@@ -383,6 +353,19 @@
+      </property>
+     </layout>
+    </item>
++   <item>
++    <spacer name="verticalSpacer">
++     <property name="orientation">
++      <enum>Qt::Vertical</enum>
++     </property>
++     <property name="sizeHint" stdset="0">
++      <size>
++       <width>20</width>
++       <height>40</height>
++      </size>
++     </property>
++    </spacer>
++   </item>
+    <item>
+     <layout class="QHBoxLayout" name="horizontalLayout_7">
+      <property name="spacing">
+@@ -399,6 +382,12 @@
+      </property>
+      <item>
+       <widget class="QPushButton" name="btnBioAuth">
++       <property name="minimumSize">
++        <size>
++         <width>0</width>
++         <height>36</height>
++        </size>
++       </property>
+        <property name="cursor">
+         <cursorShape>ArrowCursor</cursorShape>
+        </property>
+@@ -431,6 +420,12 @@
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
++       <property name="minimumSize">
++        <size>
++         <width>0</width>
++         <height>36</height>
++        </size>
++       </property>
+        <property name="cursor">
+         <cursorShape>ArrowCursor</cursorShape>
+        </property>
+@@ -450,6 +445,12 @@
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
++       <property name="minimumSize">
++        <size>
++         <width>0</width>
++         <height>36</height>
++        </size>
++       </property>
+        <property name="cursor">
+         <cursorShape>ArrowCursor</cursorShape>
+        </property>
+@@ -463,6 +464,12 @@
+      </item>
+      <item>
+       <widget class="QPushButton" name="btnLoading">
++       <property name="minimumSize">
++        <size>
++         <width>0</width>
++         <height>36</height>
++        </size>
++       </property>
+        <property name="text">
+         <string/>
+        </property>
+@@ -473,6 +480,12 @@
+      </item>
+      <item>
+       <widget class="QPushButton" name="returnButton">
++       <property name="minimumSize">
++        <size>
++         <width>0</width>
++         <height>36</height>
++        </size>
++       </property>
+        <property name="styleSheet">
+         <string notr="true"/>
+        </property>
+diff --git a/polkit-agent/src/modeButton.h b/polkit-agent/src/modeButton.h
+index 51ab67f..63bc0fd 100644
+--- a/polkit-agent/src/modeButton.h
++++ b/polkit-agent/src/modeButton.h
+@@ -37,7 +37,7 @@ public:
+     bool isShowPwd();
+ 
+ protected:
+-    bool eventFilter(QObject *obj, QEvent *event) override;  //事件过滤
++    bool eventFilter(QObject *obj, QEvent *event) override; //事件过滤
+ private:
+     void initStyleTheme();
+ 
+diff --git a/polkit-agent/src/pam-tally.c b/polkit-agent/src/pam-tally.c
+index da2651b..180c7d2 100644
+--- a/polkit-agent/src/pam-tally.c
++++ b/polkit-agent/src/pam-tally.c
+@@ -111,7 +111,7 @@ int get_is_open_other_authentication()
+ int get_pam_tally(int *deny, int *unlock_time , int *root_unlock_time)
+ {
+ 	char buf[128];
+-	FILE *auth_file;
++    FILE *auth_file = NULL;
+ 
+ 	if( (auth_file = fopen("/etc/pam.d/common-auth", "r")) == NULL)
+ 		return -1;
+@@ -138,8 +138,12 @@ int get_pam_tally(int *deny, int *unlock_time , int *root_unlock_time)
+ 			}
+ 			ptr = strtok(NULL, " \t");
+ 		}
++                 fclose(auth_file);
++                 auth_file = NULL;
+ 		return 1;
+ 	}
++        fclose(auth_file);
++        auth_file = NULL;
+ 	return 0;
+ }
+ 
+@@ -389,15 +393,15 @@ void get_tally(uid_t uid, int *tfile, struct tallylog *tally)
+ 
+ int pam_tally_unlock_time_left(int uid, int *fail_cnt,int *left_time, int *deny, int *fail_time, int *unlock_time1)
+ {
+-	pam_tally *tally_ptr;
++    pam_tally *tally_ptr;
+ 
+-	if((tally_ptr = pam_tally_memory()) == NULL)
+-		return 0;
++    if((tally_ptr = pam_tally_memory()) == NULL)
++        return 0;
+ 
+-	int unlock_time = tally_ptr->unlock_time;
++    int unlock_time = tally_ptr->unlock_time;
+ 	*deny = tally_ptr->deny;
+ 	if(unlock_time == 0)
+-		return 0;
++        return 0;
+ 
+     int tfile = -1;
+ 	struct tallylog tally;
+diff --git a/polkit-agent/src/pam-tally.h b/polkit-agent/src/pam-tally.h
+index 2585f56..5741e83 100644
+--- a/polkit-agent/src/pam-tally.h
++++ b/polkit-agent/src/pam-tally.h
+@@ -21,30 +21,32 @@
+ #include <time.h>
+ 
+ #ifdef __cplusplus
+-extern "C" {
++extern "C"
++{
+ #endif
+ 
+ #define SHM_TALLY "/shm_tally"
+-struct _pam_tally {
+-    int deny;               //失败次数上限
+-    int unlock_time;        //普通用户失败次数达到上限后,多少秒之后才能解锁
+-    int root_unlock_time;   //root用户失败次数达到上限后,多少秒之后才能解锁
+-    int failed;             //当前失败的次数
+-    time_t lock_start_time; //失败次数达到上限后,开始计时
+-};
+-typedef struct _pam_tally pam_tally;
++    struct _pam_tally
++    {
++        int deny;               //失败次数上限
++        int unlock_time;        //普通用户失败次数达到上限后,多少秒之后才能解锁
++        int root_unlock_time;   // root用户失败次数达到上限后,多少秒之后才能解锁
++        int failed;             //当前失败的次数
++        time_t lock_start_time; //失败次数达到上限后,开始计时
++    };
++    typedef struct _pam_tally pam_tally;
+ 
+-int pam_tally_init();
+-int pam_tally_add_failed();
+-int pam_tally_clear_failed();
+-int pam_tally_falure_is_out();
+-int pam_tally_deny();
+-int pam_tally_failed_count();
+-int pam_tally_unlock_time();
+-int pam_tally_is_enbled();
+-int pam_tally_is_canUnlock();
+-int pam_tally_unlock_time_left(int uid, int *fail_cnt, int *left_time, int *deny, int *fail_time, int *unlock_time);
+-int pam_tally_root_unlock_time_left(int *fail_cnt, int *left_time, int *deny, int *fail_time, int *unlock_time1);
++    int pam_tally_init();
++    int pam_tally_add_failed();
++    int pam_tally_clear_failed();
++    int pam_tally_falure_is_out();
++    int pam_tally_deny();
++    int pam_tally_failed_count();
++    int pam_tally_unlock_time();
++    int pam_tally_is_enbled();
++    int pam_tally_is_canUnlock();
++    int pam_tally_unlock_time_left(int uid, int *fail_cnt, int *left_time, int *deny, int *fail_time, int *unlock_time);
++    int pam_tally_root_unlock_time_left(int *fail_cnt, int *left_time, int *deny, int *fail_time, int *unlock_time1);
+ 
+ #ifdef __cplusplus
+ }
+diff --git a/polkit-agent/src/sessionmanager.cpp b/polkit-agent/src/sessionmanager.cpp
+index 61d4ace..d9ee886 100644
+--- a/polkit-agent/src/sessionmanager.cpp
++++ b/polkit-agent/src/sessionmanager.cpp
+@@ -27,40 +27,35 @@
+ #define SM_DBUS_INTERFACE "org.gnome.SessionManager"
+ #define SM_DBUS_CLIENT_INTERFACE "org.gnome.SessionManager.ClientPrivate"
+ 
+-
+ SessionManager::SessionManager(QObject *parent) : QObject(parent)
+ {
+-    smInterface = new QDBusInterface(SM_DBUS_SERVICE,
+-                             SM_DBUS_PATH,
+-                             SM_DBUS_INTERFACE,
+-                             QDBusConnection::sessionBus());
++    smInterface = new QDBusInterface(SM_DBUS_SERVICE, SM_DBUS_PATH, SM_DBUS_INTERFACE, QDBusConnection::sessionBus());
+     QString appId("polkit-ukui-authentication-agent-1.desktop");
+     QString clientStartupId(qgetenv("DESKTOP_AUTOSTART_ID"));
+ 
+-    QDBusReply<QDBusObjectPath> reply = smInterface->call("RegisterClient",
+-                                                       appId, clientStartupId);
++    QDBusReply<QDBusObjectPath> reply = smInterface->call("RegisterClient", appId, clientStartupId);
+ 
+-    if(!reply.isValid()) {
++    if (!reply.isValid()) {
+         qWarning() << "Register Client to gnome session failed";
+     }
+     clientId = reply.value().path();
+ 
+     qDebug() << "Register Client to gnome session: " << reply.value().path();
+ 
+-    clientInterface = new QDBusInterface(SM_DBUS_SERVICE,
+-                                   clientId,
+-                                   SM_DBUS_CLIENT_INTERFACE,
+-                                   QDBusConnection::sessionBus());
++    clientInterface
++        = new QDBusInterface(SM_DBUS_SERVICE, clientId, SM_DBUS_CLIENT_INTERFACE, QDBusConnection::sessionBus());
+     qDebug() << clientInterface->isValid();
+ 
+     QDBusConnection conn = clientInterface->connection();
+-    conn.connect(SM_DBUS_SERVICE, clientId, SM_DBUS_CLIENT_INTERFACE,
+-                 "Stop", this, SLOT(onStop()));
+-    conn.connect(SM_DBUS_SERVICE, clientId, SM_DBUS_CLIENT_INTERFACE,
+-                 "EndSession", this, SLOT(onEndSession(unsigned int)));
+-    conn.connect(SM_DBUS_SERVICE, clientId, SM_DBUS_CLIENT_INTERFACE,
+-                 "QueryEndSession", this, SLOT(onQueryEndSession(unsigned int)));
+-
++    conn.connect(SM_DBUS_SERVICE, clientId, SM_DBUS_CLIENT_INTERFACE, "Stop", this, SLOT(onStop()));
++    conn.connect(
++        SM_DBUS_SERVICE, clientId, SM_DBUS_CLIENT_INTERFACE, "EndSession", this, SLOT(onEndSession(unsigned int)));
++    conn.connect(SM_DBUS_SERVICE,
++                 clientId,
++                 SM_DBUS_CLIENT_INTERFACE,
++                 "QueryEndSession",
++                 this,
++                 SLOT(onQueryEndSession(unsigned int)));
+ }
+ 
+ void SessionManager::onStop()
+@@ -82,6 +77,6 @@ void SessionManager::onQueryEndSession(unsigned int flag)
+ void SessionManager::endSessionResponse()
+ {
+     QDBusMessage msg = clientInterface->call("EndSessionResponse", true, "");
+-    if(msg.type() == QDBusMessage::ErrorMessage)
++    if (msg.type() == QDBusMessage::ErrorMessage)
+         qDebug() << "Failed to call EndSessionResponse " << msg.errorMessage();
+ }
+diff --git a/polkit-agent/src/types.h b/polkit-agent/src/types.h
+index ded7185..3881c37 100644
+--- a/polkit-agent/src/types.h
++++ b/polkit-agent/src/types.h
+@@ -34,34 +34,34 @@ enum ScreenStatus
+     SCREEN_LOCK = 0x02
+ };
+ 
+-#define SM_DBUS_SERVICE     "org.gnome.SessionManager"
+-#define SM_DBUS_PATH        "/org/gnome/SessionManager/Presence"
+-#define SM_DBUS_INTERFACE   "org.gnome.SessionManager.Presence"
++#define SM_DBUS_SERVICE "org.gnome.SessionManager"
++#define SM_DBUS_PATH "/org/gnome/SessionManager/Presence"
++#define SM_DBUS_INTERFACE "org.gnome.SessionManager.Presence"
+ 
+-#define DM_DBUS_SERVICE     "org.freedesktop.DisplayManager"
+-#define DM_DBUS_PATH        "/org/freedesktop/DisplayManager"
+-#define DM_DBUS_INTERFACE   "org.freedesktop.DisplayManager"
+-#define DM_SEAT_INTERFACE   "org.freedesktop.DisplayManager.Seat"
++#define DM_DBUS_SERVICE "org.freedesktop.DisplayManager"
++#define DM_DBUS_PATH "/org/freedesktop/DisplayManager"
++#define DM_DBUS_INTERFACE "org.freedesktop.DisplayManager"
++#define DM_SEAT_INTERFACE "org.freedesktop.DisplayManager.Seat"
+ 
+-#define ACT_DBUS_SERVICE    "org.freedesktop.Accounts"
+-#define ACT_DBUS_PATH       "/org/freedesktop/Accounts"
+-#define ACT_DBUS_INTERFACE  "org.freedesktop.Accounts"
+-#define ACT_USER_INTERFACE  "org.freedesktop.Accounts.User"
++#define ACT_DBUS_SERVICE "org.freedesktop.Accounts"
++#define ACT_DBUS_PATH "/org/freedesktop/Accounts"
++#define ACT_DBUS_INTERFACE "org.freedesktop.Accounts"
++#define ACT_USER_INTERFACE "org.freedesktop.Accounts.User"
+ 
+ #define DBUS_PROP_INTERFACE "org.freedesktop.DBus.Properties"
+ 
+-#define SS_DBUS_SERVICE     "org.ukui.ScreenSaver"
+-#define SS_DBUS_PATH        "/"
+-#define SS_DBUS_INTERFACE   "org.ukui.ScreenSaver"
++#define SS_DBUS_SERVICE "org.ukui.ScreenSaver"
++#define SS_DBUS_PATH "/"
++#define SS_DBUS_INTERFACE "org.ukui.ScreenSaver"
+ 
+ #define BIO_ERROR -1
+ #define BIO_FAILED 0
+ #define BIO_SUCCESS 1
+ #define BIO_IGNORE 2
+ 
+-#define BIOMETRIC_PAM       "BIOMETRIC_PAM"
+-#define BIOMETRIC_IGNORE    "BIOMETRIC_IGNORE"
+-#define BIOMETRIC_SUCCESS   "BIOMETRIC_SUCCESS"
+-#define BIOMETRIC_FAILED    "BIOMETRIC_FAILED"
++#define BIOMETRIC_PAM "BIOMETRIC_PAM"
++#define BIOMETRIC_IGNORE "BIOMETRIC_IGNORE"
++#define BIOMETRIC_SUCCESS "BIOMETRIC_SUCCESS"
++#define BIOMETRIC_FAILED "BIOMETRIC_FAILED"
+ 
+ #endif // TYPES_H
+diff --git a/polkit-agent/src/usdblockshortcut.cpp b/polkit-agent/src/usdblockshortcut.cpp
+new file mode 100644
+index 0000000..2d0b57c
+--- /dev/null
++++ b/polkit-agent/src/usdblockshortcut.cpp
+@@ -0,0 +1,61 @@
++/*
++ * Copyright (C) 2024 Tianjin KYLIN Information Technology Co., Ltd.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 3, or (at your option)
++ * any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, see <http://www.gnu.org/licenses/>.
++ *
++ **/
++#include "usdblockshortcut.h"
++#include <QDBusConnection>
++#include <QDBusError>
++#include <QDBusMetaType>
++#include <QDebug>
++
++USDBlockShortCut::USDBlockShortCut(QObject *parent) : QObject(parent)
++{
++    QString displayNum = QString(qgetenv("DISPLAY")).replace(":", "").replace(".", "_");
++    m_strDbusPath = QString("%1%2").arg(QString("org.ukui.settingsDaemon.shortcut.ukui-polkit")).arg(displayNum);
++    m_isRegistService = QDBusConnection::sessionBus().registerService(m_strDbusPath);
++    if (!m_isRegistService) {
++        qInfo() << "registerService " << m_strDbusPath << " failed!!";
++    } else {
++        m_isRegistObject = QDBusConnection::sessionBus().registerObject(
++            "/org/ukui/settingsDaemon/shortcut",
++            "org.ukui.settingsDaemon.shortcut",
++            this,
++            QDBusConnection::ExportAllSlots | QDBusConnection::ExportAllProperties);
++        if (!m_isRegistObject) {
++            qInfo() << "registerObject /org/ukui/settingsDaemon/shortcut failed!!";
++        }
++    }
++}
++
++USDBlockShortCut::~USDBlockShortCut()
++{
++    if (m_isRegistObject) {
++        QDBusConnection::sessionBus().unregisterObject("/org/ukui/settingsDaemon/shortcut");
++        m_isRegistObject = false;
++    }
++    if (m_isRegistService) {
++        QDBusConnection::sessionBus().unregisterService(m_strDbusPath);
++        m_isRegistService = false;
++    }
++}
++
++QStringList USDBlockShortCut::blockShortcuts()
++{
++    QStringList listShortCut = {
++        "WINDOWSWITCH_KEY", "WLCOM_SWITCH_WORKSPACE", "WLCOM_WINDOW_ACTION", "WLCOM_MAXIMIZED_VIEWS", "WLCOM_CTRL_VIEWS"
++    };
++    return listShortCut;
++}
+diff --git a/polkit-agent/src/usdblockshortcut.h b/polkit-agent/src/usdblockshortcut.h
+new file mode 100644
+index 0000000..645cba9
+--- /dev/null
++++ b/polkit-agent/src/usdblockshortcut.h
+@@ -0,0 +1,49 @@
++/*
++ * Copyright (C) 2024 Tianjin KYLIN Information Technology Co., Ltd.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 3, or (at your option)
++ * any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, see <http://www.gnu.org/licenses/>.
++ *
++ **/
++#ifndef USDBLOCKSHORTCUT_H
++#define USDBLOCKSHORTCUT_H
++
++#include <QObject>
++#include <QDBusAbstractAdaptor>
++#include <QDBusContext>
++#include <QStringList>
++
++class USDBlockShortCut : public QObject, public QDBusContext
++{
++    Q_OBJECT
++    Q_CLASSINFO("D-Bus Interface", "org.ukui.settingsDaemon.shortcut")
++    Q_PROPERTY(QStringList blockShortcuts READ blockShortcuts)
++
++public:
++    USDBlockShortCut(QObject *parent = nullptr);
++    virtual ~USDBlockShortCut();
++
++public slots:
++    /**
++     * @brief blockShortcuts 禁用按键列表
++     * @return 禁用按键字符串列表
++     */
++    QStringList blockShortcuts();
++
++private:
++    bool m_isRegistService = false; /**是否已注册服务*/
++    bool m_isRegistObject = false;  /**是否已注册对象*/
++    QString m_strDbusPath;          /**dbus服务路径*/
++};
++
++#endif // USDBLOCKSHORTCUT_H
+diff --git a/polkit-agent/src/users.cpp b/polkit-agent/src/users.cpp
+index 64395c5..d9908f5 100644
+--- a/polkit-agent/src/users.cpp
++++ b/polkit-agent/src/users.cpp
+@@ -29,8 +29,7 @@
+ 
+ QDebug operator<<(QDebug stream, const UserItem &user)
+ {
+-    stream << user.name << user.realName << user.uid
+-           << user.icon << user.path;
++    stream << user.name << user.realName << user.uid << user.icon << user.path;
+     return stream;
+ }
+ 
+@@ -47,26 +46,20 @@ QList<UserItem> Users::getUsers()
+ 
+ UserItem Users::getUserByName(const QString &name)
+ {
+-    for(int i = 0 ; i < users.size() ; i++) {
+-        if(users.at(i).name == name)
+-        {
++    for (int i = 0; i < users.size(); i++) {
++        if (users.at(i).name == name) {
+             return users.at(i);
+         }
+     }
+     UserItem user;
+-    if(name == "root")
+-    {
++    if (name == "root") {
+         user.icon = "/root/.face";
+-        if(!QFile(user.icon).exists())
+-        {
++        if (!QFile(user.icon).exists()) {
+             user.icon = defaultIcon;
+         }
+-    }
+-    else
+-    {
+-        user.icon = qgetenv("HOME")+"/.face";
+-        if(!QFile(user.icon).exists())
+-        {
++    } else {
++        user.icon = qgetenv("HOME") + "/.face";
++        if (!QFile(user.icon).exists()) {
+             user.icon = defaultIcon;
+         }
+     }
+@@ -81,29 +74,23 @@ QString Users::getDefaultIcon()
+     return defaultIcon;
+ }
+ 
+-
+-//https://stackoverflow.com/questions/20206376/
+-//how-do-i-extract-the-returned-data-from-qdbusmessage-in-a-qt-dbus-call
++// https://stackoverflow.com/questions/20206376/
++// how-do-i-extract-the-returned-data-from-qdbusmessage-in-a-qt-dbus-call
+ void Users::loadUsers()
+ {
+     qDebug() << "loadUsers";
+-    actService = new QDBusInterface(ACT_DBUS_SERVICE,
+-                                    ACT_DBUS_PATH,
+-                                    ACT_DBUS_INTERFACE,
+-                                    QDBusConnection::systemBus());
++    actService = new QDBusInterface(ACT_DBUS_SERVICE, ACT_DBUS_PATH, ACT_DBUS_INTERFACE, QDBusConnection::systemBus());
+ 
+-    connect(actService, SIGNAL(UserAdded(const QDBusObjectPath&)),
+-            this, SLOT(onUserAdded(const QDBusObjectPath&)));
+-    connect(actService, SIGNAL(UserDeleted(const QDBusObjectPath&)),
+-            this, SLOT(onUserDeleted(const QDBusObjectPath&)));
++    connect(actService, SIGNAL(UserAdded(const QDBusObjectPath &)), this, SLOT(onUserAdded(const QDBusObjectPath &)));
++    connect(
++        actService, SIGNAL(UserDeleted(const QDBusObjectPath &)), this, SLOT(onUserDeleted(const QDBusObjectPath &)));
+     QDBusMessage ret = actService->call("ListCachedUsers");
+-    QList<QVariant> outArgs = ret.arguments();  //(QVariant(QDBusArgument,))
+-    QVariant first = outArgs.at(0); //QVariant(QDBusArgument,)
++    QList<QVariant> outArgs = ret.arguments(); //(QVariant(QDBusArgument,))
++    QVariant first = outArgs.at(0);            // QVariant(QDBusArgument,)
+     const QDBusArgument &dbusArgs = first.value<QDBusArgument>();
+     QDBusObjectPath path;
+     dbusArgs.beginArray();
+-    while (!dbusArgs.atEnd())
+-    {
++    while (!dbusArgs.atEnd()) {
+         dbusArgs >> path;
+         getUser(path.path());
+     }
+@@ -112,10 +99,7 @@ void Users::loadUsers()
+ 
+ UserItem Users::getUser(const QString &path)
+ {
+-    QDBusInterface iface(ACT_DBUS_SERVICE,
+-                         path,
+-                         DBUS_PROP_INTERFACE,
+-                         QDBusConnection::systemBus());
++    QDBusInterface iface(ACT_DBUS_SERVICE, path, DBUS_PROP_INTERFACE, QDBusConnection::systemBus());
+     QDBusMessage ret = iface.call("GetAll", ACT_USER_INTERFACE);
+     QList<QVariant> outArgs = ret.arguments();
+     QVariant first = outArgs.at(0);
+@@ -123,57 +107,45 @@ UserItem Users::getUser(const QString &path)
+     UserItem user;
+     user.path = path;
+     dbusArgs.beginMap();
+-    while(!dbusArgs.atEnd())
+-    {
++    while (!dbusArgs.atEnd()) {
+         QString key;
+         QVariant value;
+         dbusArgs.beginMapEntry();
+         dbusArgs >> key >> value;
+-        if(key == "UserName")
+-        {
+-	    user.name = value.toString();
+-	}
+-        else if(key == "RealName")
+-        {
++        if (key == "UserName") {
++            user.name = value.toString();
++        } else if (key == "RealName") {
+             user.realName = value.toString();
+-        }
+-        else if(key == "IconFile")
+-        {
++        } else if (key == "IconFile") {
+             user.icon = value.toString();
+-            if(!QFile(user.icon).exists())
+-            {
++            if (!QFile(user.icon).exists()) {
+                 user.icon = defaultIcon;
+             }
+-        }
+-        else if(key == "Uid")
+-        {
++        } else if (key == "Uid") {
+             user.uid = value.toUInt();
+         }
+         dbusArgs.endMapEntry();
+     }
+     dbusArgs.endMap();
+-    if(user.realName.isEmpty())
+-    {
++    if (user.realName.isEmpty()) {
+         user.realName = user.name;
+     }
+     users.push_back(user);
+     return user;
+ }
+ 
+-void Users::onUserAdded(const QDBusObjectPath& path)
++void Users::onUserAdded(const QDBusObjectPath &path)
+ {
+     int index = findUserByPath(path.path());
+-    if(index >=0 &&index<users.count())
+-    {
++    if (index >= 0 && index < users.count()) {
+         UserItem user = getUser(path.path());
+         Q_EMIT userAdded(user);
+     }
+ }
+-void Users::onUserDeleted(const QDBusObjectPath& path)
++void Users::onUserDeleted(const QDBusObjectPath &path)
+ {
+     int index = findUserByPath(path.path());
+-    if(index >= 0 && index<users.count())
+-    {
++    if (index >= 0 && index < users.count()) {
+         UserItem user = users.at(index);
+         users.removeAt(index);
+         Q_EMIT userDeleted(user);
+@@ -182,13 +154,9 @@ void Users::onUserDeleted(const QDBusObjectPath& path)
+ 
+ int Users::findUserByPath(const QString &path)
+ {
+-    auto iter = std::find_if(users.begin(), users.end(),
+-                          [&](const UserItem &user){
+-        return user.path == path;
+-    });
++    auto iter = std::find_if(users.begin(), users.end(), [&](const UserItem &user) { return user.path == path; });
+ 
+     int index = iter - users.begin();
+ 
+     return index;
+ }
+-
+diff --git a/polkit-agent/src/users.h b/polkit-agent/src/users.h
+index 509cb3f..747bcc3 100644
+--- a/polkit-agent/src/users.h
++++ b/polkit-agent/src/users.h
+@@ -20,14 +20,13 @@
+ 
+ #include <QObject>
+ 
+-
+ struct UserItem
+ {
+     QString name;
+     QString realName;
+     QString icon;
+     quint64 uid;
+-    QString path;   //accounts service path
++    QString path; // accounts service path
+     friend QDebug operator<<(QDebug stream, const UserItem &user);
+ };
+ 
+@@ -48,17 +47,17 @@ private:
+     int findUserByPath(const QString &path);
+ 
+ private Q_SLOTS:
+-    void onUserAdded(const QDBusObjectPath& path);
+-    void onUserDeleted(const QDBusObjectPath& path);
++    void onUserAdded(const QDBusObjectPath &path);
++    void onUserDeleted(const QDBusObjectPath &path);
+ 
+ Q_SIGNALS:
+     void userAdded(const UserItem &user);
+     void userDeleted(const UserItem &user);
+ 
+ private:
+-    QDBusInterface      *actService;
+-    QList<UserItem>     users;
+-    QString             defaultIcon;
++    QDBusInterface *actService;
++    QList<UserItem> users;
++    QString defaultIcon;
+ };
+ 
+ #endif // USERS_H
diff -Nru ukui-biometric-auth-4.10.0.0/debian/patches/0002-update-changelog.patch ukui-biometric-auth-4.20.0.0/debian/patches/0002-update-changelog.patch
--- ukui-biometric-auth-4.10.0.0/debian/patches/0002-update-changelog.patch	2024-04-23 10:31:46.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/debian/patches/0002-update-changelog.patch	2024-11-15 17:01:40.000000000 +0800
@@ -1,50 +1,59 @@
-From: yangmin <winner_yangmin@163.com>
-Date: Fri, 17 Nov 2023 10:08:07 +0800
+From: yangmin100 <yangmin@kylinos.cn>
+Date: Fri, 15 Nov 2024 17:03:14 +0800
 Subject: update changelog
 
 ---
- polkit-agent/CMakeLists.txt     | 3 +--
- polkit-agent/src/mainwindow.cpp | 2 --
- 2 files changed, 1 insertion(+), 4 deletions(-)
+ polkit-agent/src/fullscreenbackground.cpp | 38 +++++++++++++++----------------
+ 1 file changed, 19 insertions(+), 19 deletions(-)
 
-diff --git a/polkit-agent/CMakeLists.txt b/polkit-agent/CMakeLists.txt
-index c5065d1..fa7768e 100644
---- a/polkit-agent/CMakeLists.txt
-+++ b/polkit-agent/CMakeLists.txt
-@@ -6,7 +6,6 @@ pkg_check_modules(KDKINFO REQUIRED kysdk-sysinfo)
- 
- find_package(PolkitQt5-1 REQUIRED 0.103.0)
- find_package(Qt5 COMPONENTS Core Widgets DBus X11Extras Xml Network Svg)
--find_package(KF5WindowSystem)
- set(CMAKE_AUTOMOC ON)
- set(CMAKE_AUTOUIC ON)
- set(CMAKE_AUTORCC ON)
-@@ -60,7 +59,7 @@ set(polkit_SRCS
- 
- add_executable(polkit-ukui-authentication-agent-1 ${polkit_SRCS})
- target_link_libraries(polkit-ukui-authentication-agent-1
--    Qt5::Core Qt5::Widgets Qt5::DBus ${EXTRA_LIBS} KF5::WindowSystem
-+    Qt5::Core Qt5::Widgets Qt5::DBus ${EXTRA_LIBS}
-     ${POLKITQT-1_LIBRARIES}
-     BioAuthWidgets
-     -lrt
-diff --git a/polkit-agent/src/mainwindow.cpp b/polkit-agent/src/mainwindow.cpp
-index c72a01d..bbc327f 100644
---- a/polkit-agent/src/mainwindow.cpp
-+++ b/polkit-agent/src/mainwindow.cpp
-@@ -30,7 +30,6 @@
- #include <QFontMetrics>
- #include <QtMath>
- #include <QAbstractItemView>
--#include <KWindowSystem>
- #include <fcntl.h>
- #include <unistd.h>
- #include <sys/types.h>
-@@ -62,7 +61,6 @@ MainWindow::MainWindow(QWidget *parent) :
-     m_nCurLockMin(0),
-     isbioSuccess(false)
+diff --git a/polkit-agent/src/fullscreenbackground.cpp b/polkit-agent/src/fullscreenbackground.cpp
+index 9bbaa3d..40bb5b8 100644
+--- a/polkit-agent/src/fullscreenbackground.cpp
++++ b/polkit-agent/src/fullscreenbackground.cpp
+@@ -338,27 +338,27 @@ void FullScreenBackground::moveToScreen(QScreen *screen)
+ void FullScreenBackground::moveToCursorScreen()
  {
--    KWindowSystem::setState(this->winId(), NET::SkipTaskbar | NET::SkipPager);
-     ui->setupUi(this);
-     setWindowTitle(tr("Authentication"));
-     setWindowFlags(Qt::WindowCloseButtonHint | Qt::WindowStaysOnTopHint);
+     bool isFoundScreen = false;
+-    if (m_isWayland) {
+-        QString strCurScreen = WindowManager::currentOutputName();
+-        for (auto screen : QApplication::screens()) {
+-            qDebug() << "Screen:" << screen->name() << "," << screen->geometry();
+-            if (screen && screen->name() == strCurScreen) {
+-                isFoundScreen = true;
+-                moveToScreen(screen);
+-                break;
+-            }
+-        }
+-    } else {
+-        QPoint cursor = QCursor::pos();
+-        for (auto screen : QApplication::screens()) {
+-            qDebug() << "Screen:" << screen->name() << "," << screen->geometry();
+-            if (screen && screen->geometry().contains(cursor)) {
+-                isFoundScreen = true;
+-                moveToScreen(screen);
+-                break;
+-            }
++    //    if (m_isWayland) {
++    //        QString strCurScreen = WindowManager::currentOutputName();
++    //        for (auto screen : QApplication::screens()) {
++    //            qDebug() << "Screen:" << screen->name() << "," << screen->geometry();
++    //            if (screen && screen->name() == strCurScreen) {
++    //                isFoundScreen = true;
++    //                moveToScreen(screen);
++    //                break;
++    //            }
++    //        }
++    //    } else {
++    QPoint cursor = QCursor::pos();
++    for (auto screen : QApplication::screens()) {
++        qDebug() << "Screen:" << screen->name() << "," << screen->geometry();
++        if (screen && screen->geometry().contains(cursor)) {
++            isFoundScreen = true;
++            moveToScreen(screen);
++            break;
+         }
+     }
++    //    }
+     if (!isFoundScreen) {
+         if (QApplication::primaryScreen()) {
+             moveToScreen(QApplication::primaryScreen());
diff -Nru ukui-biometric-auth-4.10.0.0/debian/patches/0003-update-changelog.patch ukui-biometric-auth-4.20.0.0/debian/patches/0003-update-changelog.patch
--- ukui-biometric-auth-4.10.0.0/debian/patches/0003-update-changelog.patch	2024-04-23 10:31:46.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/debian/patches/0003-update-changelog.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,7094 +0,0 @@
-From: yangmin <winner_yangmin@163.com>
-Date: Mon, 27 Nov 2023 17:42:21 +0800
-Subject: update changelog
-
----
- bioauth-bin/i18n_ts/bo.ts           |  76 +++++++++-----
- bioauth-bin/i18n_ts/bo_CN.ts        |  17 ++--
- bioauth-bin/i18n_ts/de.ts           | 197 +++++++++++++++++++++++++++---------
- bioauth-bin/i18n_ts/es.ts           | 193 +++++++++++++++++++++++++++--------
- bioauth-bin/i18n_ts/fr.ts           | 193 +++++++++++++++++++++++++++--------
- bioauth-bin/i18n_ts/kk.ts           | 193 +++++++++++++++++++++++++++--------
- bioauth-bin/i18n_ts/ky.ts           | 197 +++++++++++++++++++++++++++---------
- bioauth-bin/i18n_ts/mn.ts           | 197 +++++++++++++++++++++++++++---------
- bioauth-bin/i18n_ts/pt.ts           |  16 +++
- bioauth-bin/i18n_ts/ru.ts           |  16 +++
- bioauth-bin/i18n_ts/tr.ts           |  76 +++++++++-----
- bioauth-bin/i18n_ts/ug.ts           | 197 +++++++++++++++++++++++++++---------
- bioauth-bin/i18n_ts/zh_CN.ts        |  64 ++++++------
- bioauth-bin/i18n_ts/zh_HK.ts        | 197 +++++++++++++++++++++++++++---------
- bioauth/i18n_ts/bo.ts               |  34 ++++---
- bioauth/i18n_ts/bo_CN.ts            |   6 +-
- bioauth/i18n_ts/es.ts               |  12 ++-
- bioauth/i18n_ts/fr.ts               |  12 ++-
- bioauth/i18n_ts/mn.ts               |  26 +++--
- bioauth/i18n_ts/pt.ts               |  12 ++-
- bioauth/i18n_ts/ru.ts               |  12 ++-
- bioauth/i18n_ts/tr.ts               |  34 ++++---
- bioauth/i18n_ts/zh_CN.ts            |  30 +++---
- bioauth/i18n_ts/zh_HK.ts            |  26 +++--
- polkit-agent/i18n_ts/bo.ts          | 126 +++++++++++++----------
- polkit-agent/i18n_ts/bo_CN.ts       | 126 +++++++++++++----------
- polkit-agent/i18n_ts/de.ts          | 126 +++++++++++++----------
- polkit-agent/i18n_ts/es.ts          | 126 +++++++++++++----------
- polkit-agent/i18n_ts/fr.ts          | 126 +++++++++++++----------
- polkit-agent/i18n_ts/kk.ts          | 126 +++++++++++++----------
- polkit-agent/i18n_ts/ky.ts          | 126 +++++++++++++----------
- polkit-agent/i18n_ts/mn.ts          |  48 ++++-----
- polkit-agent/i18n_ts/pt.ts          |  12 +++
- polkit-agent/i18n_ts/ru.ts          |  12 +++
- polkit-agent/i18n_ts/tr.ts          | 126 +++++++++++++----------
- polkit-agent/i18n_ts/ug.ts          | 126 +++++++++++++----------
- polkit-agent/i18n_ts/zh_CN.ts       | 122 ++++++++++++----------
- polkit-agent/i18n_ts/zh_HK.ts       | 108 ++++++++++----------
- polkit-agent/src/PolkitListener.cpp |  18 ++--
- polkit-agent/src/mainwindow.cpp     |   2 +-
- 40 files changed, 2344 insertions(+), 1145 deletions(-)
-
-diff --git a/bioauth-bin/i18n_ts/bo.ts b/bioauth-bin/i18n_ts/bo.ts
-index 6f9b4cc..494a230 100644
---- a/bioauth-bin/i18n_ts/bo.ts
-+++ b/bioauth-bin/i18n_ts/bo.ts
-@@ -4,114 +4,134 @@
- <context>
-     <name>QObject</name>
-     <message>
--        <location filename="../src/main.cpp" line="100"/>
-+        <location filename="../src/main.cpp" line="126"/>
-+        <source>Enter the ukey password</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="150"/>
-         <source>Try it again</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="102"/>
-+        <location filename="../src/main.cpp" line="152"/>
-         <source>Use other Devices</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="103"/>
-+        <location filename="../src/main.cpp" line="153"/>
-         <source>Cancel</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="112"/>
-+        <location filename="../src/main.cpp" line="162"/>
-         <source>Choose the option</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="134"/>
--        <location filename="../src/main.cpp" line="169"/>
--        <location filename="../src/main.cpp" line="178"/>
-+        <location filename="../src/main.cpp" line="184"/>
-+        <location filename="../src/main.cpp" line="219"/>
-+        <location filename="../src/main.cpp" line="228"/>
-         <source>Invaild response &quot;</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="134"/>
--        <location filename="../src/main.cpp" line="169"/>
--        <location filename="../src/main.cpp" line="178"/>
-+        <location filename="../src/main.cpp" line="184"/>
-+        <location filename="../src/main.cpp" line="219"/>
-+        <location filename="../src/main.cpp" line="228"/>
-         <source>authentication will be canceld</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="135"/>
--        <location filename="../src/main.cpp" line="170"/>
--        <location filename="../src/main.cpp" line="179"/>
--        <location filename="../src/main.cpp" line="315"/>
-+        <location filename="../src/main.cpp" line="185"/>
-+        <location filename="../src/main.cpp" line="220"/>
-+        <location filename="../src/main.cpp" line="229"/>
-+        <location filename="../src/main.cpp" line="408"/>
-         <source>AUTHENTICATION CANCELED</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="146"/>
-+        <location filename="../src/main.cpp" line="196"/>
-         <source>=== BIOMETRIC DEVICES ===</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="157"/>
-+        <location filename="../src/main.cpp" line="207"/>
-         <source>Choose the device</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="210"/>
-+        <location filename="../src/main.cpp" line="260"/>
-         <source>Sevice Name</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="211"/>
-+        <location filename="../src/main.cpp" line="261"/>
-         <source>DISPLAY env</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="212"/>
-+        <location filename="../src/main.cpp" line="262"/>
-         <source>User</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="213"/>
-+        <location filename="../src/main.cpp" line="263"/>
-         <source>Display debug information</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="214"/>
-+        <location filename="../src/main.cpp" line="264"/>
-         <source>Device short name</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="249"/>
-+        <location filename="../src/main.cpp" line="306"/>
-+        <source>UKEY AUTHENTICATION</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="308"/>
-         <source>BIOMETRIC AUTHENTICATION</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="251"/>
-+        <location filename="../src/main.cpp" line="310"/>
-         <source>Press Q or Esc to cancel</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="263"/>
-+        <location filename="../src/main.cpp" line="330"/>
-+        <source>BIOMETRIC AUTHENTICATION IS CLOSED</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="334"/>
-         <source>AUTHENTICATION SUCCESS</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="267"/>
-+        <location filename="../src/main.cpp" line="338"/>
-         <source>AUTHENTICATION FAILED</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="277"/>
-+        <location filename="../src/main.cpp" line="348"/>
-         <source>Failed to verify %1, you still have %2 verification opportunities</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="279"/>
-+        <location filename="../src/main.cpp" line="350"/>
-         <source>Unable to verify %1, please enter password.</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="302"/>
-+        <location filename="../src/main.cpp" line="386"/>
-+        <source>AUTHENTICATION END</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="388"/>
-         <source>BIOMETRIC AUTHENTICATION END</source>
-         <translation type="unfinished"></translation>
-     </message>
-diff --git a/bioauth-bin/i18n_ts/bo_CN.ts b/bioauth-bin/i18n_ts/bo_CN.ts
-index 149ffa2..99a7e33 100644
---- a/bioauth-bin/i18n_ts/bo_CN.ts
-+++ b/bioauth-bin/i18n_ts/bo_CN.ts
-@@ -13,7 +13,7 @@
-     </message>
-     <message>
-         <source>=== BIOMETRIC DEVICES ===</source>
--        <translation>=== 生物识别设备 ===</translation>
-+        <translation>=== སྐྱེ་དངོས་ངོས་འཛིན་སྒྲིག་ཆས། ===</translation>
-     </message>
-     <message>
-         <source>Display debug information</source>
-@@ -81,28 +81,27 @@
-     </message>
-     <message>
-         <source>Failed to verify %1, you still have %2 verification opportunities</source>
--        <translation type="unfinished"></translation>
-+        <translation>ཚོད་ལྟས་ར་སྤྲོད་%1ཕམ་ཉེས་བྱུང་།ཁྱེད་རང་ད་དུང་ཡོད།%2ཚོད་ལྟ་བྱེད་པའི་གོ་སྐབས་ཤིག་རེད།</translation>
-     </message>
-     <message>
-         <source>Unable to verify %1, please enter password.</source>
--        <translation type="unfinished"></translation>
-+        <translation>ཚོད་ལྟས་ར་སྤྲོད་བྱེད་ཐབས་མེད%1,ཁྱོད་ཀྱིས་གསང་གྲངས་ནང་འཇུག་བྱེད་རོགས།</translation>
-     </message>
-     <message>
-         <source>UKEY AUTHENTICATION</source>
--        <translation type="unfinished"></translation>
-+        <translation>བདེ་འཇགས་ཀྱི་གསང་བའི་བདེན་དཔང་ར་སྤྲོད།</translation>
-     </message>
-     <message>
-         <source>BIOMETRIC AUTHENTICATION IS CLOSED</source>
--        <translation type="unfinished"></translation>
-+        <translation>སྐྱེ་དངོས་ཀྱི་ངོས་འཛིན་ཁས་ལེན་བྱས་པ་སྒོ་བརྒྱབ་ཟིན།</translation>
-     </message>
-     <message>
-         <source>AUTHENTICATION END</source>
--        <translation type="unfinished"></translation>
-+        <translation>བདེན་དཔང་ར་སྤྲོད་མཇུག་བསྒྲི</translation>
-     </message>
-     <message>
--        <source>Enter the ukey password
--</source>
--        <translation type="unfinished"></translation>
-+        <source>Enter the ukey password</source>
-+        <translation>བདེ་འཇགས་ཀྱི་གསང་བའི་གསང་བའི་ཨང་གྲངས་ནང་འཇུག་བྱེད་དགོས།</translation>
-     </message>
- </context>
- </TS>
-diff --git a/bioauth-bin/i18n_ts/de.ts b/bioauth-bin/i18n_ts/de.ts
-index c3eb69c..921d35b 100644
---- a/bioauth-bin/i18n_ts/de.ts
-+++ b/bioauth-bin/i18n_ts/de.ts
-@@ -3,20 +3,13 @@
- <TS version="2.1" language="de">
- <context>
-     <name>BioAuthWidget</name>
--    <message>
--        <location filename="../src/bioauthwidget.ui" line="14"/>
--        <source>Form</source>
--        <translation></translation>
--    </message>
-     <message>
-         <source>More</source>
-         <translation type="vanished">更多</translation>
-     </message>
-     <message>
--        <location filename="../src/bioauthwidget.ui" line="146"/>
--        <location filename="../src/bioauthwidget.cpp" line="41"/>
-         <source>Retry</source>
--        <translation>wiederholen</translation>
-+        <translation type="vanished">wiederholen</translation>
-     </message>
-     <message>
-         <source>Too many unsuccessful attempts,please enter password.</source>
-@@ -28,85 +21,70 @@
-     </message>
-     <message>
-         <source>Password</source>
--        <translation>Passwort</translation>
-+        <translation type="vanished">Passwort</translation>
-     </message>
-     <message>
-         <source>Current Device: </source>
-         <translation type="vanished">当前设备:</translation>
-     </message>
-     <message>
--        <location filename="../src/bioauthwidget.cpp" line="96"/>
--        <location filename="../src/bioauthwidget.cpp" line="212"/>
-         <source>%1 too many unsuccessful attempts,please enter password.</source>
--        <translation>%1 Es gibt zu viele fehlgeschlagene Versuche, bitte geben Sie Ihr Passwort ein.</translation>
-+        <translation type="vanished">%1 Es gibt zu viele fehlgeschlagene Versuche, bitte geben Sie Ihr Passwort ein.</translation>
-     </message>
-     <message>
--        <location filename="../src/bioauthwidget.cpp" line="102"/>
-         <source>%1 authentication failure,there are still %2 remaining opportunities</source>
--        <translation>%1 Authentifizierung fehlgeschlagen und es sind noch %2 verbleibende Chancen</translation>
-+        <translation type="vanished">%1 Authentifizierung fehlgeschlagen und es sind noch %2 verbleibende Chancen</translation>
-     </message>
-     <message>
--        <location filename="../src/bioauthwidget.cpp" line="226"/>
-         <source>Please use wechat to scan the code</source>
--        <translation>Bitte verwenden Sie WeChat, um den Code zu scannen</translation>
-+        <translation type="vanished">Bitte verwenden Sie WeChat, um den Code zu scannen</translation>
-     </message>
- </context>
- <context>
-     <name>BioDevices</name>
-     <message>
--        <location filename="../src/biodevices.cpp" line="78"/>
-         <source>Unplugging of %1 device detected</source>
--        <translation>Das %1-Gerät wurde vom Stromnetz getrennt</translation>
-+        <translation type="vanished">Das %1-Gerät wurde vom Stromnetz getrennt</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="88"/>
-         <source>%1 device insertion detected</source>
--        <translation>%1 angeschlossenes Gerät erkannt</translation>
-+        <translation type="vanished">%1 angeschlossenes Gerät erkannt</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="97"/>
-         <source>ukui-biometric-manager</source>
--        <translation>Tools für die biometrische Verwaltung</translation>
-+        <translation type="vanished">Tools für die biometrische Verwaltung</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="100"/>
-         <source>biometric</source>
--        <translation>Biologische Eigenschaften</translation>
-+        <translation type="vanished">Biologische Eigenschaften</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="647"/>
-         <source>FingerPrint</source>
--        <translation>Fingerabdruck</translation>
-+        <translation type="vanished">Fingerabdruck</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="649"/>
-         <source>FingerVein</source>
--        <translation>Fingervenen</translation>
-+        <translation type="vanished">Fingervenen</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="651"/>
-         <source>Iris</source>
--        <translation>Iris</translation>
-+        <translation type="vanished">Iris</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="653"/>
-         <source>Face</source>
--        <translation>Gesichtserkennung</translation>
-+        <translation type="vanished">Gesichtserkennung</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="655"/>
-         <source>VoicePrint</source>
--        <translation>Stimmenausdruck</translation>
-+        <translation type="vanished">Stimmenausdruck</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="657"/>
-         <source>ukey</source>
--        <translation>Sicherheitsschlüssel</translation>
-+        <translation type="vanished">Sicherheitsschlüssel</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="659"/>
-         <source>QRCode</source>
--        <translation>QR-Code</translation>
-+        <translation type="vanished">QR-Code</translation>
-     </message>
-     <message>
-         <source>Wechat</source>
-@@ -115,11 +93,6 @@
- </context>
- <context>
-     <name>BioDevicesWidget</name>
--    <message>
--        <location filename="../src/biodeviceswidget.ui" line="14"/>
--        <source>Form</source>
--        <translation></translation>
--    </message>
-     <message>
-         <source>Device types:</source>
-         <translation type="vanished">设备类型:</translation>
-@@ -140,14 +113,12 @@
- <context>
-     <name>LoginOptionsWidget</name>
-     <message>
--        <location filename="../src/loginoptionswidget.cpp" line="61"/>
-         <source>Login Options</source>
--        <translation>Anmeldeoptionen</translation>
-+        <translation type="vanished">Anmeldeoptionen</translation>
-     </message>
-     <message>
--        <location filename="../src/loginoptionswidget.cpp" line="294"/>
-         <source>Password</source>
--        <translation>Passwort</translation>
-+        <translation type="vanished">Passwort</translation>
-     </message>
-     <message>
-         <source>Wechat</source>
-@@ -180,5 +151,137 @@
-         <source>VoicePrint</source>
-         <translation type="vanished">声纹</translation>
-     </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="126"/>
-+        <source>Enter the ukey password</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="150"/>
-+        <source>Try it again</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="152"/>
-+        <source>Use other Devices</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="153"/>
-+        <source>Cancel</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="162"/>
-+        <source>Choose the option</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="184"/>
-+        <location filename="../src/main.cpp" line="219"/>
-+        <location filename="../src/main.cpp" line="228"/>
-+        <source>Invaild response &quot;</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="184"/>
-+        <location filename="../src/main.cpp" line="219"/>
-+        <location filename="../src/main.cpp" line="228"/>
-+        <source>authentication will be canceld</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="185"/>
-+        <location filename="../src/main.cpp" line="220"/>
-+        <location filename="../src/main.cpp" line="229"/>
-+        <location filename="../src/main.cpp" line="408"/>
-+        <source>AUTHENTICATION CANCELED</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="196"/>
-+        <source>=== BIOMETRIC DEVICES ===</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="207"/>
-+        <source>Choose the device</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="260"/>
-+        <source>Sevice Name</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="261"/>
-+        <source>DISPLAY env</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="262"/>
-+        <source>User</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="263"/>
-+        <source>Display debug information</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="264"/>
-+        <source>Device short name</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="306"/>
-+        <source>UKEY AUTHENTICATION</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="308"/>
-+        <source>BIOMETRIC AUTHENTICATION</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="310"/>
-+        <source>Press Q or Esc to cancel</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="330"/>
-+        <source>BIOMETRIC AUTHENTICATION IS CLOSED</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="334"/>
-+        <source>AUTHENTICATION SUCCESS</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="338"/>
-+        <source>AUTHENTICATION FAILED</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="348"/>
-+        <source>Failed to verify %1, you still have %2 verification opportunities</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="350"/>
-+        <source>Unable to verify %1, please enter password.</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="386"/>
-+        <source>AUTHENTICATION END</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="388"/>
-+        <source>BIOMETRIC AUTHENTICATION END</source>
-+        <translation type="unfinished"></translation>
-+    </message>
- </context>
- </TS>
-diff --git a/bioauth-bin/i18n_ts/es.ts b/bioauth-bin/i18n_ts/es.ts
-index 03ba179..4a94f0c 100644
---- a/bioauth-bin/i18n_ts/es.ts
-+++ b/bioauth-bin/i18n_ts/es.ts
-@@ -4,19 +4,16 @@
- <context>
-     <name>BioAuthWidget</name>
-     <message>
--        <location filename="../src/bioauthwidget.ui" line="14"/>
-         <source>Form</source>
--        <translation>Forma</translation>
-+        <translation type="vanished">Forma</translation>
-     </message>
-     <message>
-         <source>More</source>
-         <translation type="vanished">更多</translation>
-     </message>
-     <message>
--        <location filename="../src/bioauthwidget.ui" line="146"/>
--        <location filename="../src/bioauthwidget.cpp" line="41"/>
-         <source>Retry</source>
--        <translation>Reintentar</translation>
-+        <translation type="vanished">Reintentar</translation>
-     </message>
-     <message>
-         <source>Too many unsuccessful attempts,please enter password.</source>
-@@ -28,85 +25,70 @@
-     </message>
-     <message>
-         <source>Password</source>
--        <translation>Contraseña</translation>
-+        <translation type="vanished">Contraseña</translation>
-     </message>
-     <message>
-         <source>Current Device: </source>
-         <translation type="vanished">当前设备:</translation>
-     </message>
-     <message>
--        <location filename="../src/bioauthwidget.cpp" line="96"/>
--        <location filename="../src/bioauthwidget.cpp" line="212"/>
-         <source>%1 too many unsuccessful attempts,please enter password.</source>
--        <translation>%1 Demasiados intentos fallidos, ingrese la contraseña.</translation>
-+        <translation type="vanished">%1 Demasiados intentos fallidos, ingrese la contraseña.</translation>
-     </message>
-     <message>
--        <location filename="../src/bioauthwidget.cpp" line="102"/>
-         <source>%1 authentication failure,there are still %2 remaining opportunities</source>
--        <translation>%1 error de autenticación, todavía quedan %2 oportunidades</translation>
-+        <translation type="vanished">%1 error de autenticación, todavía quedan %2 oportunidades</translation>
-     </message>
-     <message>
--        <location filename="../src/bioauthwidget.cpp" line="226"/>
-         <source>Please use wechat to scan the code</source>
--        <translation>Utilice wechat para escanear el código</translation>
-+        <translation type="vanished">Utilice wechat para escanear el código</translation>
-     </message>
- </context>
- <context>
-     <name>BioDevices</name>
-     <message>
--        <location filename="../src/biodevices.cpp" line="78"/>
-         <source>Unplugging of %1 device detected</source>
--        <translation>Se ha detectado la desconexión del dispositivo %1</translation>
-+        <translation type="vanished">Se ha detectado la desconexión del dispositivo %1</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="88"/>
-         <source>%1 device insertion detected</source>
--        <translation>%1 inserción de dispositivo detectada</translation>
-+        <translation type="vanished">%1 inserción de dispositivo detectada</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="97"/>
-         <source>ukui-biometric-manager</source>
--        <translation>ukui-gestor-biométrico</translation>
-+        <translation type="vanished">ukui-gestor-biométrico</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="100"/>
-         <source>biometric</source>
--        <translation>biométrico</translation>
-+        <translation type="vanished">biométrico</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="647"/>
-         <source>FingerPrint</source>
--        <translation>Huellas</translation>
-+        <translation type="vanished">Huellas</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="649"/>
-         <source>FingerVein</source>
--        <translation>FingerVein</translation>
-+        <translation type="vanished">FingerVein</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="651"/>
-         <source>Iris</source>
--        <translation>Iris</translation>
-+        <translation type="vanished">Iris</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="653"/>
-         <source>Face</source>
--        <translation>Cara</translation>
-+        <translation type="vanished">Cara</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="655"/>
-         <source>VoicePrint</source>
--        <translation>Huella de voz</translation>
-+        <translation type="vanished">Huella de voz</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="657"/>
-         <source>ukey</source>
--        <translation>ukey</translation>
-+        <translation type="vanished">ukey</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="659"/>
-         <source>QRCode</source>
--        <translation>QRCode</translation>
-+        <translation type="vanished">QRCode</translation>
-     </message>
-     <message>
-         <source>Wechat</source>
-@@ -116,9 +98,8 @@
- <context>
-     <name>BioDevicesWidget</name>
-     <message>
--        <location filename="../src/biodeviceswidget.ui" line="14"/>
-         <source>Form</source>
--        <translation>Forma</translation>
-+        <translation type="vanished">Forma</translation>
-     </message>
-     <message>
-         <source>Device types:</source>
-@@ -140,14 +121,12 @@
- <context>
-     <name>LoginOptionsWidget</name>
-     <message>
--        <location filename="../src/loginoptionswidget.cpp" line="61"/>
-         <source>Login Options</source>
--        <translation>Opciones de inicio de sesión</translation>
-+        <translation type="vanished">Opciones de inicio de sesión</translation>
-     </message>
-     <message>
--        <location filename="../src/loginoptionswidget.cpp" line="294"/>
-         <source>Password</source>
--        <translation>Contraseña</translation>
-+        <translation type="vanished">Contraseña</translation>
-     </message>
-     <message>
-         <source>Wechat</source>
-@@ -180,5 +159,137 @@
-         <source>VoicePrint</source>
-         <translation type="vanished">声纹</translation>
-     </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="126"/>
-+        <source>Enter the ukey password</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="150"/>
-+        <source>Try it again</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="152"/>
-+        <source>Use other Devices</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="153"/>
-+        <source>Cancel</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="162"/>
-+        <source>Choose the option</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="184"/>
-+        <location filename="../src/main.cpp" line="219"/>
-+        <location filename="../src/main.cpp" line="228"/>
-+        <source>Invaild response &quot;</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="184"/>
-+        <location filename="../src/main.cpp" line="219"/>
-+        <location filename="../src/main.cpp" line="228"/>
-+        <source>authentication will be canceld</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="185"/>
-+        <location filename="../src/main.cpp" line="220"/>
-+        <location filename="../src/main.cpp" line="229"/>
-+        <location filename="../src/main.cpp" line="408"/>
-+        <source>AUTHENTICATION CANCELED</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="196"/>
-+        <source>=== BIOMETRIC DEVICES ===</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="207"/>
-+        <source>Choose the device</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="260"/>
-+        <source>Sevice Name</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="261"/>
-+        <source>DISPLAY env</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="262"/>
-+        <source>User</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="263"/>
-+        <source>Display debug information</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="264"/>
-+        <source>Device short name</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="306"/>
-+        <source>UKEY AUTHENTICATION</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="308"/>
-+        <source>BIOMETRIC AUTHENTICATION</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="310"/>
-+        <source>Press Q or Esc to cancel</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="330"/>
-+        <source>BIOMETRIC AUTHENTICATION IS CLOSED</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="334"/>
-+        <source>AUTHENTICATION SUCCESS</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="338"/>
-+        <source>AUTHENTICATION FAILED</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="348"/>
-+        <source>Failed to verify %1, you still have %2 verification opportunities</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="350"/>
-+        <source>Unable to verify %1, please enter password.</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="386"/>
-+        <source>AUTHENTICATION END</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="388"/>
-+        <source>BIOMETRIC AUTHENTICATION END</source>
-+        <translation type="unfinished"></translation>
-+    </message>
- </context>
- </TS>
-diff --git a/bioauth-bin/i18n_ts/fr.ts b/bioauth-bin/i18n_ts/fr.ts
-index 8dbf86c..f0bdda7 100644
---- a/bioauth-bin/i18n_ts/fr.ts
-+++ b/bioauth-bin/i18n_ts/fr.ts
-@@ -4,19 +4,16 @@
- <context>
-     <name>BioAuthWidget</name>
-     <message>
--        <location filename="../src/bioauthwidget.ui" line="14"/>
-         <source>Form</source>
--        <translation>Forme</translation>
-+        <translation type="vanished">Forme</translation>
-     </message>
-     <message>
-         <source>More</source>
-         <translation type="vanished">更多</translation>
-     </message>
-     <message>
--        <location filename="../src/bioauthwidget.ui" line="146"/>
--        <location filename="../src/bioauthwidget.cpp" line="41"/>
-         <source>Retry</source>
--        <translation>réessayer</translation>
-+        <translation type="vanished">réessayer</translation>
-     </message>
-     <message>
-         <source>Too many unsuccessful attempts,please enter password.</source>
-@@ -28,85 +25,70 @@
-     </message>
-     <message>
-         <source>Password</source>
--        <translation>mot de passe</translation>
-+        <translation type="vanished">mot de passe</translation>
-     </message>
-     <message>
-         <source>Current Device: </source>
-         <translation type="vanished">当前设备:</translation>
-     </message>
-     <message>
--        <location filename="../src/bioauthwidget.cpp" line="96"/>
--        <location filename="../src/bioauthwidget.cpp" line="212"/>
-         <source>%1 too many unsuccessful attempts,please enter password.</source>
--        <translation>%1 Il y a trop de tentatives infructueuses, veuillez saisir votre mot de passe.</translation>
-+        <translation type="vanished">%1 Il y a trop de tentatives infructueuses, veuillez saisir votre mot de passe.</translation>
-     </message>
-     <message>
--        <location filename="../src/bioauthwidget.cpp" line="102"/>
-         <source>%1 authentication failure,there are still %2 remaining opportunities</source>
--        <translation>%1 authentification a échoué et il reste encore %2 chances</translation>
-+        <translation type="vanished">%1 authentification a échoué et il reste encore %2 chances</translation>
-     </message>
-     <message>
--        <location filename="../src/bioauthwidget.cpp" line="226"/>
-         <source>Please use wechat to scan the code</source>
--        <translation>Veuillez utiliser WeChat pour scanner le code</translation>
-+        <translation type="vanished">Veuillez utiliser WeChat pour scanner le code</translation>
-     </message>
- </context>
- <context>
-     <name>BioDevices</name>
-     <message>
--        <location filename="../src/biodevices.cpp" line="78"/>
-         <source>Unplugging of %1 device detected</source>
--        <translation>L’appareil %1 a été débranché</translation>
-+        <translation type="vanished">L’appareil %1 a été débranché</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="88"/>
-         <source>%1 device insertion detected</source>
--        <translation>%1 périphérique branché détecté</translation>
-+        <translation type="vanished">%1 périphérique branché détecté</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="97"/>
-         <source>ukui-biometric-manager</source>
--        <translation>Outils de gestion biométrique</translation>
-+        <translation type="vanished">Outils de gestion biométrique</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="100"/>
-         <source>biometric</source>
--        <translation>Caractéristiques biologiques</translation>
-+        <translation type="vanished">Caractéristiques biologiques</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="647"/>
-         <source>FingerPrint</source>
--        <translation>empreinte digitale</translation>
-+        <translation type="vanished">empreinte digitale</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="649"/>
-         <source>FingerVein</source>
--        <translation>Veines des doigts</translation>
-+        <translation type="vanished">Veines des doigts</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="651"/>
-         <source>Iris</source>
--        <translation>iris</translation>
-+        <translation type="vanished">iris</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="653"/>
-         <source>Face</source>
--        <translation>Reconnaissance faciale</translation>
-+        <translation type="vanished">Reconnaissance faciale</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="655"/>
-         <source>VoicePrint</source>
--        <translation>Voiceprint</translation>
-+        <translation type="vanished">Voiceprint</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="657"/>
-         <source>ukey</source>
--        <translation>Clés de sécurité</translation>
-+        <translation type="vanished">Clés de sécurité</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="659"/>
-         <source>QRCode</source>
--        <translation>Code QR</translation>
-+        <translation type="vanished">Code QR</translation>
-     </message>
-     <message>
-         <source>Wechat</source>
-@@ -116,9 +98,8 @@
- <context>
-     <name>BioDevicesWidget</name>
-     <message>
--        <location filename="../src/biodeviceswidget.ui" line="14"/>
-         <source>Form</source>
--        <translation>Forme</translation>
-+        <translation type="vanished">Forme</translation>
-     </message>
-     <message>
-         <source>Device types:</source>
-@@ -140,14 +121,12 @@
- <context>
-     <name>LoginOptionsWidget</name>
-     <message>
--        <location filename="../src/loginoptionswidget.cpp" line="61"/>
-         <source>Login Options</source>
--        <translation>Options de connexion</translation>
-+        <translation type="vanished">Options de connexion</translation>
-     </message>
-     <message>
--        <location filename="../src/loginoptionswidget.cpp" line="294"/>
-         <source>Password</source>
--        <translation>mot de passe</translation>
-+        <translation type="vanished">mot de passe</translation>
-     </message>
-     <message>
-         <source>Wechat</source>
-@@ -180,5 +159,137 @@
-         <source>VoicePrint</source>
-         <translation type="vanished">声纹</translation>
-     </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="126"/>
-+        <source>Enter the ukey password</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="150"/>
-+        <source>Try it again</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="152"/>
-+        <source>Use other Devices</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="153"/>
-+        <source>Cancel</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="162"/>
-+        <source>Choose the option</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="184"/>
-+        <location filename="../src/main.cpp" line="219"/>
-+        <location filename="../src/main.cpp" line="228"/>
-+        <source>Invaild response &quot;</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="184"/>
-+        <location filename="../src/main.cpp" line="219"/>
-+        <location filename="../src/main.cpp" line="228"/>
-+        <source>authentication will be canceld</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="185"/>
-+        <location filename="../src/main.cpp" line="220"/>
-+        <location filename="../src/main.cpp" line="229"/>
-+        <location filename="../src/main.cpp" line="408"/>
-+        <source>AUTHENTICATION CANCELED</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="196"/>
-+        <source>=== BIOMETRIC DEVICES ===</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="207"/>
-+        <source>Choose the device</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="260"/>
-+        <source>Sevice Name</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="261"/>
-+        <source>DISPLAY env</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="262"/>
-+        <source>User</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="263"/>
-+        <source>Display debug information</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="264"/>
-+        <source>Device short name</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="306"/>
-+        <source>UKEY AUTHENTICATION</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="308"/>
-+        <source>BIOMETRIC AUTHENTICATION</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="310"/>
-+        <source>Press Q or Esc to cancel</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="330"/>
-+        <source>BIOMETRIC AUTHENTICATION IS CLOSED</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="334"/>
-+        <source>AUTHENTICATION SUCCESS</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="338"/>
-+        <source>AUTHENTICATION FAILED</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="348"/>
-+        <source>Failed to verify %1, you still have %2 verification opportunities</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="350"/>
-+        <source>Unable to verify %1, please enter password.</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="386"/>
-+        <source>AUTHENTICATION END</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="388"/>
-+        <source>BIOMETRIC AUTHENTICATION END</source>
-+        <translation type="unfinished"></translation>
-+    </message>
- </context>
- </TS>
-diff --git a/bioauth-bin/i18n_ts/kk.ts b/bioauth-bin/i18n_ts/kk.ts
-index ad57405..02bdc1e 100644
---- a/bioauth-bin/i18n_ts/kk.ts
-+++ b/bioauth-bin/i18n_ts/kk.ts
-@@ -4,19 +4,16 @@
- <context>
-     <name>BioAuthWidget</name>
-     <message>
--        <location filename="../src/bioauthwidget.ui" line="14"/>
-         <source>Form</source>
--        <translation>Пішін</translation>
-+        <translation type="vanished">Пішін</translation>
-     </message>
-     <message>
-         <source>More</source>
-         <translation type="vanished">更多</translation>
-     </message>
-     <message>
--        <location filename="../src/bioauthwidget.ui" line="146"/>
--        <location filename="../src/bioauthwidget.cpp" line="41"/>
-         <source>Retry</source>
--        <translation>ретри</translation>
-+        <translation type="vanished">ретри</translation>
-     </message>
-     <message>
-         <source>Too many unsuccessful attempts,please enter password.</source>
-@@ -28,85 +25,70 @@
-     </message>
-     <message>
-         <source>Password</source>
--        <translation>құпиясөз</translation>
-+        <translation type="vanished">құпиясөз</translation>
-     </message>
-     <message>
-         <source>Current Device: </source>
-         <translation type="vanished">当前设备:</translation>
-     </message>
-     <message>
--        <location filename="../src/bioauthwidget.cpp" line="96"/>
--        <location filename="../src/bioauthwidget.cpp" line="212"/>
-         <source>%1 too many unsuccessful attempts,please enter password.</source>
--        <translation>% 1 Қате әрекеттер тым көп, құпия сөзіңізді енгізіңіз.</translation>
-+        <translation type="vanished">% 1 Қате әрекеттер тым көп, құпия сөзіңізді енгізіңіз.</translation>
-     </message>
-     <message>
--        <location filename="../src/bioauthwidget.cpp" line="102"/>
-         <source>%1 authentication failure,there are still %2 remaining opportunities</source>
--        <translation>% 1 аутентификациясы жаңылысқан және әлі де% 2 мүмкіндігі бар</translation>
-+        <translation type="vanished">% 1 аутентификациясы жаңылысқан және әлі де% 2 мүмкіндігі бар</translation>
-     </message>
-     <message>
--        <location filename="../src/bioauthwidget.cpp" line="226"/>
-         <source>Please use wechat to scan the code</source>
--        <translation>Кодты сканерлеу үшін WeChat пайдалануыңызды сұраймын</translation>
-+        <translation type="vanished">Кодты сканерлеу үшін WeChat пайдалануыңызды сұраймын</translation>
-     </message>
- </context>
- <context>
-     <name>BioDevices</name>
-     <message>
--        <location filename="../src/biodevices.cpp" line="78"/>
-         <source>Unplugging of %1 device detected</source>
--        <translation>% 1 құрылғы ажыратылды</translation>
-+        <translation type="vanished">% 1 құрылғы ажыратылды</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="88"/>
-         <source>%1 device insertion detected</source>
--        <translation>% 1 құрылғы анықталды</translation>
-+        <translation type="vanished">% 1 құрылғы анықталды</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="97"/>
-         <source>ukui-biometric-manager</source>
--        <translation>Биометриялық басқару құралдары</translation>
-+        <translation type="vanished">Биометриялық басқару құралдары</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="100"/>
-         <source>biometric</source>
--        <translation>Биологиялық сипаттамалары</translation>
-+        <translation type="vanished">Биологиялық сипаттамалары</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="647"/>
-         <source>FingerPrint</source>
--        <translation>саусақ ізі</translation>
-+        <translation type="vanished">саусақ ізі</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="649"/>
-         <source>FingerVein</source>
--        <translation>Саусақ көктамырлары</translation>
-+        <translation type="vanished">Саусақ көктамырлары</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="651"/>
-         <source>Iris</source>
--        <translation>ирис</translation>
-+        <translation type="vanished">ирис</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="653"/>
-         <source>Face</source>
--        <translation>Бет тану</translation>
-+        <translation type="vanished">Бет тану</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="655"/>
-         <source>VoicePrint</source>
--        <translation>Дауыстық із</translation>
-+        <translation type="vanished">Дауыстық із</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="657"/>
-         <source>ukey</source>
--        <translation>Қауіпсіздік кілттері</translation>
-+        <translation type="vanished">Қауіпсіздік кілттері</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="659"/>
-         <source>QRCode</source>
--        <translation>QR коды</translation>
-+        <translation type="vanished">QR коды</translation>
-     </message>
-     <message>
-         <source>Wechat</source>
-@@ -116,9 +98,8 @@
- <context>
-     <name>BioDevicesWidget</name>
-     <message>
--        <location filename="../src/biodeviceswidget.ui" line="14"/>
-         <source>Form</source>
--        <translation>Пішін</translation>
-+        <translation type="vanished">Пішін</translation>
-     </message>
-     <message>
-         <source>Device types:</source>
-@@ -140,14 +121,12 @@
- <context>
-     <name>LoginOptionsWidget</name>
-     <message>
--        <location filename="../src/loginoptionswidget.cpp" line="61"/>
-         <source>Login Options</source>
--        <translation>Кіру параметрлері</translation>
-+        <translation type="vanished">Кіру параметрлері</translation>
-     </message>
-     <message>
--        <location filename="../src/loginoptionswidget.cpp" line="294"/>
-         <source>Password</source>
--        <translation>құпиясөз</translation>
-+        <translation type="vanished">құпиясөз</translation>
-     </message>
-     <message>
-         <source>Wechat</source>
-@@ -180,5 +159,137 @@
-         <source>VoicePrint</source>
-         <translation type="vanished">声纹</translation>
-     </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="126"/>
-+        <source>Enter the ukey password</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="150"/>
-+        <source>Try it again</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="152"/>
-+        <source>Use other Devices</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="153"/>
-+        <source>Cancel</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="162"/>
-+        <source>Choose the option</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="184"/>
-+        <location filename="../src/main.cpp" line="219"/>
-+        <location filename="../src/main.cpp" line="228"/>
-+        <source>Invaild response &quot;</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="184"/>
-+        <location filename="../src/main.cpp" line="219"/>
-+        <location filename="../src/main.cpp" line="228"/>
-+        <source>authentication will be canceld</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="185"/>
-+        <location filename="../src/main.cpp" line="220"/>
-+        <location filename="../src/main.cpp" line="229"/>
-+        <location filename="../src/main.cpp" line="408"/>
-+        <source>AUTHENTICATION CANCELED</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="196"/>
-+        <source>=== BIOMETRIC DEVICES ===</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="207"/>
-+        <source>Choose the device</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="260"/>
-+        <source>Sevice Name</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="261"/>
-+        <source>DISPLAY env</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="262"/>
-+        <source>User</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="263"/>
-+        <source>Display debug information</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="264"/>
-+        <source>Device short name</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="306"/>
-+        <source>UKEY AUTHENTICATION</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="308"/>
-+        <source>BIOMETRIC AUTHENTICATION</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="310"/>
-+        <source>Press Q or Esc to cancel</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="330"/>
-+        <source>BIOMETRIC AUTHENTICATION IS CLOSED</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="334"/>
-+        <source>AUTHENTICATION SUCCESS</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="338"/>
-+        <source>AUTHENTICATION FAILED</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="348"/>
-+        <source>Failed to verify %1, you still have %2 verification opportunities</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="350"/>
-+        <source>Unable to verify %1, please enter password.</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="386"/>
-+        <source>AUTHENTICATION END</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="388"/>
-+        <source>BIOMETRIC AUTHENTICATION END</source>
-+        <translation type="unfinished"></translation>
-+    </message>
- </context>
- </TS>
-diff --git a/bioauth-bin/i18n_ts/ky.ts b/bioauth-bin/i18n_ts/ky.ts
-index e9a3f13..0488393 100644
---- a/bioauth-bin/i18n_ts/ky.ts
-+++ b/bioauth-bin/i18n_ts/ky.ts
-@@ -3,20 +3,13 @@
- <TS version="2.1" language="ky">
- <context>
-     <name>BioAuthWidget</name>
--    <message>
--        <location filename="../src/bioauthwidget.ui" line="14"/>
--        <source>Form</source>
--        <translation></translation>
--    </message>
-     <message>
-         <source>More</source>
-         <translation type="vanished">更多</translation>
-     </message>
-     <message>
--        <location filename="../src/bioauthwidget.ui" line="146"/>
--        <location filename="../src/bioauthwidget.cpp" line="41"/>
-         <source>Retry</source>
--        <translation>Ретри</translation>
-+        <translation type="vanished">Ретри</translation>
-     </message>
-     <message>
-         <source>Too many unsuccessful attempts,please enter password.</source>
-@@ -28,85 +21,70 @@
-     </message>
-     <message>
-         <source>Password</source>
--        <translation>Сырсөз</translation>
-+        <translation type="vanished">Сырсөз</translation>
-     </message>
-     <message>
-         <source>Current Device: </source>
-         <translation type="vanished">当前设备:</translation>
-     </message>
-     <message>
--        <location filename="../src/bioauthwidget.cpp" line="96"/>
--        <location filename="../src/bioauthwidget.cpp" line="212"/>
-         <source>%1 too many unsuccessful attempts,please enter password.</source>
--        <translation>%1 өтө көп ийгиликсиз аракеттер,, сураныч, сырсөз киргизүү.</translation>
-+        <translation type="vanished">%1 өтө көп ийгиликсиз аракеттер,, сураныч, сырсөз киргизүү.</translation>
-     </message>
-     <message>
--        <location filename="../src/bioauthwidget.cpp" line="102"/>
-         <source>%1 authentication failure,there are still %2 remaining opportunities</source>
--        <translation>%1 аутентификациялык жетишсиздик,дагы эле %2 калган мүмкүнчүлүктөр бар</translation>
-+        <translation type="vanished">%1 аутентификациялык жетишсиздик,дагы эле %2 калган мүмкүнчүлүктөр бар</translation>
-     </message>
-     <message>
--        <location filename="../src/bioauthwidget.cpp" line="226"/>
-         <source>Please use wechat to scan the code</source>
--        <translation>Кодду сканерлеу үчүн вечат колдонуңуз</translation>
-+        <translation type="vanished">Кодду сканерлеу үчүн вечат колдонуңуз</translation>
-     </message>
- </context>
- <context>
-     <name>BioDevices</name>
-     <message>
--        <location filename="../src/biodevices.cpp" line="78"/>
-         <source>Unplugging of %1 device detected</source>
--        <translation>%1 орнотмосунун өчүрүлүшү аныкталды</translation>
-+        <translation type="vanished">%1 орнотмосунун өчүрүлүшү аныкталды</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="88"/>
-         <source>%1 device insertion detected</source>
--        <translation>%1 түзмөк орнотмосу аныкталды</translation>
-+        <translation type="vanished">%1 түзмөк орнотмосу аныкталды</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="97"/>
-         <source>ukui-biometric-manager</source>
--        <translation>укуи-биометриялык-менеджери</translation>
-+        <translation type="vanished">укуи-биометриялык-менеджери</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="100"/>
-         <source>biometric</source>
--        <translation>биометрия</translation>
-+        <translation type="vanished">биометрия</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="647"/>
-         <source>FingerPrint</source>
--        <translation>Манжа изи</translation>
-+        <translation type="vanished">Манжа изи</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="649"/>
-         <source>FingerVein</source>
--        <translation>Манжавейн</translation>
-+        <translation type="vanished">Манжавейн</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="651"/>
-         <source>Iris</source>
--        <translation>Ирис</translation>
-+        <translation type="vanished">Ирис</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="653"/>
-         <source>Face</source>
--        <translation>Бет</translation>
-+        <translation type="vanished">Бет</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="655"/>
-         <source>VoicePrint</source>
--        <translation>VoicePrint</translation>
-+        <translation type="vanished">VoicePrint</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="657"/>
-         <source>ukey</source>
--        <translation>уики</translation>
-+        <translation type="vanished">уики</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="659"/>
-         <source>QRCode</source>
--        <translation>QRCode</translation>
-+        <translation type="vanished">QRCode</translation>
-     </message>
-     <message>
-         <source>Wechat</source>
-@@ -115,11 +93,6 @@
- </context>
- <context>
-     <name>BioDevicesWidget</name>
--    <message>
--        <location filename="../src/biodeviceswidget.ui" line="14"/>
--        <source>Form</source>
--        <translation></translation>
--    </message>
-     <message>
-         <source>Device types:</source>
-         <translation type="vanished">设备类型:</translation>
-@@ -140,14 +113,12 @@
- <context>
-     <name>LoginOptionsWidget</name>
-     <message>
--        <location filename="../src/loginoptionswidget.cpp" line="61"/>
-         <source>Login Options</source>
--        <translation>Кирүү параметрлери</translation>
-+        <translation type="vanished">Кирүү параметрлери</translation>
-     </message>
-     <message>
--        <location filename="../src/loginoptionswidget.cpp" line="294"/>
-         <source>Password</source>
--        <translation>Сырсөз</translation>
-+        <translation type="vanished">Сырсөз</translation>
-     </message>
-     <message>
-         <source>Wechat</source>
-@@ -180,5 +151,137 @@
-         <source>VoicePrint</source>
-         <translation type="vanished">声纹</translation>
-     </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="126"/>
-+        <source>Enter the ukey password</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="150"/>
-+        <source>Try it again</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="152"/>
-+        <source>Use other Devices</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="153"/>
-+        <source>Cancel</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="162"/>
-+        <source>Choose the option</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="184"/>
-+        <location filename="../src/main.cpp" line="219"/>
-+        <location filename="../src/main.cpp" line="228"/>
-+        <source>Invaild response &quot;</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="184"/>
-+        <location filename="../src/main.cpp" line="219"/>
-+        <location filename="../src/main.cpp" line="228"/>
-+        <source>authentication will be canceld</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="185"/>
-+        <location filename="../src/main.cpp" line="220"/>
-+        <location filename="../src/main.cpp" line="229"/>
-+        <location filename="../src/main.cpp" line="408"/>
-+        <source>AUTHENTICATION CANCELED</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="196"/>
-+        <source>=== BIOMETRIC DEVICES ===</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="207"/>
-+        <source>Choose the device</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="260"/>
-+        <source>Sevice Name</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="261"/>
-+        <source>DISPLAY env</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="262"/>
-+        <source>User</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="263"/>
-+        <source>Display debug information</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="264"/>
-+        <source>Device short name</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="306"/>
-+        <source>UKEY AUTHENTICATION</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="308"/>
-+        <source>BIOMETRIC AUTHENTICATION</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="310"/>
-+        <source>Press Q or Esc to cancel</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="330"/>
-+        <source>BIOMETRIC AUTHENTICATION IS CLOSED</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="334"/>
-+        <source>AUTHENTICATION SUCCESS</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="338"/>
-+        <source>AUTHENTICATION FAILED</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="348"/>
-+        <source>Failed to verify %1, you still have %2 verification opportunities</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="350"/>
-+        <source>Unable to verify %1, please enter password.</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="386"/>
-+        <source>AUTHENTICATION END</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="388"/>
-+        <source>BIOMETRIC AUTHENTICATION END</source>
-+        <translation type="unfinished"></translation>
-+    </message>
- </context>
- </TS>
-diff --git a/bioauth-bin/i18n_ts/mn.ts b/bioauth-bin/i18n_ts/mn.ts
-index b96b503..7457942 100644
---- a/bioauth-bin/i18n_ts/mn.ts
-+++ b/bioauth-bin/i18n_ts/mn.ts
-@@ -3,20 +3,13 @@
- <TS version="2.1" language="mn">
- <context>
-     <name>BioAuthWidget</name>
--    <message>
--        <location filename="../src/bioauthwidget.ui" line="14"/>
--        <source>Form</source>
--        <translation></translation>
--    </message>
-     <message>
-         <source>More</source>
-         <translation type="vanished">更多</translation>
-     </message>
-     <message>
--        <location filename="../src/bioauthwidget.ui" line="146"/>
--        <location filename="../src/bioauthwidget.cpp" line="41"/>
-         <source>Retry</source>
--        <translation>ᠳᠠᠬᠢᠨ ᠲᠤᠷᠰᠢᠬᠤ</translation>
-+        <translation type="vanished">ᠳᠠᠬᠢᠨ ᠲᠤᠷᠰᠢᠬᠤ</translation>
-     </message>
-     <message>
-         <source>Too many unsuccessful attempts,please enter password.</source>
-@@ -28,85 +21,70 @@
-     </message>
-     <message>
-         <source>Password</source>
--        <translation>ᠨᠢᠭᠤᠴᠠ ᠺᠣᠳ᠋</translation>
-+        <translation type="vanished">ᠨᠢᠭᠤᠴᠠ ᠺᠣᠳ᠋</translation>
-     </message>
-     <message>
-         <source>Current Device: </source>
-         <translation type="vanished">当前设备:</translation>
-     </message>
-     <message>
--        <location filename="../src/bioauthwidget.cpp" line="96"/>
--        <location filename="../src/bioauthwidget.cpp" line="212"/>
-         <source>%1 too many unsuccessful attempts,please enter password.</source>
--        <translation>%1 ᠢᠯᠠᠭᠳᠠᠭᠰᠠᠨ ᠲᠤᠷᠰᠢᠬᠤ ᠤᠳᠠᠭ᠎ᠠ ᠲᠣᠭ᠎ᠠ ᠬᠡᠳᠦ ᠣᠯᠠᠨ ᠂ ᠨᠢᠭᠤᠴᠠ ᠺᠣᠳ᠋ ᠣᠷᠣᠭᠤᠯᠤᠭᠠᠷᠠᠢ ᠃</translation>
-+        <translation type="vanished">%1 ᠢᠯᠠᠭᠳᠠᠭᠰᠠᠨ ᠲᠤᠷᠰᠢᠬᠤ ᠤᠳᠠᠭ᠎ᠠ ᠲᠣᠭ᠎ᠠ ᠬᠡᠳᠦ ᠣᠯᠠᠨ ᠂ ᠨᠢᠭᠤᠴᠠ ᠺᠣᠳ᠋ ᠣᠷᠣᠭᠤᠯᠤᠭᠠᠷᠠᠢ ᠃</translation>
-     </message>
-     <message>
--        <location filename="../src/bioauthwidget.cpp" line="102"/>
-         <source>%1 authentication failure,there are still %2 remaining opportunities</source>
--        <translation>%1 ᠪᠡᠶ᠎ᠡ᠎ᠶ᠋ᠢᠨ ᠬᠢᠷᠢ᠎ᠶ᠋ᠢᠨ ᠰᠢᠯᠭᠠᠨ ᠪᠠᠲᠤᠯᠠᠯᠲᠠ ᠢᠯᠠᠭᠳᠠᠪᠠ ᠂ ᠮᠥᠨ %2 ᠦᠯᠡᠳᠡᠬᠦ ᠲᠣᠬᠢᠶᠠᠯ ᠪᠣᠢ</translation>
-+        <translation type="vanished">%1 ᠪᠡᠶ᠎ᠡ᠎ᠶ᠋ᠢᠨ ᠬᠢᠷᠢ᠎ᠶ᠋ᠢᠨ ᠰᠢᠯᠭᠠᠨ ᠪᠠᠲᠤᠯᠠᠯᠲᠠ ᠢᠯᠠᠭᠳᠠᠪᠠ ᠂ ᠮᠥᠨ %2 ᠦᠯᠡᠳᠡᠬᠦ ᠲᠣᠬᠢᠶᠠᠯ ᠪᠣᠢ</translation>
-     </message>
-     <message>
--        <location filename="../src/bioauthwidget.cpp" line="226"/>
-         <source>Please use wechat to scan the code</source>
--        <translation>ᠸᠢᠴᠠᠲ᠎ᠢ᠋ᠶ᠋ᠠᠷ ᠦᠰᠦᠭ ᠰᠢᠷᠪᠢᠬᠦ ᠪᠣᠯᠪᠠᠤ</translation>
-+        <translation type="vanished">ᠸᠢᠴᠠᠲ᠎ᠢ᠋ᠶ᠋ᠠᠷ ᠦᠰᠦᠭ ᠰᠢᠷᠪᠢᠬᠦ ᠪᠣᠯᠪᠠᠤ</translation>
-     </message>
- </context>
- <context>
-     <name>BioDevices</name>
-     <message>
--        <location filename="../src/biodevices.cpp" line="78"/>
-         <source>Unplugging of %1 device detected</source>
--        <translation>%1 ᠲᠥᠬᠥᠭᠡᠷᠦᠮᠵᠢ᠎ᠶ᠋ᠢ ᠰᠤᠭᠤᠯᠵᠤ ᠭᠠᠷᠭᠠᠨ ᠠ</translation>
-+        <translation type="vanished">%1 ᠲᠥᠬᠥᠭᠡᠷᠦᠮᠵᠢ᠎ᠶ᠋ᠢ ᠰᠤᠭᠤᠯᠵᠤ ᠭᠠᠷᠭᠠᠨ ᠠ</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="88"/>
-         <source>%1 device insertion detected</source>
--        <translation>%1 ᠲᠥᠬᠥᠭᠡᠷᠦᠮᠵᠢ ᠬᠠᠪᠴᠢᠭᠤᠯᠤᠭᠰᠠᠨ᠎ᠢ᠋ ᠪᠠᠢᠴᠠᠭᠠᠨ ᠣᠯᠪᠠ</translation>
-+        <translation type="vanished">%1 ᠲᠥᠬᠥᠭᠡᠷᠦᠮᠵᠢ ᠬᠠᠪᠴᠢᠭᠤᠯᠤᠭᠰᠠᠨ᠎ᠢ᠋ ᠪᠠᠢᠴᠠᠭᠠᠨ ᠣᠯᠪᠠ</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="97"/>
-         <source>ukui-biometric-manager</source>
--        <translation>ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ᠎ᠤ᠋ᠨ ᠣᠨᠴᠠᠯᠢᠭ ᠬᠠᠮᠢᠶᠠᠷᠤᠯᠲᠠ᠎ᠶ᠋ᠢᠨ ᠪᠠᠭᠠᠵᠢ</translation>
-+        <translation type="vanished">ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ᠎ᠤ᠋ᠨ ᠣᠨᠴᠠᠯᠢᠭ ᠬᠠᠮᠢᠶᠠᠷᠤᠯᠲᠠ᠎ᠶ᠋ᠢᠨ ᠪᠠᠭᠠᠵᠢ</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="100"/>
-         <source>biometric</source>
--        <translation>ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ᠎ᠤ᠋ᠨ ᠣᠨᠴᠠᠯᠢᠭ</translation>
-+        <translation type="vanished">ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ᠎ᠤ᠋ᠨ ᠣᠨᠴᠠᠯᠢᠭ</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="647"/>
-         <source>FingerPrint</source>
--        <translation>ᠬᠤᠷᠤᠭᠤᠨ ᠬᠡ</translation>
-+        <translation type="vanished">ᠬᠤᠷᠤᠭᠤᠨ ᠬᠡ</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="649"/>
-         <source>FingerVein</source>
--        <translation>ᠬᠤᠷᠤᠭᠤᠨ ᠨᠠᠮᠵᠢᠭᠤᠨ ᠰᠤᠳᠠᠰᠤ</translation>
-+        <translation type="vanished">ᠬᠤᠷᠤᠭᠤᠨ ᠨᠠᠮᠵᠢᠭᠤᠨ ᠰᠤᠳᠠᠰᠤ</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="651"/>
-         <source>Iris</source>
--        <translation>ᠰᠣᠯᠣᠩᠭ᠎ᠠ ᠪᠦᠷᠬᠦᠭᠦᠯ</translation>
-+        <translation type="vanished">ᠰᠣᠯᠣᠩᠭ᠎ᠠ ᠪᠦᠷᠬᠦᠭᠦᠯ</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="653"/>
-         <source>Face</source>
--        <translation>ᠬᠥᠮᠦᠨ᠎ᠦ᠌ ᠨᠢᠭᠤᠷ ᠲᠠᠨᠢᠬᠤ</translation>
-+        <translation type="vanished">ᠬᠥᠮᠦᠨ᠎ᠦ᠌ ᠨᠢᠭᠤᠷ ᠲᠠᠨᠢᠬᠤ</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="655"/>
-         <source>VoicePrint</source>
--        <translation>ᠳᠠᠭᠤᠨ ᠡᠷᠢᠶᠡᠨ</translation>
-+        <translation type="vanished">ᠳᠠᠭᠤᠨ ᠡᠷᠢᠶᠡᠨ</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="657"/>
-         <source>ukey</source>
--        <translation>ᠠᠶᠤᠯᠭᠦᠢ ᠨᠢᠭᠤᠴᠠ ᠲᠦᠯᠬᠢᠭᠦᠷ</translation>
-+        <translation type="vanished">ᠠᠶᠤᠯᠭᠦᠢ ᠨᠢᠭᠤᠴᠠ ᠲᠦᠯᠬᠢᠭᠦᠷ</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="659"/>
-         <source>QRCode</source>
--        <translation>ᠬᠣᠶᠠᠷ ᠬᠡᠮᠵᠢᠯᠲᠦ ᠺᠣᠳ᠋</translation>
-+        <translation type="vanished">ᠬᠣᠶᠠᠷ ᠬᠡᠮᠵᠢᠯᠲᠦ ᠺᠣᠳ᠋</translation>
-     </message>
-     <message>
-         <source>Wechat</source>
-@@ -115,11 +93,6 @@
- </context>
- <context>
-     <name>BioDevicesWidget</name>
--    <message>
--        <location filename="../src/biodeviceswidget.ui" line="14"/>
--        <source>Form</source>
--        <translation></translation>
--    </message>
-     <message>
-         <source>Device types:</source>
-         <translation type="vanished">设备类型:</translation>
-@@ -140,14 +113,12 @@
- <context>
-     <name>LoginOptionsWidget</name>
-     <message>
--        <location filename="../src/loginoptionswidget.cpp" line="61"/>
-         <source>Login Options</source>
--        <translation>ᠲᠡᠮᠳᠡᠭᠯᠡᠬᠦ ᠰᠤᠩᠭᠤᠭᠳᠠᠬᠤᠨ</translation>
-+        <translation type="vanished">ᠲᠡᠮᠳᠡᠭᠯᠡᠬᠦ ᠰᠤᠩᠭᠤᠭᠳᠠᠬᠤᠨ</translation>
-     </message>
-     <message>
--        <location filename="../src/loginoptionswidget.cpp" line="294"/>
-         <source>Password</source>
--        <translation>ᠨᠢᠭᠤᠴᠠ ᠺᠣᠳ᠋</translation>
-+        <translation type="vanished">ᠨᠢᠭᠤᠴᠠ ᠺᠣᠳ᠋</translation>
-     </message>
-     <message>
-         <source>Wechat</source>
-@@ -180,5 +151,137 @@
-         <source>VoicePrint</source>
-         <translation type="vanished">声纹</translation>
-     </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="126"/>
-+        <source>Enter the ukey password</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="150"/>
-+        <source>Try it again</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="152"/>
-+        <source>Use other Devices</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="153"/>
-+        <source>Cancel</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="162"/>
-+        <source>Choose the option</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="184"/>
-+        <location filename="../src/main.cpp" line="219"/>
-+        <location filename="../src/main.cpp" line="228"/>
-+        <source>Invaild response &quot;</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="184"/>
-+        <location filename="../src/main.cpp" line="219"/>
-+        <location filename="../src/main.cpp" line="228"/>
-+        <source>authentication will be canceld</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="185"/>
-+        <location filename="../src/main.cpp" line="220"/>
-+        <location filename="../src/main.cpp" line="229"/>
-+        <location filename="../src/main.cpp" line="408"/>
-+        <source>AUTHENTICATION CANCELED</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="196"/>
-+        <source>=== BIOMETRIC DEVICES ===</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="207"/>
-+        <source>Choose the device</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="260"/>
-+        <source>Sevice Name</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="261"/>
-+        <source>DISPLAY env</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="262"/>
-+        <source>User</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="263"/>
-+        <source>Display debug information</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="264"/>
-+        <source>Device short name</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="306"/>
-+        <source>UKEY AUTHENTICATION</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="308"/>
-+        <source>BIOMETRIC AUTHENTICATION</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="310"/>
-+        <source>Press Q or Esc to cancel</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="330"/>
-+        <source>BIOMETRIC AUTHENTICATION IS CLOSED</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="334"/>
-+        <source>AUTHENTICATION SUCCESS</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="338"/>
-+        <source>AUTHENTICATION FAILED</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="348"/>
-+        <source>Failed to verify %1, you still have %2 verification opportunities</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="350"/>
-+        <source>Unable to verify %1, please enter password.</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="386"/>
-+        <source>AUTHENTICATION END</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="388"/>
-+        <source>BIOMETRIC AUTHENTICATION END</source>
-+        <translation type="unfinished"></translation>
-+    </message>
- </context>
- </TS>
-diff --git a/bioauth-bin/i18n_ts/pt.ts b/bioauth-bin/i18n_ts/pt.ts
-index a522a78..602680d 100644
---- a/bioauth-bin/i18n_ts/pt.ts
-+++ b/bioauth-bin/i18n_ts/pt.ts
-@@ -110,5 +110,21 @@
-         <source>Unable to verify %1, please enter password.</source>
-         <translation type="unfinished"></translation>
-     </message>
-+    <message>
-+        <source>Enter the ukey password</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>UKEY AUTHENTICATION</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>BIOMETRIC AUTHENTICATION IS CLOSED</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>AUTHENTICATION END</source>
-+        <translation type="unfinished"></translation>
-+    </message>
- </context>
- </TS>
-diff --git a/bioauth-bin/i18n_ts/ru.ts b/bioauth-bin/i18n_ts/ru.ts
-index 8636509..47e674f 100644
---- a/bioauth-bin/i18n_ts/ru.ts
-+++ b/bioauth-bin/i18n_ts/ru.ts
-@@ -110,5 +110,21 @@
-         <source>Unable to verify %1, please enter password.</source>
-         <translation type="unfinished"></translation>
-     </message>
-+    <message>
-+        <source>Enter the ukey password</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>UKEY AUTHENTICATION</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>BIOMETRIC AUTHENTICATION IS CLOSED</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>AUTHENTICATION END</source>
-+        <translation type="unfinished"></translation>
-+    </message>
- </context>
- </TS>
-diff --git a/bioauth-bin/i18n_ts/tr.ts b/bioauth-bin/i18n_ts/tr.ts
-index f48b7b9..9c79ff1 100644
---- a/bioauth-bin/i18n_ts/tr.ts
-+++ b/bioauth-bin/i18n_ts/tr.ts
-@@ -27,114 +27,134 @@
- <context>
-     <name>QObject</name>
-     <message>
--        <location filename="../src/main.cpp" line="100"/>
-+        <location filename="../src/main.cpp" line="126"/>
-+        <source>Enter the ukey password</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="150"/>
-         <source>Try it again</source>
-         <translation>Yeniden Dene</translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="102"/>
-+        <location filename="../src/main.cpp" line="152"/>
-         <source>Use other Devices</source>
-         <translation>Diğer Cihazları Kullan</translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="103"/>
-+        <location filename="../src/main.cpp" line="153"/>
-         <source>Cancel</source>
-         <translation>İptal</translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="112"/>
-+        <location filename="../src/main.cpp" line="162"/>
-         <source>Choose the option</source>
-         <translation>Seçeneği seçin</translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="134"/>
--        <location filename="../src/main.cpp" line="169"/>
--        <location filename="../src/main.cpp" line="178"/>
-+        <location filename="../src/main.cpp" line="184"/>
-+        <location filename="../src/main.cpp" line="219"/>
-+        <location filename="../src/main.cpp" line="228"/>
-         <source>Invaild response &quot;</source>
-         <translation>Geçersiz cevap &quot;</translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="134"/>
--        <location filename="../src/main.cpp" line="169"/>
--        <location filename="../src/main.cpp" line="178"/>
-+        <location filename="../src/main.cpp" line="184"/>
-+        <location filename="../src/main.cpp" line="219"/>
-+        <location filename="../src/main.cpp" line="228"/>
-         <source>authentication will be canceld</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="135"/>
--        <location filename="../src/main.cpp" line="170"/>
--        <location filename="../src/main.cpp" line="179"/>
--        <location filename="../src/main.cpp" line="315"/>
-+        <location filename="../src/main.cpp" line="185"/>
-+        <location filename="../src/main.cpp" line="220"/>
-+        <location filename="../src/main.cpp" line="229"/>
-+        <location filename="../src/main.cpp" line="408"/>
-         <source>AUTHENTICATION CANCELED</source>
-         <translation>KİMLİK DOĞRULAMA</translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="146"/>
-+        <location filename="../src/main.cpp" line="196"/>
-         <source>=== BIOMETRIC DEVICES ===</source>
-         <translation>=== BİYOMETRİK CİHAZLAR ===</translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="157"/>
-+        <location filename="../src/main.cpp" line="207"/>
-         <source>Choose the device</source>
-         <translation>Cihazı seçin</translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="210"/>
-+        <location filename="../src/main.cpp" line="260"/>
-         <source>Sevice Name</source>
-         <translation>Servis Adı</translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="211"/>
-+        <location filename="../src/main.cpp" line="261"/>
-         <source>DISPLAY env</source>
-         <translation>EKRAN env</translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="212"/>
-+        <location filename="../src/main.cpp" line="262"/>
-         <source>User</source>
-         <translation type="unfinished">Kullanıcı</translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="213"/>
-+        <location filename="../src/main.cpp" line="263"/>
-         <source>Display debug information</source>
-         <translation>Hata ayıklama bilgilerini görüntüle</translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="214"/>
-+        <location filename="../src/main.cpp" line="264"/>
-         <source>Device short name</source>
-         <translation type="unfinished">Cihaz kısa adı</translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="249"/>
-+        <location filename="../src/main.cpp" line="306"/>
-+        <source>UKEY AUTHENTICATION</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="308"/>
-         <source>BIOMETRIC AUTHENTICATION</source>
-         <translation>BİYOMETRİK KİMLİK DOĞRULAMA</translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="251"/>
-+        <location filename="../src/main.cpp" line="310"/>
-         <source>Press Q or Esc to cancel</source>
-         <translation>İptal etmek için Q veya Esc tuşuna basın</translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="263"/>
-+        <location filename="../src/main.cpp" line="330"/>
-+        <source>BIOMETRIC AUTHENTICATION IS CLOSED</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="334"/>
-         <source>AUTHENTICATION SUCCESS</source>
-         <translation>KİMLİK DOĞRULAMA</translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="267"/>
-+        <location filename="../src/main.cpp" line="338"/>
-         <source>AUTHENTICATION FAILED</source>
-         <translation>KİMLİK DOĞRULAMA BAŞARISIZ OLDU</translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="277"/>
-+        <location filename="../src/main.cpp" line="348"/>
-         <source>Failed to verify %1, you still have %2 verification opportunities</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="279"/>
-+        <location filename="../src/main.cpp" line="350"/>
-         <source>Unable to verify %1, please enter password.</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="302"/>
-+        <location filename="../src/main.cpp" line="386"/>
-+        <source>AUTHENTICATION END</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="388"/>
-         <source>BIOMETRIC AUTHENTICATION END</source>
-         <translation>BİYOMETRİK KİMLİK DOĞRULAMA SONU</translation>
-     </message>
-diff --git a/bioauth-bin/i18n_ts/ug.ts b/bioauth-bin/i18n_ts/ug.ts
-index 99e8e3f..b766cfe 100644
---- a/bioauth-bin/i18n_ts/ug.ts
-+++ b/bioauth-bin/i18n_ts/ug.ts
-@@ -3,20 +3,13 @@
- <TS version="2.1" language="ug">
- <context>
-     <name>BioAuthWidget</name>
--    <message>
--        <location filename="../src/bioauthwidget.ui" line="14"/>
--        <source>Form</source>
--        <translation></translation>
--    </message>
-     <message>
-         <source>More</source>
-         <translation type="vanished">更多</translation>
-     </message>
-     <message>
--        <location filename="../src/bioauthwidget.ui" line="146"/>
--        <location filename="../src/bioauthwidget.cpp" line="41"/>
-         <source>Retry</source>
--        <translation>قايتا سىناپ بىقىڭ</translation>
-+        <translation type="vanished">قايتا سىناپ بىقىڭ</translation>
-     </message>
-     <message>
-         <source>Too many unsuccessful attempts,please enter password.</source>
-@@ -28,85 +21,70 @@
-     </message>
-     <message>
-         <source>Password</source>
--        <translation>مەخپىي نومۇر</translation>
-+        <translation type="vanished">مەخپىي نومۇر</translation>
-     </message>
-     <message>
-         <source>Current Device: </source>
-         <translation type="vanished">当前设备:</translation>
-     </message>
-     <message>
--        <location filename="../src/bioauthwidget.cpp" line="96"/>
--        <location filename="../src/bioauthwidget.cpp" line="212"/>
-         <source>%1 too many unsuccessful attempts,please enter password.</source>
--        <translation>1-نومۇر مەغلۇپ بولغان سىناق قېتىم سانى زىيادە كۆپ، مەخپىي نومۇرنى كىرگۈزۈڭ</translation>
-+        <translation type="vanished">1-نومۇر مەغلۇپ بولغان سىناق قېتىم سانى زىيادە كۆپ، مەخپىي نومۇرنى كىرگۈزۈڭ</translation>
-     </message>
-     <message>
--        <location filename="../src/bioauthwidget.cpp" line="102"/>
-         <source>%1 authentication failure,there are still %2 remaining opportunities</source>
--        <translation>بىر كىملىك دەلىللەش مەغلۇپ بولدى، يەنىلا ٪2 ئېشىپ قالغان پۇرسەت بار</translation>
-+        <translation type="vanished">بىر كىملىك دەلىللەش مەغلۇپ بولدى، يەنىلا ٪2 ئېشىپ قالغان پۇرسەت بار</translation>
-     </message>
-     <message>
--        <location filename="../src/bioauthwidget.cpp" line="226"/>
-         <source>Please use wechat to scan the code</source>
--        <translation>ئۈندىداردا كود سۈپۈرۈڭ</translation>
-+        <translation type="vanished">ئۈندىداردا كود سۈپۈرۈڭ</translation>
-     </message>
- </context>
- <context>
-     <name>BioDevices</name>
-     <message>
--        <location filename="../src/biodevices.cpp" line="78"/>
-         <source>Unplugging of %1 device detected</source>
--        <translation>تەكشۈرۈپ بايقىغان 1 ئۈسكۈنىنى تارتىپ چىقارماق</translation>
-+        <translation type="vanished">تەكشۈرۈپ بايقىغان 1 ئۈسكۈنىنى تارتىپ چىقارماق</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="88"/>
-         <source>%1 device insertion detected</source>
--        <translation>٪1 ئۈسكۈنىنىڭ كىرگۈزۈلگەنلىكىنى تەكشۈرۈپ چىقماق</translation>
-+        <translation type="vanished">٪1 ئۈسكۈنىنىڭ كىرگۈزۈلگەنلىكىنى تەكشۈرۈپ چىقماق</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="97"/>
-         <source>ukui-biometric-manager</source>
--        <translation>بىئولوگىيەلىك ئالاھىدىلىك باشقۇرۇش قورالى</translation>
-+        <translation type="vanished">بىئولوگىيەلىك ئالاھىدىلىك باشقۇرۇش قورالى</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="100"/>
-         <source>biometric</source>
--        <translation>بىئولوگىيەلىك ئالاھىدىلىك</translation>
-+        <translation type="vanished">بىئولوگىيەلىك ئالاھىدىلىك</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="647"/>
-         <source>FingerPrint</source>
--        <translation>بارماق ئىزى</translation>
-+        <translation type="vanished">بارماق ئىزى</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="649"/>
-         <source>FingerVein</source>
--        <translation>ۋېنانى كۆرسىتىدۇ</translation>
-+        <translation type="vanished">ۋېنانى كۆرسىتىدۇ</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="651"/>
-         <source>Iris</source>
--        <translation>رەڭدار پەردە</translation>
-+        <translation type="vanished">رەڭدار پەردە</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="653"/>
-         <source>Face</source>
--        <translation>ئادەم يۈزىنى پەرقلەندۈرۈش</translation>
-+        <translation type="vanished">ئادەم يۈزىنى پەرقلەندۈرۈش</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="655"/>
-         <source>VoicePrint</source>
--        <translation>ئاۋاز سىزىقى</translation>
-+        <translation type="vanished">ئاۋاز سىزىقى</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="657"/>
-         <source>ukey</source>
--        <translation>بىخەتەر ئاچقۇچ</translation>
-+        <translation type="vanished">بىخەتەر ئاچقۇچ</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="659"/>
-         <source>QRCode</source>
--        <translation>ئىككى ئۆلچەملىك كود</translation>
-+        <translation type="vanished">ئىككى ئۆلچەملىك كود</translation>
-     </message>
-     <message>
-         <source>Wechat</source>
-@@ -115,11 +93,6 @@
- </context>
- <context>
-     <name>BioDevicesWidget</name>
--    <message>
--        <location filename="../src/biodeviceswidget.ui" line="14"/>
--        <source>Form</source>
--        <translation></translation>
--    </message>
-     <message>
-         <source>Device types:</source>
-         <translation type="vanished">设备类型:</translation>
-@@ -140,14 +113,12 @@
- <context>
-     <name>LoginOptionsWidget</name>
-     <message>
--        <location filename="../src/loginoptionswidget.cpp" line="61"/>
-         <source>Login Options</source>
--        <translation>تاللاش تۈرىگە كىرمەك</translation>
-+        <translation type="vanished">تاللاش تۈرىگە كىرمەك</translation>
-     </message>
-     <message>
--        <location filename="../src/loginoptionswidget.cpp" line="294"/>
-         <source>Password</source>
--        <translation>مەخپىي نومۇر</translation>
-+        <translation type="vanished">مەخپىي نومۇر</translation>
-     </message>
-     <message>
-         <source>Wechat</source>
-@@ -180,5 +151,137 @@
-         <source>VoicePrint</source>
-         <translation type="vanished">声纹</translation>
-     </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="126"/>
-+        <source>Enter the ukey password</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="150"/>
-+        <source>Try it again</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="152"/>
-+        <source>Use other Devices</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="153"/>
-+        <source>Cancel</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="162"/>
-+        <source>Choose the option</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="184"/>
-+        <location filename="../src/main.cpp" line="219"/>
-+        <location filename="../src/main.cpp" line="228"/>
-+        <source>Invaild response &quot;</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="184"/>
-+        <location filename="../src/main.cpp" line="219"/>
-+        <location filename="../src/main.cpp" line="228"/>
-+        <source>authentication will be canceld</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="185"/>
-+        <location filename="../src/main.cpp" line="220"/>
-+        <location filename="../src/main.cpp" line="229"/>
-+        <location filename="../src/main.cpp" line="408"/>
-+        <source>AUTHENTICATION CANCELED</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="196"/>
-+        <source>=== BIOMETRIC DEVICES ===</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="207"/>
-+        <source>Choose the device</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="260"/>
-+        <source>Sevice Name</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="261"/>
-+        <source>DISPLAY env</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="262"/>
-+        <source>User</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="263"/>
-+        <source>Display debug information</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="264"/>
-+        <source>Device short name</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="306"/>
-+        <source>UKEY AUTHENTICATION</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="308"/>
-+        <source>BIOMETRIC AUTHENTICATION</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="310"/>
-+        <source>Press Q or Esc to cancel</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="330"/>
-+        <source>BIOMETRIC AUTHENTICATION IS CLOSED</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="334"/>
-+        <source>AUTHENTICATION SUCCESS</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="338"/>
-+        <source>AUTHENTICATION FAILED</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="348"/>
-+        <source>Failed to verify %1, you still have %2 verification opportunities</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="350"/>
-+        <source>Unable to verify %1, please enter password.</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="386"/>
-+        <source>AUTHENTICATION END</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="388"/>
-+        <source>BIOMETRIC AUTHENTICATION END</source>
-+        <translation type="unfinished"></translation>
-+    </message>
- </context>
- </TS>
-diff --git a/bioauth-bin/i18n_ts/zh_CN.ts b/bioauth-bin/i18n_ts/zh_CN.ts
-index 3361365..1193c75 100644
---- a/bioauth-bin/i18n_ts/zh_CN.ts
-+++ b/bioauth-bin/i18n_ts/zh_CN.ts
-@@ -4,12 +4,14 @@
- <context>
-     <name>QObject</name>
-     <message>
-+        <location filename="../src/main.cpp" line="126"/>
-         <source>Enter the ukey password</source>
-         <translation>输入ukey密码</translation>
-     </message>
-     <message>
-         <location filename="../src/main.cpp" line="110"/>
--        <source>Enter the ukey password</source>
-+        <source>Enter the ukey password
-+</source>
-         <translation>输入ukey密码\n</translation>
-     </message>
-     <message>
-@@ -18,124 +20,124 @@
-         <translation>再试一次</translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="102"/>
-+        <location filename="../src/main.cpp" line="152"/>
-         <source>Use other Devices</source>
-         <translation>使用其他设备</translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="103"/>
-+        <location filename="../src/main.cpp" line="153"/>
-         <source>Cancel</source>
-         <translation>取消</translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="112"/>
-+        <location filename="../src/main.cpp" line="162"/>
-         <source>Choose the option</source>
-         <translation>选择选项</translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="134"/>
--        <location filename="../src/main.cpp" line="169"/>
--        <location filename="../src/main.cpp" line="178"/>
-+        <location filename="../src/main.cpp" line="184"/>
-+        <location filename="../src/main.cpp" line="219"/>
-+        <location filename="../src/main.cpp" line="228"/>
-         <source>Invaild response &quot;</source>
-         <translation>不能识别的响应 &quot;</translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="134"/>
--        <location filename="../src/main.cpp" line="169"/>
--        <location filename="../src/main.cpp" line="178"/>
-+        <location filename="../src/main.cpp" line="184"/>
-+        <location filename="../src/main.cpp" line="219"/>
-+        <location filename="../src/main.cpp" line="228"/>
-         <source>authentication will be canceld</source>
-         <translation>认证将要被取消</translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="135"/>
--        <location filename="../src/main.cpp" line="170"/>
--        <location filename="../src/main.cpp" line="179"/>
--        <location filename="../src/main.cpp" line="323"/>
-+        <location filename="../src/main.cpp" line="185"/>
-+        <location filename="../src/main.cpp" line="220"/>
-+        <location filename="../src/main.cpp" line="229"/>
-+        <location filename="../src/main.cpp" line="408"/>
-         <source>AUTHENTICATION CANCELED</source>
-         <translation>认证被取消</translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="146"/>
-+        <location filename="../src/main.cpp" line="196"/>
-         <source>=== BIOMETRIC DEVICES ===</source>
-         <translation>=== 生物识别设备 ===</translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="157"/>
-+        <location filename="../src/main.cpp" line="207"/>
-         <source>Choose the device</source>
-         <translation>选择设备</translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="210"/>
-+        <location filename="../src/main.cpp" line="260"/>
-         <source>Sevice Name</source>
-         <translation></translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="211"/>
-+        <location filename="../src/main.cpp" line="261"/>
-         <source>DISPLAY env</source>
-         <translation></translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="212"/>
-+        <location filename="../src/main.cpp" line="262"/>
-         <source>User</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="213"/>
-+        <location filename="../src/main.cpp" line="263"/>
-         <source>Display debug information</source>
-         <translation></translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="214"/>
-+        <location filename="../src/main.cpp" line="264"/>
-         <source>Device short name</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="282"/>
-+        <location filename="../src/main.cpp" line="306"/>
-         <source>UKEY AUTHENTICATION</source>
-         <translation>ukey认证</translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="284"/>
-+        <location filename="../src/main.cpp" line="308"/>
-         <source>BIOMETRIC AUTHENTICATION</source>
-         <translation>生物识别认证</translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="251"/>
-+        <location filename="../src/main.cpp" line="310"/>
-         <source>Press Q or Esc to cancel</source>
-         <translation>按Q或者Esc取消</translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="267"/>
-+        <location filename="../src/main.cpp" line="330"/>
-         <source>BIOMETRIC AUTHENTICATION IS CLOSED</source>
-         <translation>生物识别认证已关闭</translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="271"/>
-+        <location filename="../src/main.cpp" line="334"/>
-         <source>AUTHENTICATION SUCCESS</source>
-         <translation>认证成功</translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="267"/>
-+        <location filename="../src/main.cpp" line="338"/>
-         <source>AUTHENTICATION FAILED</source>
-         <translation>认证失败</translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="277"/>
-+        <location filename="../src/main.cpp" line="348"/>
-         <source>Failed to verify %1, you still have %2 verification opportunities</source>
-         <translation>验证%1失败,您还有%2次尝试机会</translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="279"/>
-+        <location filename="../src/main.cpp" line="350"/>
-         <source>Unable to verify %1, please enter password.</source>
-         <translation>无法验证%1,请输入密码.</translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="357"/>
-+        <location filename="../src/main.cpp" line="386"/>
-         <source>AUTHENTICATION END</source>
-         <translation>认证结束</translation>
-     </message>
-     <message>
--        <location filename="../src/main.cpp" line="359"/>
-+        <location filename="../src/main.cpp" line="388"/>
-         <source>BIOMETRIC AUTHENTICATION END</source>
-         <translation>生物识别认证结束</translation>
-     </message>
-diff --git a/bioauth-bin/i18n_ts/zh_HK.ts b/bioauth-bin/i18n_ts/zh_HK.ts
-index d71eed9..24be1c3 100644
---- a/bioauth-bin/i18n_ts/zh_HK.ts
-+++ b/bioauth-bin/i18n_ts/zh_HK.ts
-@@ -3,20 +3,13 @@
- <TS version="2.1" language="zh_Hant">
- <context>
-     <name>BioAuthWidget</name>
--    <message>
--        <location filename="../src/bioauthwidget.ui" line="14"/>
--        <source>Form</source>
--        <translation></translation>
--    </message>
-     <message>
-         <source>More</source>
-         <translation type="vanished">更多</translation>
-     </message>
-     <message>
--        <location filename="../src/bioauthwidget.ui" line="146"/>
--        <location filename="../src/bioauthwidget.cpp" line="41"/>
-         <source>Retry</source>
--        <translation>重試</translation>
-+        <translation type="vanished">重試</translation>
-     </message>
-     <message>
-         <source>Too many unsuccessful attempts,please enter password.</source>
-@@ -28,85 +21,70 @@
-     </message>
-     <message>
-         <source>Password</source>
--        <translation>密碼</translation>
-+        <translation type="vanished">密碼</translation>
-     </message>
-     <message>
-         <source>Current Device: </source>
-         <translation type="vanished">当前设备:</translation>
-     </message>
-     <message>
--        <location filename="../src/bioauthwidget.cpp" line="96"/>
--        <location filename="../src/bioauthwidget.cpp" line="212"/>
-         <source>%1 too many unsuccessful attempts,please enter password.</source>
--        <translation>%1失敗的嘗試次數太多,請輸入密碼</translation>
-+        <translation type="vanished">%1失敗的嘗試次數太多,請輸入密碼</translation>
-     </message>
-     <message>
--        <location filename="../src/bioauthwidget.cpp" line="102"/>
-         <source>%1 authentication failure,there are still %2 remaining opportunities</source>
--        <translation>%1 身份驗證失敗,仍有 %2 個剩餘機會</translation>
-+        <translation type="vanished">%1 身份驗證失敗,仍有 %2 個剩餘機會</translation>
-     </message>
-     <message>
--        <location filename="../src/bioauthwidget.cpp" line="226"/>
-         <source>Please use wechat to scan the code</source>
--        <translation>請使用微信掃碼</translation>
-+        <translation type="vanished">請使用微信掃碼</translation>
-     </message>
- </context>
- <context>
-     <name>BioDevices</name>
-     <message>
--        <location filename="../src/biodevices.cpp" line="78"/>
-         <source>Unplugging of %1 device detected</source>
--        <translation>檢測到 %1 設備的拔出</translation>
-+        <translation type="vanished">檢測到 %1 設備的拔出</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="88"/>
-         <source>%1 device insertion detected</source>
--        <translation>檢測到 %1 個設備插入</translation>
-+        <translation type="vanished">檢測到 %1 個設備插入</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="97"/>
-         <source>ukui-biometric-manager</source>
--        <translation>生物特徵管理工具</translation>
-+        <translation type="vanished">生物特徵管理工具</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="100"/>
-         <source>biometric</source>
--        <translation>生物特徵管理工具</translation>
-+        <translation type="vanished">生物特徵管理工具</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="647"/>
-         <source>FingerPrint</source>
--        <translation>指紋</translation>
-+        <translation type="vanished">指紋</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="649"/>
-         <source>FingerVein</source>
--        <translation>指靜脈</translation>
-+        <translation type="vanished">指靜脈</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="651"/>
-         <source>Iris</source>
--        <translation>虹膜</translation>
-+        <translation type="vanished">虹膜</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="653"/>
-         <source>Face</source>
--        <translation>人臉</translation>
-+        <translation type="vanished">人臉</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="655"/>
-         <source>VoicePrint</source>
--        <translation>聲紋</translation>
-+        <translation type="vanished">聲紋</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="657"/>
-         <source>ukey</source>
--        <translation>安全金鑰</translation>
-+        <translation type="vanished">安全金鑰</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="659"/>
-         <source>QRCode</source>
--        <translation>微信掃碼</translation>
-+        <translation type="vanished">微信掃碼</translation>
-     </message>
-     <message>
-         <source>Wechat</source>
-@@ -115,11 +93,6 @@
- </context>
- <context>
-     <name>BioDevicesWidget</name>
--    <message>
--        <location filename="../src/biodeviceswidget.ui" line="14"/>
--        <source>Form</source>
--        <translation></translation>
--    </message>
-     <message>
-         <source>Device types:</source>
-         <translation type="vanished">设备类型:</translation>
-@@ -140,14 +113,12 @@
- <context>
-     <name>LoginOptionsWidget</name>
-     <message>
--        <location filename="../src/loginoptionswidget.cpp" line="61"/>
-         <source>Login Options</source>
--        <translation>登錄選項</translation>
-+        <translation type="vanished">登錄選項</translation>
-     </message>
-     <message>
--        <location filename="../src/loginoptionswidget.cpp" line="294"/>
-         <source>Password</source>
--        <translation>密碼</translation>
-+        <translation type="vanished">密碼</translation>
-     </message>
-     <message>
-         <source>Wechat</source>
-@@ -180,5 +151,137 @@
-         <source>VoicePrint</source>
-         <translation type="vanished">声纹</translation>
-     </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="126"/>
-+        <source>Enter the ukey password</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="150"/>
-+        <source>Try it again</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="152"/>
-+        <source>Use other Devices</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="153"/>
-+        <source>Cancel</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="162"/>
-+        <source>Choose the option</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="184"/>
-+        <location filename="../src/main.cpp" line="219"/>
-+        <location filename="../src/main.cpp" line="228"/>
-+        <source>Invaild response &quot;</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="184"/>
-+        <location filename="../src/main.cpp" line="219"/>
-+        <location filename="../src/main.cpp" line="228"/>
-+        <source>authentication will be canceld</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="185"/>
-+        <location filename="../src/main.cpp" line="220"/>
-+        <location filename="../src/main.cpp" line="229"/>
-+        <location filename="../src/main.cpp" line="408"/>
-+        <source>AUTHENTICATION CANCELED</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="196"/>
-+        <source>=== BIOMETRIC DEVICES ===</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="207"/>
-+        <source>Choose the device</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="260"/>
-+        <source>Sevice Name</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="261"/>
-+        <source>DISPLAY env</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="262"/>
-+        <source>User</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="263"/>
-+        <source>Display debug information</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="264"/>
-+        <source>Device short name</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="306"/>
-+        <source>UKEY AUTHENTICATION</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="308"/>
-+        <source>BIOMETRIC AUTHENTICATION</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="310"/>
-+        <source>Press Q or Esc to cancel</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="330"/>
-+        <source>BIOMETRIC AUTHENTICATION IS CLOSED</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="334"/>
-+        <source>AUTHENTICATION SUCCESS</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="338"/>
-+        <source>AUTHENTICATION FAILED</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="348"/>
-+        <source>Failed to verify %1, you still have %2 verification opportunities</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="350"/>
-+        <source>Unable to verify %1, please enter password.</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="386"/>
-+        <source>AUTHENTICATION END</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/main.cpp" line="388"/>
-+        <source>BIOMETRIC AUTHENTICATION END</source>
-+        <translation type="unfinished"></translation>
-+    </message>
- </context>
- </TS>
-diff --git a/bioauth/i18n_ts/bo.ts b/bioauth/i18n_ts/bo.ts
-index 085c291..39ffc1a 100644
---- a/bioauth/i18n_ts/bo.ts
-+++ b/bioauth/i18n_ts/bo.ts
-@@ -34,52 +34,57 @@
- <context>
-     <name>BioDevices</name>
-     <message>
--        <location filename="../src/biodevices.cpp" line="64"/>
-+        <location filename="../src/biodevices.cpp" line="78"/>
-         <source>Unplugging of %1 device detected</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="74"/>
-+        <location filename="../src/biodevices.cpp" line="88"/>
-         <source>%1 device insertion detected</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="83"/>
--        <source>ukui-biometric-manager</source>
-+        <location filename="../src/biodevices.cpp" line="97"/>
-+        <source>Biometric Manager</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="86"/>
-+        <location filename="../src/biodevices.cpp" line="100"/>
-         <source>biometric</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="457"/>
-+        <location filename="../src/biodevices.cpp" line="700"/>
-         <source>FingerPrint</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="459"/>
-+        <location filename="../src/biodevices.cpp" line="702"/>
-         <source>FingerVein</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="461"/>
-+        <location filename="../src/biodevices.cpp" line="704"/>
-         <source>Iris</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="463"/>
-+        <location filename="../src/biodevices.cpp" line="706"/>
-         <source>Face</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="465"/>
-+        <location filename="../src/biodevices.cpp" line="708"/>
-         <source>VoicePrint</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="467"/>
-+        <location filename="../src/biodevices.cpp" line="710"/>
-+        <source>Ukey</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="712"/>
-         <source>QRCode</source>
-         <translation type="unfinished"></translation>
-     </message>
-@@ -95,9 +100,14 @@
- <context>
-     <name>LoginOptionsWidget</name>
-     <message>
--        <location filename="../src/loginoptionswidget.cpp" line="59"/>
-+        <location filename="../src/loginoptionswidget.cpp" line="79"/>
-         <source>Login Options</source>
-         <translation type="unfinished"></translation>
-     </message>
-+    <message>
-+        <location filename="../src/loginoptionswidget.cpp" line="320"/>
-+        <source>Password</source>
-+        <translation type="unfinished"></translation>
-+    </message>
- </context>
- </TS>
-diff --git a/bioauth/i18n_ts/bo_CN.ts b/bioauth/i18n_ts/bo_CN.ts
-index 4afb7e6..ee809cf 100644
---- a/bioauth/i18n_ts/bo_CN.ts
-+++ b/bioauth/i18n_ts/bo_CN.ts
-@@ -75,7 +75,7 @@
-         <translation>མཛུབ་མོའི་སྡོད་རྩ།</translation>
-     </message>
-     <message>
--        <source>ukui-biometric-manager</source>
-+        <source>Biometric Manager</source>
-         <translation>སྐྱེ་དངོས་ཁྱབ་རྟགས་དོ་དམ་ལག་ཆ།</translation>
-     </message>
-     <message>
-@@ -83,8 +83,8 @@
-         <translation>ཨང་ཀི་ཕྱག་པ།</translation>
-     </message>
-     <message>
--        <source>ukey</source>
--        <translation type="unfinished"></translation>
-+        <source>Ukey</source>
-+        <translation>བདེ་འཇགས་གསང་ལྡེ་</translation>
-     </message>
- </context>
- <context>
-diff --git a/bioauth/i18n_ts/es.ts b/bioauth/i18n_ts/es.ts
-index e687d2d..10574c3 100644
---- a/bioauth/i18n_ts/es.ts
-+++ b/bioauth/i18n_ts/es.ts
-@@ -71,11 +71,15 @@
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <source>ukui-biometric-manager</source>
-+        <source>QRCode</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <source>QRCode</source>
-+        <source>Biometric Manager</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>Ukey</source>
-         <translation type="unfinished"></translation>
-     </message>
- </context>
-@@ -104,5 +108,9 @@
-         <source>Login Options</source>
-         <translation type="unfinished"></translation>
-     </message>
-+    <message>
-+        <source>Password</source>
-+        <translation type="unfinished">Contraseña</translation>
-+    </message>
- </context>
- </TS>
-diff --git a/bioauth/i18n_ts/fr.ts b/bioauth/i18n_ts/fr.ts
-index 3961285..33ed54b 100644
---- a/bioauth/i18n_ts/fr.ts
-+++ b/bioauth/i18n_ts/fr.ts
-@@ -71,11 +71,15 @@
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <source>ukui-biometric-manager</source>
-+        <source>QRCode</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <source>QRCode</source>
-+        <source>Biometric Manager</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>Ukey</source>
-         <translation type="unfinished"></translation>
-     </message>
- </context>
-@@ -104,5 +108,9 @@
-         <source>Login Options</source>
-         <translation type="unfinished"></translation>
-     </message>
-+    <message>
-+        <source>Password</source>
-+        <translation type="unfinished">Mot de passe</translation>
-+    </message>
- </context>
- </TS>
-diff --git a/bioauth/i18n_ts/mn.ts b/bioauth/i18n_ts/mn.ts
-index b96b503..86e77c5 100644
---- a/bioauth/i18n_ts/mn.ts
-+++ b/bioauth/i18n_ts/mn.ts
-@@ -65,7 +65,7 @@
-     </message>
-     <message>
-         <location filename="../src/biodevices.cpp" line="97"/>
--        <source>ukui-biometric-manager</source>
-+        <source>Biometric Manager</source>
-         <translation>ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ᠎ᠤ᠋ᠨ ᠣᠨᠴᠠᠯᠢᠭ ᠬᠠᠮᠢᠶᠠᠷᠤᠯᠲᠠ᠎ᠶ᠋ᠢᠨ ᠪᠠᠭᠠᠵᠢ</translation>
-     </message>
-     <message>
-@@ -74,37 +74,41 @@
-         <translation>ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ᠎ᠤ᠋ᠨ ᠣᠨᠴᠠᠯᠢᠭ</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="647"/>
-+        <location filename="../src/biodevices.cpp" line="700"/>
-         <source>FingerPrint</source>
-         <translation>ᠬᠤᠷᠤᠭᠤᠨ ᠬᠡ</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="649"/>
-+        <location filename="../src/biodevices.cpp" line="702"/>
-         <source>FingerVein</source>
-         <translation>ᠬᠤᠷᠤᠭᠤᠨ ᠨᠠᠮᠵᠢᠭᠤᠨ ᠰᠤᠳᠠᠰᠤ</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="651"/>
-+        <location filename="../src/biodevices.cpp" line="704"/>
-         <source>Iris</source>
-         <translation>ᠰᠣᠯᠣᠩᠭ᠎ᠠ ᠪᠦᠷᠬᠦᠭᠦᠯ</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="653"/>
-+        <location filename="../src/biodevices.cpp" line="706"/>
-         <source>Face</source>
-         <translation>ᠬᠥᠮᠦᠨ᠎ᠦ᠌ ᠨᠢᠭᠤᠷ ᠲᠠᠨᠢᠬᠤ</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="655"/>
-+        <location filename="../src/biodevices.cpp" line="708"/>
-         <source>VoicePrint</source>
-         <translation>ᠳᠠᠭᠤᠨ ᠡᠷᠢᠶᠡᠨ</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="657"/>
--        <source>ukey</source>
-+        <location filename="../src/biodevices.cpp" line="710"/>
-+        <source>Ukey</source>
-         <translation>ᠠᠶᠤᠯᠭᠦᠢ ᠨᠢᠭᠤᠴᠠ ᠲᠦᠯᠬᠢᠭᠦᠷ</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="659"/>
-+        <source>ukey</source>
-+        <translation type="vanished">ᠠᠶᠤᠯᠭᠦᠢ ᠨᠢᠭᠤᠴᠠ ᠲᠦᠯᠬᠢᠭᠦᠷ</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="712"/>
-         <source>QRCode</source>
-         <translation>ᠬᠣᠶᠠᠷ ᠬᠡᠮᠵᠢᠯᠲᠦ ᠺᠣᠳ᠋</translation>
-     </message>
-@@ -140,12 +144,12 @@
- <context>
-     <name>LoginOptionsWidget</name>
-     <message>
--        <location filename="../src/loginoptionswidget.cpp" line="61"/>
-+        <location filename="../src/loginoptionswidget.cpp" line="79"/>
-         <source>Login Options</source>
-         <translation>ᠲᠡᠮᠳᠡᠭᠯᠡᠬᠦ ᠰᠤᠩᠭᠤᠭᠳᠠᠬᠤᠨ</translation>
-     </message>
-     <message>
--        <location filename="../src/loginoptionswidget.cpp" line="294"/>
-+        <location filename="../src/loginoptionswidget.cpp" line="320"/>
-         <source>Password</source>
-         <translation>ᠨᠢᠭᠤᠴᠠ ᠺᠣᠳ᠋</translation>
-     </message>
-diff --git a/bioauth/i18n_ts/pt.ts b/bioauth/i18n_ts/pt.ts
-index de73991..e0b65ef 100644
---- a/bioauth/i18n_ts/pt.ts
-+++ b/bioauth/i18n_ts/pt.ts
-@@ -71,11 +71,15 @@
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <source>ukui-biometric-manager</source>
-+        <source>QRCode</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <source>QRCode</source>
-+        <source>Biometric Manager</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>Ukey</source>
-         <translation type="unfinished"></translation>
-     </message>
- </context>
-@@ -104,5 +108,9 @@
-         <source>Login Options</source>
-         <translation type="unfinished"></translation>
-     </message>
-+    <message>
-+        <source>Password</source>
-+        <translation type="unfinished">Senha</translation>
-+    </message>
- </context>
- </TS>
-diff --git a/bioauth/i18n_ts/ru.ts b/bioauth/i18n_ts/ru.ts
-index 70926ff..a4bb0dc 100644
---- a/bioauth/i18n_ts/ru.ts
-+++ b/bioauth/i18n_ts/ru.ts
-@@ -71,11 +71,15 @@
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <source>ukui-biometric-manager</source>
-+        <source>QRCode</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <source>QRCode</source>
-+        <source>Biometric Manager</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>Ukey</source>
-         <translation type="unfinished"></translation>
-     </message>
- </context>
-@@ -104,5 +108,9 @@
-         <source>Login Options</source>
-         <translation type="unfinished"></translation>
-     </message>
-+    <message>
-+        <source>Password</source>
-+        <translation type="unfinished">пароль</translation>
-+    </message>
- </context>
- </TS>
-diff --git a/bioauth/i18n_ts/tr.ts b/bioauth/i18n_ts/tr.ts
-index c319001..4dee855 100644
---- a/bioauth/i18n_ts/tr.ts
-+++ b/bioauth/i18n_ts/tr.ts
-@@ -46,52 +46,57 @@
- <context>
-     <name>BioDevices</name>
-     <message>
--        <location filename="../src/biodevices.cpp" line="64"/>
-+        <location filename="../src/biodevices.cpp" line="78"/>
-         <source>Unplugging of %1 device detected</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="74"/>
-+        <location filename="../src/biodevices.cpp" line="88"/>
-         <source>%1 device insertion detected</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="83"/>
--        <source>ukui-biometric-manager</source>
-+        <location filename="../src/biodevices.cpp" line="97"/>
-+        <source>Biometric Manager</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="86"/>
-+        <location filename="../src/biodevices.cpp" line="100"/>
-         <source>biometric</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="457"/>
-+        <location filename="../src/biodevices.cpp" line="700"/>
-         <source>FingerPrint</source>
-         <translation>Parmak İzi</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="459"/>
-+        <location filename="../src/biodevices.cpp" line="702"/>
-         <source>FingerVein</source>
-         <translation>Damar İzi</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="461"/>
-+        <location filename="../src/biodevices.cpp" line="704"/>
-         <source>Iris</source>
-         <translation>Göz</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="463"/>
-+        <location filename="../src/biodevices.cpp" line="706"/>
-         <source>Face</source>
-         <translation>Yüz</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="465"/>
-+        <location filename="../src/biodevices.cpp" line="708"/>
-         <source>VoicePrint</source>
-         <translation>Ses İzi</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="467"/>
-+        <location filename="../src/biodevices.cpp" line="710"/>
-+        <source>Ukey</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="712"/>
-         <source>QRCode</source>
-         <translation type="unfinished"></translation>
-     </message>
-@@ -123,10 +128,15 @@
- <context>
-     <name>LoginOptionsWidget</name>
-     <message>
--        <location filename="../src/loginoptionswidget.cpp" line="59"/>
-+        <location filename="../src/loginoptionswidget.cpp" line="79"/>
-         <source>Login Options</source>
-         <translation type="unfinished"></translation>
-     </message>
-+    <message>
-+        <location filename="../src/loginoptionswidget.cpp" line="320"/>
-+        <source>Password</source>
-+        <translation type="unfinished">Parola</translation>
-+    </message>
- </context>
- <context>
-     <name>QObject</name>
-diff --git a/bioauth/i18n_ts/zh_CN.ts b/bioauth/i18n_ts/zh_CN.ts
-index c2c6329..2414a7b 100644
---- a/bioauth/i18n_ts/zh_CN.ts
-+++ b/bioauth/i18n_ts/zh_CN.ts
-@@ -28,7 +28,7 @@
-     </message>
-     <message>
-         <source>Password</source>
--        <translation>密码</translation>
-+        <translation type="vanished">密码</translation>
-     </message>
-     <message>
-         <source>Current Device: </source>
-@@ -54,57 +54,57 @@
- <context>
-     <name>BioDevices</name>
-     <message>
--        <location filename="../src/biodevices.cpp" line="64"/>
-+        <location filename="../src/biodevices.cpp" line="78"/>
-         <source>Unplugging of %1 device detected</source>
-         <translation>检测到%1设备拔出</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="74"/>
-+        <location filename="../src/biodevices.cpp" line="88"/>
-         <source>%1 device insertion detected</source>
-         <translation>检测到%1设备插入</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="83"/>
--        <source>ukui-biometric-manager</source>
-+        <location filename="../src/biodevices.cpp" line="97"/>
-+        <source>Biometric Manager</source>
-         <translation>生物特征管理工具</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="86"/>
-+        <location filename="../src/biodevices.cpp" line="100"/>
-         <source>biometric</source>
-         <translation>生物特征</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="457"/>
-+        <location filename="../src/biodevices.cpp" line="700"/>
-         <source>FingerPrint</source>
-         <translation>指纹</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="459"/>
-+        <location filename="../src/biodevices.cpp" line="702"/>
-         <source>FingerVein</source>
-         <translation>指静脉</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="461"/>
-+        <location filename="../src/biodevices.cpp" line="704"/>
-         <source>Iris</source>
-         <translation>虹膜</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="463"/>
-+        <location filename="../src/biodevices.cpp" line="706"/>
-         <source>Face</source>
-         <translation>人脸识别</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="465"/>
-+        <location filename="../src/biodevices.cpp" line="708"/>
-         <source>VoicePrint</source>
-         <translation>声纹</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="657"/>
-+        <location filename="../src/biodevices.cpp" line="710"/>
-         <source>Ukey</source>
-         <translation>安全密钥</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="659"/>
-+        <location filename="../src/biodevices.cpp" line="712"/>
-         <source>QRCode</source>
-         <translation>二维码</translation>
-     </message>
-@@ -140,12 +140,12 @@
- <context>
-     <name>LoginOptionsWidget</name>
-     <message>
--        <location filename="../src/loginoptionswidget.cpp" line="59"/>
-+        <location filename="../src/loginoptionswidget.cpp" line="79"/>
-         <source>Login Options</source>
-         <translation>登录选项</translation>
-     </message>
-     <message>
--        <location filename="../src/loginoptionswidget.cpp" line="294"/>
-+        <location filename="../src/loginoptionswidget.cpp" line="320"/>
-         <source>Password</source>
-         <translation>密码</translation>
-     </message>
-diff --git a/bioauth/i18n_ts/zh_HK.ts b/bioauth/i18n_ts/zh_HK.ts
-index d71eed9..5baf048 100644
---- a/bioauth/i18n_ts/zh_HK.ts
-+++ b/bioauth/i18n_ts/zh_HK.ts
-@@ -65,7 +65,7 @@
-     </message>
-     <message>
-         <location filename="../src/biodevices.cpp" line="97"/>
--        <source>ukui-biometric-manager</source>
-+        <source>Biometric Manager</source>
-         <translation>生物特徵管理工具</translation>
-     </message>
-     <message>
-@@ -74,37 +74,41 @@
-         <translation>生物特徵管理工具</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="647"/>
-+        <location filename="../src/biodevices.cpp" line="700"/>
-         <source>FingerPrint</source>
-         <translation>指紋</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="649"/>
-+        <location filename="../src/biodevices.cpp" line="702"/>
-         <source>FingerVein</source>
-         <translation>指靜脈</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="651"/>
-+        <location filename="../src/biodevices.cpp" line="704"/>
-         <source>Iris</source>
-         <translation>虹膜</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="653"/>
-+        <location filename="../src/biodevices.cpp" line="706"/>
-         <source>Face</source>
-         <translation>人臉</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="655"/>
-+        <location filename="../src/biodevices.cpp" line="708"/>
-         <source>VoicePrint</source>
-         <translation>聲紋</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="657"/>
--        <source>ukey</source>
-+        <location filename="../src/biodevices.cpp" line="710"/>
-+        <source>Ukey</source>
-         <translation>安全金鑰</translation>
-     </message>
-     <message>
--        <location filename="../src/biodevices.cpp" line="659"/>
-+        <source>ukey</source>
-+        <translation type="vanished">安全金鑰</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="712"/>
-         <source>QRCode</source>
-         <translation>微信掃碼</translation>
-     </message>
-@@ -140,12 +144,12 @@
- <context>
-     <name>LoginOptionsWidget</name>
-     <message>
--        <location filename="../src/loginoptionswidget.cpp" line="61"/>
-+        <location filename="../src/loginoptionswidget.cpp" line="79"/>
-         <source>Login Options</source>
-         <translation>登錄選項</translation>
-     </message>
-     <message>
--        <location filename="../src/loginoptionswidget.cpp" line="294"/>
-+        <location filename="../src/loginoptionswidget.cpp" line="320"/>
-         <source>Password</source>
-         <translation>密碼</translation>
-     </message>
-diff --git a/polkit-agent/i18n_ts/bo.ts b/polkit-agent/i18n_ts/bo.ts
-index e29f1bf..50e8ba8 100644
---- a/polkit-agent/i18n_ts/bo.ts
-+++ b/polkit-agent/i18n_ts/bo.ts
-@@ -9,185 +9,205 @@
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="302"/>
--        <location filename="../src/mainwindow.cpp" line="882"/>
--        <location filename="../src/mainwindow.cpp" line="948"/>
-+        <location filename="../src/mainwindow.ui" line="409"/>
-+        <location filename="../src/mainwindow.cpp" line="1075"/>
-+        <location filename="../src/mainwindow.cpp" line="1143"/>
-         <source>Biometric</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="373"/>
-+        <location filename="../src/mainwindow.ui" line="480"/>
-         <source>use password</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="334"/>
--        <location filename="../src/mainwindow.cpp" line="884"/>
-+        <location filename="../src/mainwindow.ui" line="441"/>
-+        <location filename="../src/mainwindow.cpp" line="1077"/>
-         <source>Cancel</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="353"/>
--        <location filename="../src/mainwindow.cpp" line="880"/>
-+        <location filename="../src/mainwindow.ui" line="460"/>
-+        <location filename="../src/mainwindow.cpp" line="1073"/>
-         <source>Authenticate</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="65"/>
-+        <location filename="../src/mainwindow.cpp" line="66"/>
-         <source>Authentication</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="164"/>
--        <location filename="../src/mainwindow.cpp" line="1176"/>
-+        <location filename="../src/mainwindow.cpp" line="105"/>
-+        <source>Insert the ukey into the USB port</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="107"/>
-+        <source>Enter the ukey password</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="226"/>
-+        <location filename="../src/mainwindow.cpp" line="1415"/>
-+        <location filename="../src/mainwindow.cpp" line="1417"/>
-         <source>Failed to verify %1, please enter password to unlock</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="168"/>
--        <location filename="../src/mainwindow.cpp" line="1178"/>
-+        <location filename="../src/mainwindow.cpp" line="231"/>
-+        <location filename="../src/mainwindow.cpp" line="233"/>
-+        <location filename="../src/mainwindow.cpp" line="1419"/>
-         <source>Unable to verify %1, please enter password to unlock</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="175"/>
-+        <location filename="../src/mainwindow.cpp" line="242"/>
-+        <location filename="../src/mainwindow.cpp" line="246"/>
-         <source>Failed to verify %1, you still have %2 verification opportunities</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="261"/>
-+        <location filename="../src/mainwindow.cpp" line="335"/>
-         <source>Please enter your password or enroll your fingerprint </source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="511"/>
-+        <location filename="../src/mainwindow.cpp" line="665"/>
-         <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="517"/>
-+        <location filename="../src/mainwindow.cpp" line="671"/>
-         <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="578"/>
-+        <location filename="../src/mainwindow.cpp" line="731"/>
-         <source>Password: </source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="580"/>
-+        <location filename="../src/mainwindow.cpp" line="733"/>
-         <source>_Password: </source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="582"/>
-+        <location filename="../src/mainwindow.cpp" line="735"/>
-         <source>_Password:</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="623"/>
--        <location filename="../src/mainwindow.cpp" line="627"/>
--        <location filename="../src/mainwindow.cpp" line="631"/>
--        <location filename="../src/mainwindow.cpp" line="635"/>
-+        <location filename="../src/mainwindow.cpp" line="779"/>
-+        <location filename="../src/mainwindow.cpp" line="783"/>
-+        <location filename="../src/mainwindow.cpp" line="787"/>
-+        <location filename="../src/mainwindow.cpp" line="791"/>
-         <source>Account locked,</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="623"/>
-+        <location filename="../src/mainwindow.cpp" line="779"/>
-         <source>days left</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="627"/>
-+        <location filename="../src/mainwindow.cpp" line="783"/>
-         <source>hours left</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="631"/>
-+        <location filename="../src/mainwindow.cpp" line="787"/>
-         <source>minutes left</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="635"/>
-+        <location filename="../src/mainwindow.cpp" line="791"/>
-         <source>seconds left</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="675"/>
--        <location filename="../src/mainwindow.cpp" line="676"/>
-+        <location filename="../src/mainwindow.cpp" line="834"/>
-+        <location filename="../src/mainwindow.cpp" line="835"/>
-         <source>Password cannot be empty</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="886"/>
--        <location filename="../src/mainwindow.cpp" line="991"/>
-+        <location filename="../src/mainwindow.cpp" line="880"/>
-+        <location filename="../src/mainwindow.cpp" line="888"/>
-+        <source>Input your password to authentication</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1079"/>
-+        <location filename="../src/mainwindow.cpp" line="1183"/>
-         <source>Use password</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1026"/>
--        <location filename="../src/mainwindow.cpp" line="1093"/>
--        <location filename="../src/mainwindow.cpp" line="1094"/>
-+        <location filename="../src/mainwindow.cpp" line="1219"/>
-+        <location filename="../src/mainwindow.cpp" line="1292"/>
-+        <location filename="../src/mainwindow.cpp" line="1293"/>
-         <source>Please try again in %1 minutes.</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1036"/>
--        <location filename="../src/mainwindow.cpp" line="1103"/>
--        <location filename="../src/mainwindow.cpp" line="1104"/>
-+        <location filename="../src/mainwindow.cpp" line="1230"/>
-+        <location filename="../src/mainwindow.cpp" line="1302"/>
-+        <location filename="../src/mainwindow.cpp" line="1303"/>
-         <source>Please try again in %1 seconds.</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1045"/>
--        <location filename="../src/mainwindow.cpp" line="1046"/>
--        <location filename="../src/mainwindow.cpp" line="1112"/>
--        <location filename="../src/mainwindow.cpp" line="1113"/>
-+        <location filename="../src/mainwindow.cpp" line="1240"/>
-+        <location filename="../src/mainwindow.cpp" line="1241"/>
-+        <location filename="../src/mainwindow.cpp" line="1311"/>
-+        <location filename="../src/mainwindow.cpp" line="1312"/>
-         <source>Account locked permanently.</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1193"/>
-+        <location filename="../src/mainwindow.cpp" line="1434"/>
-         <source>Verify face recognition or enter password to unlock</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1198"/>
-+        <location filename="../src/mainwindow.cpp" line="1439"/>
-         <source>Press fingerprint or enter password to unlock</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1203"/>
-+        <location filename="../src/mainwindow.cpp" line="1444"/>
-         <source>Verify voiceprint or enter password to unlock</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1208"/>
-+        <location filename="../src/mainwindow.cpp" line="1449"/>
-         <source>Verify finger vein or enter password to unlock</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1213"/>
-+        <location filename="../src/mainwindow.cpp" line="1454"/>
-         <source>Verify iris or enter password to unlock</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1218"/>
-+        <location filename="../src/mainwindow.cpp" line="1459"/>
-         <source>Use the bound wechat scanning code or enter the password to unlock</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="576"/>
-+        <location filename="../src/mainwindow.cpp" line="108"/>
-+        <location filename="../src/mainwindow.cpp" line="729"/>
-         <source>Input Password</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="187"/>
-+        <location filename="../src/mainwindow.cpp" line="259"/>
-         <source>Abnormal network</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="691"/>
-+        <location filename="../src/mainwindow.cpp" line="850"/>
-         <source>Authentication failed, please try again.</source>
-         <translation type="unfinished"></translation>
-     </message>
-@@ -200,12 +220,12 @@
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/PolkitListener.cpp" line="257"/>
-+        <location filename="../src/PolkitListener.cpp" line="265"/>
-         <source>Authentication failure, please try again.</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/PolkitListener.cpp" line="264"/>
-+        <location filename="../src/PolkitListener.cpp" line="272"/>
-         <source>Password input error!</source>
-         <translation type="unfinished"></translation>
-     </message>
-diff --git a/polkit-agent/i18n_ts/bo_CN.ts b/polkit-agent/i18n_ts/bo_CN.ts
-index 2b67f3f..e0a54e7 100644
---- a/polkit-agent/i18n_ts/bo_CN.ts
-+++ b/polkit-agent/i18n_ts/bo_CN.ts
-@@ -65,7 +65,7 @@
- <context>
-     <name>MainWindow</name>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="65"/>
-+        <location filename="../src/mainwindow.cpp" line="66"/>
-         <source>Authentication</source>
-         <translation>དབང་བསྐུར།</translation>
-     </message>
-@@ -91,14 +91,14 @@
-         <translation type="vanished">密码</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="302"/>
--        <location filename="../src/mainwindow.cpp" line="882"/>
--        <location filename="../src/mainwindow.cpp" line="948"/>
-+        <location filename="../src/mainwindow.ui" line="409"/>
-+        <location filename="../src/mainwindow.cpp" line="1075"/>
-+        <location filename="../src/mainwindow.cpp" line="1143"/>
-         <source>Biometric</source>
-         <translation>སྐྱེ་དངོས་དབྱེ་འབྱེད་བཀོལ་བ།</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="373"/>
-+        <location filename="../src/mainwindow.ui" line="480"/>
-         <source>use password</source>
-         <translation>གསང་གྲངས་བེད་སྤྱོད་བྱ་དགོས།</translation>
-     </message>
-@@ -147,20 +147,20 @@
-         <translation type="vanished">Polkit.caller-pid:</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="334"/>
--        <location filename="../src/mainwindow.cpp" line="884"/>
-+        <location filename="../src/mainwindow.ui" line="441"/>
-+        <location filename="../src/mainwindow.cpp" line="1077"/>
-         <source>Cancel</source>
-         <translation>ཕྱིར་འཐེན།</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="353"/>
--        <location filename="../src/mainwindow.cpp" line="880"/>
-+        <location filename="../src/mainwindow.ui" line="460"/>
-+        <location filename="../src/mainwindow.cpp" line="1073"/>
-         <source>Authenticate</source>
-         <translation>དབང་བསྐུར་བ།</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="886"/>
--        <location filename="../src/mainwindow.cpp" line="991"/>
-+        <location filename="../src/mainwindow.cpp" line="1079"/>
-+        <location filename="../src/mainwindow.cpp" line="1183"/>
-         <source>Use password</source>
-         <translation>གསང་གྲངས་བེད་སྤྱོད་བྱ་དགོས།</translation>
-     </message>
-@@ -185,30 +185,30 @@
-         <translation type="vanished">认证中,请稍等...</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1026"/>
--        <location filename="../src/mainwindow.cpp" line="1093"/>
--        <location filename="../src/mainwindow.cpp" line="1094"/>
-+        <location filename="../src/mainwindow.cpp" line="1219"/>
-+        <location filename="../src/mainwindow.cpp" line="1292"/>
-+        <location filename="../src/mainwindow.cpp" line="1293"/>
-         <source>Please try again in %1 minutes.</source>
-         <translation>%1ཡང་བསྐྱར་ཚོད་ལྟ་ཞིག་བྱེད་རོགས།</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1036"/>
--        <location filename="../src/mainwindow.cpp" line="1103"/>
--        <location filename="../src/mainwindow.cpp" line="1104"/>
-+        <location filename="../src/mainwindow.cpp" line="1230"/>
-+        <location filename="../src/mainwindow.cpp" line="1302"/>
-+        <location filename="../src/mainwindow.cpp" line="1303"/>
-         <source>Please try again in %1 seconds.</source>
-         <translation>ཁྱོད་ཀྱིས་དུས་ཚོད་སྐར་ཆ་གཅིག་གི་ནང་དུ་ཡང་བསྐྱར་ཚོད་ལྟ་ཞིག་བྱེད་རོགས།</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1045"/>
--        <location filename="../src/mainwindow.cpp" line="1046"/>
--        <location filename="../src/mainwindow.cpp" line="1112"/>
--        <location filename="../src/mainwindow.cpp" line="1113"/>
-+        <location filename="../src/mainwindow.cpp" line="1240"/>
-+        <location filename="../src/mainwindow.cpp" line="1241"/>
-+        <location filename="../src/mainwindow.cpp" line="1311"/>
-+        <location filename="../src/mainwindow.cpp" line="1312"/>
-         <source>Account locked permanently.</source>
-         <translation>དུས་གཏན་དུ་ཟྭ་བརྒྱབ་པའི་རྩིས་ཐོ།</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="675"/>
--        <location filename="../src/mainwindow.cpp" line="676"/>
-+        <location filename="../src/mainwindow.cpp" line="834"/>
-+        <location filename="../src/mainwindow.cpp" line="835"/>
-         <source>Password cannot be empty</source>
-         <translation>གསང་གྲངས་སྟོང་པ་ཡིན་མི་སྲིད།</translation>
-     </message>
-@@ -221,7 +221,8 @@
-         <translation type="vanished">无法验证%1,请输入密码.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="175"/>
-+        <location filename="../src/mainwindow.cpp" line="242"/>
-+        <location filename="../src/mainwindow.cpp" line="246"/>
-         <source>Failed to verify %1, you still have %2 verification opportunities</source>
-         <translation>%1ལ་ཞིབ་བཤེར་བྱེད་མ་ཐུབ་ན། ཁྱེད་ཚོར་ད་དུང་%2ལ་ཞིབ་བཤེར་བྱེད་པའི་གོ་སྐབས་ཡོད།</translation>
-     </message>
-@@ -230,42 +231,42 @@
-         <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="578"/>
-+        <location filename="../src/mainwindow.cpp" line="731"/>
-         <source>Password: </source>
-         <translation>གསང་གྲངས་ནི། </translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="261"/>
-+        <location filename="../src/mainwindow.cpp" line="335"/>
-         <source>Please enter your password or enroll your fingerprint </source>
-         <translation>ཁྱེད་ཀྱི་གསང་གྲངས་ནང་འཇུག་བྱེད་པའམ་ཡང་ན་ཁྱེད་ཀྱི་མཛུབ་རིས་ནང་འཇུག་བྱེད་པ། </translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="187"/>
-+        <location filename="../src/mainwindow.cpp" line="259"/>
-         <source>Abnormal network</source>
-         <translation>རྒྱུན་ལྡན་མིན་པའི་དྲ་བ།</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="511"/>
-+        <location filename="../src/mainwindow.cpp" line="665"/>
-         <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
-         <translation>ཐེངས་འདིའི་བཀོལ་སྤྱོད་ལ་དོ་དམ་པའི་དབང་ཆ་ཐོབ་ན་ད་གཟོད་མུ་མཐུད་དུ་ལག་བསྟར་བྱེད་ཐུབ།གསང་གྲངས་ནང་འཇུག་བྱས་ནས་ཐེངས་འདིའི་བཀོལ་སྤྱོད་བྱེད་ཆོག</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="580"/>
-+        <location filename="../src/mainwindow.cpp" line="733"/>
-         <source>_Password: </source>
-         <translation>གསང་གྲངས། </translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="582"/>
-+        <location filename="../src/mainwindow.cpp" line="735"/>
-         <source>_Password:</source>
-         <translation>གསང་གྲངས།:</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="691"/>
-+        <location filename="../src/mainwindow.cpp" line="850"/>
-         <source>Authentication failed, please try again.</source>
-         <translation>བདེན་དཔང་ར་སྤྲོད་ལ་ཕམ་ཁ་བྱུང་བས་ཡང་བསྐྱར་ཚོད་ལྟ་བྱོས།</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="623"/>
-+        <location filename="../src/mainwindow.cpp" line="779"/>
-         <source>days left</source>
-         <translation>གནམ་རྒྱབ་ཟྭ་འབྱེད།</translation>
-     </message>
-@@ -278,14 +279,16 @@
-         <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="164"/>
--        <location filename="../src/mainwindow.cpp" line="1176"/>
-+        <location filename="../src/mainwindow.cpp" line="226"/>
-+        <location filename="../src/mainwindow.cpp" line="1415"/>
-+        <location filename="../src/mainwindow.cpp" line="1417"/>
-         <source>Failed to verify %1, please enter password to unlock</source>
-         <translation>%1ལ་ཞིབ་བཤེར་བྱེད་མ་ཐུབ་ན། གསང་གྲངས་ནང་འཇུག་བྱས་ནས་ཟྭ་རྒྱག་རོགས།</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="168"/>
--        <location filename="../src/mainwindow.cpp" line="1178"/>
-+        <location filename="../src/mainwindow.cpp" line="231"/>
-+        <location filename="../src/mainwindow.cpp" line="233"/>
-+        <location filename="../src/mainwindow.cpp" line="1419"/>
-         <source>Unable to verify %1, please enter password to unlock</source>
-         <translation>%1ལ་ཞིབ་བཤེར་བྱེད་ཐབས་བྲལ་བ་དང་། གསང་གྲངས་ནང་འཇུག་བྱས་ནས་ཟྭ་རྒྱག་རོགས།</translation>
-     </message>
-@@ -294,57 +297,74 @@
-         <translation type="vanished">网络异常</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="517"/>
-+        <location filename="../src/mainwindow.cpp" line="671"/>
-         <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
-         <translation>གོ་རིམ་ཞིག་གིས་ཁྱད་དབང་དགོས་པའི་འགུལ་སྟངས་ཤིག་ལག་བསྟར་བྱེད་པར་ཚོད་ལྟ་བྱེད་བཞིན་ཡོད་པ་དང་།་འགུལ་སྟངས་འདི་ལག་བསྟར་བྱེད་པའི་དབང་ཆ་སྤྲོད་དགོས་པའི་རེ་བ་བཏོན།</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="576"/>
-+        <location filename="../src/mainwindow.cpp" line="108"/>
-+        <location filename="../src/mainwindow.cpp" line="729"/>
-         <source>Input Password</source>
-         <translation>ནང་འཇུག་གི་གསང་གྲངས།</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="627"/>
-+        <location filename="../src/mainwindow.cpp" line="105"/>
-+        <source>Insert the ukey into the USB port</source>
-+        <translation>བདེ་འཇགས་ཀྱི་གསང་བའི་ལྡེ་མིག་དེ་USBཡི་སྣེ་འདྲེན་དུ་འཇུག་རོགས།</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="107"/>
-+        <source>Enter the ukey password</source>
-+        <translation>གསང་བའི་ཨང་གྲངས་ནང་འཇུག་བྱེད་པ།</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="783"/>
-         <source>hours left</source>
-         <translation>དུས་ཚོད་འགའ་ལས་ལྷག་མེད</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="631"/>
-+        <location filename="../src/mainwindow.cpp" line="787"/>
-         <source>minutes left</source>
-         <translation>སྐར་མ་རྗེས་ནས་ཟྭ་ཕྱེ།</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="635"/>
-+        <location filename="../src/mainwindow.cpp" line="791"/>
-         <source>seconds left</source>
-         <translation>སྐར་ཆའི་རྗེས་ནས་ཟྭ་ཕྱེ་བ།</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1193"/>
-+        <location filename="../src/mainwindow.cpp" line="880"/>
-+        <location filename="../src/mainwindow.cpp" line="888"/>
-+        <source>Input your password to authentication</source>
-+        <translation>གསང་བའི་ཨང་གྲངས་ནང་འཇུག་བྱེད་དབང་ཡོད།</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1434"/>
-         <source>Verify face recognition or enter password to unlock</source>
-         <translation>དཔང་མིའི་གདོང་ལ་ཞིབ་བཤེར་བྱེད་པའམ་ཡང་ན་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་པ།</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1198"/>
-+        <location filename="../src/mainwindow.cpp" line="1439"/>
-         <source>Press fingerprint or enter password to unlock</source>
-         <translation>མཛུབ་རིས་མནན་པའམ་ཡང་ན་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་པ།</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1203"/>
-+        <location filename="../src/mainwindow.cpp" line="1444"/>
-         <source>Verify voiceprint or enter password to unlock</source>
-         <translation>སྒྲ་རིས་ར་སྤྲོད་བྱེད་པའམ་ཡང་ན་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་པ།</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1208"/>
-+        <location filename="../src/mainwindow.cpp" line="1449"/>
-         <source>Verify finger vein or enter password to unlock</source>
-         <translation>ཚོད་ལྟས་ར་སྤྲོད་བྱེད་པ་ནི་སྡོད་རྩ་དང་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་པ་དེ་ཡིན།</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1213"/>
-+        <location filename="../src/mainwindow.cpp" line="1454"/>
-         <source>Verify iris or enter password to unlock</source>
-         <translation>འཇའ་སྐྱི་ར་སྤྲོད་བྱེད་པའམ་ཡང་ན་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་པ།</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1218"/>
-+        <location filename="../src/mainwindow.cpp" line="1459"/>
-         <source>Use the bound wechat scanning code or enter the password to unlock</source>
-         <translation>སྦྲེལ་ཡོད་པའི་སྐད་འཕྲིན་གྱི་ཨང་གྲངས་སམ་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་དགོས།</translation>
-     </message>
-@@ -353,10 +373,10 @@
-         <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="623"/>
--        <location filename="../src/mainwindow.cpp" line="627"/>
--        <location filename="../src/mainwindow.cpp" line="631"/>
--        <location filename="../src/mainwindow.cpp" line="635"/>
-+        <location filename="../src/mainwindow.cpp" line="779"/>
-+        <location filename="../src/mainwindow.cpp" line="783"/>
-+        <location filename="../src/mainwindow.cpp" line="787"/>
-+        <location filename="../src/mainwindow.cpp" line="791"/>
-         <source>Account locked,</source>
-         <translation>རྩིས་ཐོ་ཟྭ་བརྒྱབ་པ།</translation>
-     </message>
-@@ -373,12 +393,12 @@
-         <translation>མཁོ་མཁན་གཞན་པ་ཞིག་གིས་བདེན་དཔང་ར་སྤྲོད་བྱེད་བཞིན་ཡོད།ཅུང་ཙམ་འགོར་རྗེས་ཡང་བསྐྱར་ཚོད་ལྟ་བྱོས།</translation>
-     </message>
-     <message>
--        <location filename="../src/PolkitListener.cpp" line="257"/>
-+        <location filename="../src/PolkitListener.cpp" line="265"/>
-         <source>Authentication failure, please try again.</source>
-         <translation>བདེན་དཔང་ར་སྤྲོད་བྱེད་མ་ཐུབ་ན་ཁྱེད་ཀྱིས་ཡང་བསྐྱར་ཚོད་ལྟ་བྱེད།</translation>
-     </message>
-     <message>
--        <location filename="../src/PolkitListener.cpp" line="264"/>
-+        <location filename="../src/PolkitListener.cpp" line="272"/>
-         <source>Password input error!</source>
-         <translation>གསང་གྲངས་ནང་འཇུག་ནོར་འཁྲུལ་བྱུང་བ་རེད།</translation>
-     </message>
-diff --git a/polkit-agent/i18n_ts/de.ts b/polkit-agent/i18n_ts/de.ts
-index 8017b6c..8521a6d 100644
---- a/polkit-agent/i18n_ts/de.ts
-+++ b/polkit-agent/i18n_ts/de.ts
-@@ -65,7 +65,7 @@
- <context>
-     <name>MainWindow</name>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="65"/>
-+        <location filename="../src/mainwindow.cpp" line="66"/>
-         <source>Authentication</source>
-         <translation>Authentifizierung</translation>
-     </message>
-@@ -91,14 +91,14 @@
-         <translation type="vanished">密码</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="302"/>
--        <location filename="../src/mainwindow.cpp" line="882"/>
--        <location filename="../src/mainwindow.cpp" line="948"/>
-+        <location filename="../src/mainwindow.ui" line="409"/>
-+        <location filename="../src/mainwindow.cpp" line="1075"/>
-+        <location filename="../src/mainwindow.cpp" line="1143"/>
-         <source>Biometric</source>
-         <translation>Biometrisch</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="373"/>
-+        <location filename="../src/mainwindow.ui" line="480"/>
-         <source>use password</source>
-         <translation>Passwort verwenden</translation>
-     </message>
-@@ -147,20 +147,20 @@
-         <translation type="vanished">Polkit.caller-pid:</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="334"/>
--        <location filename="../src/mainwindow.cpp" line="884"/>
-+        <location filename="../src/mainwindow.ui" line="441"/>
-+        <location filename="../src/mainwindow.cpp" line="1077"/>
-         <source>Cancel</source>
-         <translation>Abbrechen</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="353"/>
--        <location filename="../src/mainwindow.cpp" line="880"/>
-+        <location filename="../src/mainwindow.ui" line="460"/>
-+        <location filename="../src/mainwindow.cpp" line="1073"/>
-         <source>Authenticate</source>
-         <translation>Beglaubigen</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="886"/>
--        <location filename="../src/mainwindow.cpp" line="991"/>
-+        <location filename="../src/mainwindow.cpp" line="1079"/>
-+        <location filename="../src/mainwindow.cpp" line="1183"/>
-         <source>Use password</source>
-         <translation>Passwort verwenden</translation>
-     </message>
-@@ -185,30 +185,30 @@
-         <translation type="vanished">认证中,请稍等...</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1026"/>
--        <location filename="../src/mainwindow.cpp" line="1093"/>
--        <location filename="../src/mainwindow.cpp" line="1094"/>
-+        <location filename="../src/mainwindow.cpp" line="1219"/>
-+        <location filename="../src/mainwindow.cpp" line="1292"/>
-+        <location filename="../src/mainwindow.cpp" line="1293"/>
-         <source>Please try again in %1 minutes.</source>
-         <translation>Versuchen Sie es in %1 Minuten erneut.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1036"/>
--        <location filename="../src/mainwindow.cpp" line="1103"/>
--        <location filename="../src/mainwindow.cpp" line="1104"/>
-+        <location filename="../src/mainwindow.cpp" line="1230"/>
-+        <location filename="../src/mainwindow.cpp" line="1302"/>
-+        <location filename="../src/mainwindow.cpp" line="1303"/>
-         <source>Please try again in %1 seconds.</source>
-         <translation>Bitte versuchen Sie es in %1 Sekunden erneut.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1045"/>
--        <location filename="../src/mainwindow.cpp" line="1046"/>
--        <location filename="../src/mainwindow.cpp" line="1112"/>
--        <location filename="../src/mainwindow.cpp" line="1113"/>
-+        <location filename="../src/mainwindow.cpp" line="1240"/>
-+        <location filename="../src/mainwindow.cpp" line="1241"/>
-+        <location filename="../src/mainwindow.cpp" line="1311"/>
-+        <location filename="../src/mainwindow.cpp" line="1312"/>
-         <source>Account locked permanently.</source>
-         <translation>Das Konto wurde dauerhaft gesperrt.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="675"/>
--        <location filename="../src/mainwindow.cpp" line="676"/>
-+        <location filename="../src/mainwindow.cpp" line="834"/>
-+        <location filename="../src/mainwindow.cpp" line="835"/>
-         <source>Password cannot be empty</source>
-         <translation>Das Kennwort darf nicht leer sein.</translation>
-     </message>
-@@ -221,7 +221,8 @@
-         <translation type="vanished">无法验证%1,请输入密码.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="175"/>
-+        <location filename="../src/mainwindow.cpp" line="242"/>
-+        <location filename="../src/mainwindow.cpp" line="246"/>
-         <source>Failed to verify %1, you still have %2 verification opportunities</source>
-         <translation>%1 konnte nicht verifiziert werden, Sie haben immer noch %2 Überprüfungsmöglichkeiten</translation>
-     </message>
-@@ -230,42 +231,42 @@
-         <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="578"/>
-+        <location filename="../src/mainwindow.cpp" line="731"/>
-         <source>Password: </source>
-         <translation>Passwort: </translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="261"/>
-+        <location filename="../src/mainwindow.cpp" line="335"/>
-         <source>Please enter your password or enroll your fingerprint </source>
-         <translation>Bitte geben Sie Ihr Passwort ein oder registrieren Sie Ihren Fingerabdruck </translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="187"/>
-+        <location filename="../src/mainwindow.cpp" line="259"/>
-         <source>Abnormal network</source>
-         <translation>Ungewöhnliches Netzwerk</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="511"/>
-+        <location filename="../src/mainwindow.cpp" line="665"/>
-         <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
-         <translation>Für diesen Vorgang ist die Autorisierung des Administrators erforderlich. Bitte geben Sie Ihr Passwort ein, um diesen Vorgang zuzulassen.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="580"/>
-+        <location filename="../src/mainwindow.cpp" line="733"/>
-         <source>_Password: </source>
-         <translation>_Passwort: </translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="582"/>
-+        <location filename="../src/mainwindow.cpp" line="735"/>
-         <source>_Password:</source>
-         <translation>_Passwort:</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="691"/>
-+        <location filename="../src/mainwindow.cpp" line="850"/>
-         <source>Authentication failed, please try again.</source>
-         <translation>Authentifizierung fehlgeschlagen, bitte versuchen Sie es erneut.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="623"/>
-+        <location filename="../src/mainwindow.cpp" line="779"/>
-         <source>days left</source>
-         <translation>Verbleibende Tage</translation>
-     </message>
-@@ -278,14 +279,16 @@
-         <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="164"/>
--        <location filename="../src/mainwindow.cpp" line="1176"/>
-+        <location filename="../src/mainwindow.cpp" line="226"/>
-+        <location filename="../src/mainwindow.cpp" line="1415"/>
-+        <location filename="../src/mainwindow.cpp" line="1417"/>
-         <source>Failed to verify %1, please enter password to unlock</source>
-         <translation>%1 konnte nicht verifiziert werden, bitte geben Sie das Kennwort zum Entsperren ein</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="168"/>
--        <location filename="../src/mainwindow.cpp" line="1178"/>
-+        <location filename="../src/mainwindow.cpp" line="231"/>
-+        <location filename="../src/mainwindow.cpp" line="233"/>
-+        <location filename="../src/mainwindow.cpp" line="1419"/>
-         <source>Unable to verify %1, please enter password to unlock</source>
-         <translation>%1 kann nicht verifiziert werden, bitte geben Sie das Kennwort zum Entsperren ein</translation>
-     </message>
-@@ -294,57 +297,74 @@
-         <translation type="vanished">网络异常</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="517"/>
-+        <location filename="../src/mainwindow.cpp" line="671"/>
-         <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
-         <translation>Ein Programm versucht, eine Aktion auszuführen, für die Berechtigungen erforderlich sind. Zum Ausführen der Aktion ist eine Autorisierung erforderlich.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="576"/>
-+        <location filename="../src/mainwindow.cpp" line="108"/>
-+        <location filename="../src/mainwindow.cpp" line="729"/>
-         <source>Input Password</source>
-         <translation>Passwort eingeben</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="627"/>
-+        <location filename="../src/mainwindow.cpp" line="105"/>
-+        <source>Insert the ukey into the USB port</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="107"/>
-+        <source>Enter the ukey password</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="783"/>
-         <source>hours left</source>
-         <translation>Verbleibende Stunden</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="631"/>
-+        <location filename="../src/mainwindow.cpp" line="787"/>
-         <source>minutes left</source>
-         <translation>Noch Minuten</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="635"/>
-+        <location filename="../src/mainwindow.cpp" line="791"/>
-         <source>seconds left</source>
-         <translation>Verbleibende Sekunden</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1193"/>
-+        <location filename="../src/mainwindow.cpp" line="880"/>
-+        <location filename="../src/mainwindow.cpp" line="888"/>
-+        <source>Input your password to authentication</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1434"/>
-         <source>Verify face recognition or enter password to unlock</source>
-         <translation>Überprüfen Sie die Gesichtserkennung oder geben Sie das Passwort ein, um zu entsperren</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1198"/>
-+        <location filename="../src/mainwindow.cpp" line="1439"/>
-         <source>Press fingerprint or enter password to unlock</source>
-         <translation>Drücken Sie den Fingerabdruck oder geben Sie das Passwort ein, um zu entsperren</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1203"/>
-+        <location filename="../src/mainwindow.cpp" line="1444"/>
-         <source>Verify voiceprint or enter password to unlock</source>
-         <translation>Überprüfen Sie den Stimmabdruck oder geben Sie das Passwort ein, um zu entsperren</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1208"/>
-+        <location filename="../src/mainwindow.cpp" line="1449"/>
-         <source>Verify finger vein or enter password to unlock</source>
-         <translation>Überprüfen Sie die Fingervene oder geben Sie das Passwort ein, um zu entsperren</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1213"/>
-+        <location filename="../src/mainwindow.cpp" line="1454"/>
-         <source>Verify iris or enter password to unlock</source>
-         <translation>Überprüfen Sie die Iris oder geben Sie das Passwort ein, um zu entsperren</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1218"/>
-+        <location filename="../src/mainwindow.cpp" line="1459"/>
-         <source>Use the bound wechat scanning code or enter the password to unlock</source>
-         <translation>Verwenden Sie den gebundenen Wechat-Scan-Code oder geben Sie das Passwort zum Entsperren ein</translation>
-     </message>
-@@ -353,10 +373,10 @@
-         <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="623"/>
--        <location filename="../src/mainwindow.cpp" line="627"/>
--        <location filename="../src/mainwindow.cpp" line="631"/>
--        <location filename="../src/mainwindow.cpp" line="635"/>
-+        <location filename="../src/mainwindow.cpp" line="779"/>
-+        <location filename="../src/mainwindow.cpp" line="783"/>
-+        <location filename="../src/mainwindow.cpp" line="787"/>
-+        <location filename="../src/mainwindow.cpp" line="791"/>
-         <source>Account locked,</source>
-         <translation>Konto gesperrt,</translation>
-     </message>
-@@ -373,12 +393,12 @@
-         <translation>Ein anderer Client authentifiziert sich bereits, bitte versuchen Sie es später noch einmal.</translation>
-     </message>
-     <message>
--        <location filename="../src/PolkitListener.cpp" line="257"/>
-+        <location filename="../src/PolkitListener.cpp" line="265"/>
-         <source>Authentication failure, please try again.</source>
-         <translation>Authentifizierungsfehler, bitte versuchen Sie es erneut.</translation>
-     </message>
-     <message>
--        <location filename="../src/PolkitListener.cpp" line="264"/>
-+        <location filename="../src/PolkitListener.cpp" line="272"/>
-         <source>Password input error!</source>
-         <translation>Fehler bei der Passworteingabe!</translation>
-     </message>
-diff --git a/polkit-agent/i18n_ts/es.ts b/polkit-agent/i18n_ts/es.ts
-index a395a53..133ff59 100644
---- a/polkit-agent/i18n_ts/es.ts
-+++ b/polkit-agent/i18n_ts/es.ts
-@@ -65,7 +65,7 @@
- <context>
-     <name>MainWindow</name>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="65"/>
-+        <location filename="../src/mainwindow.cpp" line="66"/>
-         <source>Authentication</source>
-         <translation>Autenticación</translation>
-     </message>
-@@ -91,14 +91,14 @@
-         <translation type="vanished">密码</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="302"/>
--        <location filename="../src/mainwindow.cpp" line="882"/>
--        <location filename="../src/mainwindow.cpp" line="948"/>
-+        <location filename="../src/mainwindow.ui" line="409"/>
-+        <location filename="../src/mainwindow.cpp" line="1075"/>
-+        <location filename="../src/mainwindow.cpp" line="1143"/>
-         <source>Biometric</source>
-         <translation>Biométrico</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="373"/>
-+        <location filename="../src/mainwindow.ui" line="480"/>
-         <source>use password</source>
-         <translation>Usar contraseña</translation>
-     </message>
-@@ -147,20 +147,20 @@
-         <translation type="vanished">Polkit.caller-pid:</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="334"/>
--        <location filename="../src/mainwindow.cpp" line="884"/>
-+        <location filename="../src/mainwindow.ui" line="441"/>
-+        <location filename="../src/mainwindow.cpp" line="1077"/>
-         <source>Cancel</source>
-         <translation>Cancelar</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="353"/>
--        <location filename="../src/mainwindow.cpp" line="880"/>
-+        <location filename="../src/mainwindow.ui" line="460"/>
-+        <location filename="../src/mainwindow.cpp" line="1073"/>
-         <source>Authenticate</source>
-         <translation>Autentificar</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="886"/>
--        <location filename="../src/mainwindow.cpp" line="991"/>
-+        <location filename="../src/mainwindow.cpp" line="1079"/>
-+        <location filename="../src/mainwindow.cpp" line="1183"/>
-         <source>Use password</source>
-         <translation>Usar contraseña</translation>
-     </message>
-@@ -185,30 +185,30 @@
-         <translation type="vanished">认证中,请稍等...</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1026"/>
--        <location filename="../src/mainwindow.cpp" line="1093"/>
--        <location filename="../src/mainwindow.cpp" line="1094"/>
-+        <location filename="../src/mainwindow.cpp" line="1219"/>
-+        <location filename="../src/mainwindow.cpp" line="1292"/>
-+        <location filename="../src/mainwindow.cpp" line="1293"/>
-         <source>Please try again in %1 minutes.</source>
-         <translation>Inténtelo de nuevo en %1 minutos.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1036"/>
--        <location filename="../src/mainwindow.cpp" line="1103"/>
--        <location filename="../src/mainwindow.cpp" line="1104"/>
-+        <location filename="../src/mainwindow.cpp" line="1230"/>
-+        <location filename="../src/mainwindow.cpp" line="1302"/>
-+        <location filename="../src/mainwindow.cpp" line="1303"/>
-         <source>Please try again in %1 seconds.</source>
-         <translation>Inténtelo de nuevo en %1 segundos.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1045"/>
--        <location filename="../src/mainwindow.cpp" line="1046"/>
--        <location filename="../src/mainwindow.cpp" line="1112"/>
--        <location filename="../src/mainwindow.cpp" line="1113"/>
-+        <location filename="../src/mainwindow.cpp" line="1240"/>
-+        <location filename="../src/mainwindow.cpp" line="1241"/>
-+        <location filename="../src/mainwindow.cpp" line="1311"/>
-+        <location filename="../src/mainwindow.cpp" line="1312"/>
-         <source>Account locked permanently.</source>
-         <translation>Cuenta bloqueada permanentemente.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="675"/>
--        <location filename="../src/mainwindow.cpp" line="676"/>
-+        <location filename="../src/mainwindow.cpp" line="834"/>
-+        <location filename="../src/mainwindow.cpp" line="835"/>
-         <source>Password cannot be empty</source>
-         <translation>La contraseña no puede estar vacía</translation>
-     </message>
-@@ -221,7 +221,8 @@
-         <translation type="vanished">无法验证%1,请输入密码.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="175"/>
-+        <location filename="../src/mainwindow.cpp" line="242"/>
-+        <location filename="../src/mainwindow.cpp" line="246"/>
-         <source>Failed to verify %1, you still have %2 verification opportunities</source>
-         <translation>No se pudo verificar %1, todavía tiene %2 oportunidades de verificación</translation>
-     </message>
-@@ -230,42 +231,42 @@
-         <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="578"/>
-+        <location filename="../src/mainwindow.cpp" line="731"/>
-         <source>Password: </source>
-         <translation>Contraseña: </translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="261"/>
-+        <location filename="../src/mainwindow.cpp" line="335"/>
-         <source>Please enter your password or enroll your fingerprint </source>
-         <translation>Ingrese su contraseña o registre su huella dactilar </translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="187"/>
-+        <location filename="../src/mainwindow.cpp" line="259"/>
-         <source>Abnormal network</source>
-         <translation>Red anormal</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="511"/>
-+        <location filename="../src/mainwindow.cpp" line="665"/>
-         <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
-         <translation>Esta operación requiere la autorización del administrador. Introduzca su contraseña para permitir esta operación.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="580"/>
-+        <location filename="../src/mainwindow.cpp" line="733"/>
-         <source>_Password: </source>
-         <translation>_Contraseña: </translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="582"/>
-+        <location filename="../src/mainwindow.cpp" line="735"/>
-         <source>_Password:</source>
-         <translation>_Contraseña:</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="691"/>
-+        <location filename="../src/mainwindow.cpp" line="850"/>
-         <source>Authentication failed, please try again.</source>
-         <translation>Error de autenticación, inténtelo de nuevo.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="623"/>
-+        <location filename="../src/mainwindow.cpp" line="779"/>
-         <source>days left</source>
-         <translation>Días restantes</translation>
-     </message>
-@@ -278,14 +279,16 @@
-         <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="164"/>
--        <location filename="../src/mainwindow.cpp" line="1176"/>
-+        <location filename="../src/mainwindow.cpp" line="226"/>
-+        <location filename="../src/mainwindow.cpp" line="1415"/>
-+        <location filename="../src/mainwindow.cpp" line="1417"/>
-         <source>Failed to verify %1, please enter password to unlock</source>
-         <translation>No se pudo verificar %1, ingrese la contraseña para desbloquear</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="168"/>
--        <location filename="../src/mainwindow.cpp" line="1178"/>
-+        <location filename="../src/mainwindow.cpp" line="231"/>
-+        <location filename="../src/mainwindow.cpp" line="233"/>
-+        <location filename="../src/mainwindow.cpp" line="1419"/>
-         <source>Unable to verify %1, please enter password to unlock</source>
-         <translation>No se puede verificar %1, ingrese la contraseña para desbloquear</translation>
-     </message>
-@@ -294,57 +297,74 @@
-         <translation type="vanished">网络异常</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="517"/>
-+        <location filename="../src/mainwindow.cpp" line="671"/>
-         <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
-         <translation>Un programa está intentando realizar una acción que requiere privilegios. Requiere autorización para realizar la acción.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="576"/>
-+        <location filename="../src/mainwindow.cpp" line="108"/>
-+        <location filename="../src/mainwindow.cpp" line="729"/>
-         <source>Input Password</source>
-         <translation>Contraseña de entrada</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="627"/>
-+        <location filename="../src/mainwindow.cpp" line="105"/>
-+        <source>Insert the ukey into the USB port</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="107"/>
-+        <source>Enter the ukey password</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="783"/>
-         <source>hours left</source>
-         <translation>horas restantes</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="631"/>
-+        <location filename="../src/mainwindow.cpp" line="787"/>
-         <source>minutes left</source>
-         <translation>Quedan minutos</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="635"/>
-+        <location filename="../src/mainwindow.cpp" line="791"/>
-         <source>seconds left</source>
-         <translation>segundos restantes</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1193"/>
-+        <location filename="../src/mainwindow.cpp" line="880"/>
-+        <location filename="../src/mainwindow.cpp" line="888"/>
-+        <source>Input your password to authentication</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1434"/>
-         <source>Verify face recognition or enter password to unlock</source>
-         <translation>Verifique el reconocimiento facial o ingrese la contraseña para desbloquear</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1198"/>
-+        <location filename="../src/mainwindow.cpp" line="1439"/>
-         <source>Press fingerprint or enter password to unlock</source>
-         <translation>Presione la huella dactilar o ingrese la contraseña para desbloquear</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1203"/>
-+        <location filename="../src/mainwindow.cpp" line="1444"/>
-         <source>Verify voiceprint or enter password to unlock</source>
-         <translation>Verifica la huella de voz o ingresa la contraseña para desbloquear</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1208"/>
-+        <location filename="../src/mainwindow.cpp" line="1449"/>
-         <source>Verify finger vein or enter password to unlock</source>
-         <translation>Verifique la vena del dedo o ingrese la contraseña para desbloquear</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1213"/>
-+        <location filename="../src/mainwindow.cpp" line="1454"/>
-         <source>Verify iris or enter password to unlock</source>
-         <translation>Verifique el iris o ingrese la contraseña para desbloquear</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1218"/>
-+        <location filename="../src/mainwindow.cpp" line="1459"/>
-         <source>Use the bound wechat scanning code or enter the password to unlock</source>
-         <translation>Use el código de escaneo de wechat vinculado o ingrese la contraseña para desbloquear</translation>
-     </message>
-@@ -353,10 +373,10 @@
-         <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="623"/>
--        <location filename="../src/mainwindow.cpp" line="627"/>
--        <location filename="../src/mainwindow.cpp" line="631"/>
--        <location filename="../src/mainwindow.cpp" line="635"/>
-+        <location filename="../src/mainwindow.cpp" line="779"/>
-+        <location filename="../src/mainwindow.cpp" line="783"/>
-+        <location filename="../src/mainwindow.cpp" line="787"/>
-+        <location filename="../src/mainwindow.cpp" line="791"/>
-         <source>Account locked,</source>
-         <translation>Cuenta bloqueada,</translation>
-     </message>
-@@ -373,12 +393,12 @@
-         <translation>Otro cliente ya se está autenticando, inténtelo de nuevo más tarde.</translation>
-     </message>
-     <message>
--        <location filename="../src/PolkitListener.cpp" line="257"/>
-+        <location filename="../src/PolkitListener.cpp" line="265"/>
-         <source>Authentication failure, please try again.</source>
-         <translation>Error de autenticación, inténtelo de nuevo.</translation>
-     </message>
-     <message>
--        <location filename="../src/PolkitListener.cpp" line="264"/>
-+        <location filename="../src/PolkitListener.cpp" line="272"/>
-         <source>Password input error!</source>
-         <translation>¡Error de entrada de contraseña!</translation>
-     </message>
-diff --git a/polkit-agent/i18n_ts/fr.ts b/polkit-agent/i18n_ts/fr.ts
-index 6ac2c2b..357fb71 100644
---- a/polkit-agent/i18n_ts/fr.ts
-+++ b/polkit-agent/i18n_ts/fr.ts
-@@ -65,7 +65,7 @@
- <context>
-     <name>MainWindow</name>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="65"/>
-+        <location filename="../src/mainwindow.cpp" line="66"/>
-         <source>Authentication</source>
-         <translation>Authentification</translation>
-     </message>
-@@ -91,14 +91,14 @@
-         <translation type="vanished">密码</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="302"/>
--        <location filename="../src/mainwindow.cpp" line="882"/>
--        <location filename="../src/mainwindow.cpp" line="948"/>
-+        <location filename="../src/mainwindow.ui" line="409"/>
-+        <location filename="../src/mainwindow.cpp" line="1075"/>
-+        <location filename="../src/mainwindow.cpp" line="1143"/>
-         <source>Biometric</source>
-         <translation>Biométrique</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="373"/>
-+        <location filename="../src/mainwindow.ui" line="480"/>
-         <source>use password</source>
-         <translation>Utiliser le mot de passe</translation>
-     </message>
-@@ -147,20 +147,20 @@
-         <translation type="vanished">Polkit.caller-pid:</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="334"/>
--        <location filename="../src/mainwindow.cpp" line="884"/>
-+        <location filename="../src/mainwindow.ui" line="441"/>
-+        <location filename="../src/mainwindow.cpp" line="1077"/>
-         <source>Cancel</source>
-         <translation>Annuler</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="353"/>
--        <location filename="../src/mainwindow.cpp" line="880"/>
-+        <location filename="../src/mainwindow.ui" line="460"/>
-+        <location filename="../src/mainwindow.cpp" line="1073"/>
-         <source>Authenticate</source>
-         <translation>Authentifier</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="886"/>
--        <location filename="../src/mainwindow.cpp" line="991"/>
-+        <location filename="../src/mainwindow.cpp" line="1079"/>
-+        <location filename="../src/mainwindow.cpp" line="1183"/>
-         <source>Use password</source>
-         <translation>Utiliser le mot de passe</translation>
-     </message>
-@@ -185,30 +185,30 @@
-         <translation type="vanished">认证中,请稍等...</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1026"/>
--        <location filename="../src/mainwindow.cpp" line="1093"/>
--        <location filename="../src/mainwindow.cpp" line="1094"/>
-+        <location filename="../src/mainwindow.cpp" line="1219"/>
-+        <location filename="../src/mainwindow.cpp" line="1292"/>
-+        <location filename="../src/mainwindow.cpp" line="1293"/>
-         <source>Please try again in %1 minutes.</source>
-         <translation>Veuillez réessayer dans %1 minutes.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1036"/>
--        <location filename="../src/mainwindow.cpp" line="1103"/>
--        <location filename="../src/mainwindow.cpp" line="1104"/>
-+        <location filename="../src/mainwindow.cpp" line="1230"/>
-+        <location filename="../src/mainwindow.cpp" line="1302"/>
-+        <location filename="../src/mainwindow.cpp" line="1303"/>
-         <source>Please try again in %1 seconds.</source>
-         <translation>Veuillez réessayer dans %1 secondes.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1045"/>
--        <location filename="../src/mainwindow.cpp" line="1046"/>
--        <location filename="../src/mainwindow.cpp" line="1112"/>
--        <location filename="../src/mainwindow.cpp" line="1113"/>
-+        <location filename="../src/mainwindow.cpp" line="1240"/>
-+        <location filename="../src/mainwindow.cpp" line="1241"/>
-+        <location filename="../src/mainwindow.cpp" line="1311"/>
-+        <location filename="../src/mainwindow.cpp" line="1312"/>
-         <source>Account locked permanently.</source>
-         <translation>Compte verrouillé définitivement.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="675"/>
--        <location filename="../src/mainwindow.cpp" line="676"/>
-+        <location filename="../src/mainwindow.cpp" line="834"/>
-+        <location filename="../src/mainwindow.cpp" line="835"/>
-         <source>Password cannot be empty</source>
-         <translation>Le mot de passe ne peut pas être vide</translation>
-     </message>
-@@ -221,7 +221,8 @@
-         <translation type="vanished">无法验证%1,请输入密码.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="175"/>
-+        <location filename="../src/mainwindow.cpp" line="242"/>
-+        <location filename="../src/mainwindow.cpp" line="246"/>
-         <source>Failed to verify %1, you still have %2 verification opportunities</source>
-         <translation>Échec de la vérification %1, vous avez encore %2 possibilités de vérification</translation>
-     </message>
-@@ -230,42 +231,42 @@
-         <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="578"/>
-+        <location filename="../src/mainwindow.cpp" line="731"/>
-         <source>Password: </source>
-         <translation>Mot de passe: </translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="261"/>
-+        <location filename="../src/mainwindow.cpp" line="335"/>
-         <source>Please enter your password or enroll your fingerprint </source>
-         <translation>Veuillez saisir votre mot de passe ou enregistrer votre empreinte digitale </translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="187"/>
-+        <location filename="../src/mainwindow.cpp" line="259"/>
-         <source>Abnormal network</source>
-         <translation>Réseau anormal</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="511"/>
-+        <location filename="../src/mainwindow.cpp" line="665"/>
-         <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
-         <translation>Cette opération nécessite l’autorisation de l’administrateur. Veuillez saisir votre mot de passe pour autoriser cette opération.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="580"/>
-+        <location filename="../src/mainwindow.cpp" line="733"/>
-         <source>_Password: </source>
-         <translation>_Mot de passe: </translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="582"/>
-+        <location filename="../src/mainwindow.cpp" line="735"/>
-         <source>_Password:</source>
-         <translation>_Mot de passe:</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="691"/>
-+        <location filename="../src/mainwindow.cpp" line="850"/>
-         <source>Authentication failed, please try again.</source>
-         <translation>L’authentification a échoué, veuillez réessayer.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="623"/>
-+        <location filename="../src/mainwindow.cpp" line="779"/>
-         <source>days left</source>
-         <translation>jours restants</translation>
-     </message>
-@@ -278,14 +279,16 @@
-         <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="164"/>
--        <location filename="../src/mainwindow.cpp" line="1176"/>
-+        <location filename="../src/mainwindow.cpp" line="226"/>
-+        <location filename="../src/mainwindow.cpp" line="1415"/>
-+        <location filename="../src/mainwindow.cpp" line="1417"/>
-         <source>Failed to verify %1, please enter password to unlock</source>
-         <translation>Impossible de vérifier %1, veuillez entrer le mot de passe pour déverrouiller</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="168"/>
--        <location filename="../src/mainwindow.cpp" line="1178"/>
-+        <location filename="../src/mainwindow.cpp" line="231"/>
-+        <location filename="../src/mainwindow.cpp" line="233"/>
-+        <location filename="../src/mainwindow.cpp" line="1419"/>
-         <source>Unable to verify %1, please enter password to unlock</source>
-         <translation>Impossible de vérifier %1, veuillez entrer le mot de passe pour déverrouiller</translation>
-     </message>
-@@ -294,57 +297,74 @@
-         <translation type="vanished">网络异常</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="517"/>
-+        <location filename="../src/mainwindow.cpp" line="671"/>
-         <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
-         <translation>Un programme tente d’effectuer une action qui nécessite des privilèges. Il nécessite une autorisation pour effectuer l’action.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="576"/>
-+        <location filename="../src/mainwindow.cpp" line="108"/>
-+        <location filename="../src/mainwindow.cpp" line="729"/>
-         <source>Input Password</source>
-         <translation>Mot de passe d’entrée</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="627"/>
-+        <location filename="../src/mainwindow.cpp" line="105"/>
-+        <source>Insert the ukey into the USB port</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="107"/>
-+        <source>Enter the ukey password</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="783"/>
-         <source>hours left</source>
-         <translation>Heures restantes</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="631"/>
-+        <location filename="../src/mainwindow.cpp" line="787"/>
-         <source>minutes left</source>
-         <translation>minutes restantes</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="635"/>
-+        <location filename="../src/mainwindow.cpp" line="791"/>
-         <source>seconds left</source>
-         <translation>secondes restantes</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1193"/>
-+        <location filename="../src/mainwindow.cpp" line="880"/>
-+        <location filename="../src/mainwindow.cpp" line="888"/>
-+        <source>Input your password to authentication</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1434"/>
-         <source>Verify face recognition or enter password to unlock</source>
-         <translation>Vérifier la reconnaissance faciale ou saisir le mot de passe pour déverrouiller</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1198"/>
-+        <location filename="../src/mainwindow.cpp" line="1439"/>
-         <source>Press fingerprint or enter password to unlock</source>
-         <translation>Appuyez sur l’empreinte digitale ou entrez le mot de passe pour déverrouiller</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1203"/>
-+        <location filename="../src/mainwindow.cpp" line="1444"/>
-         <source>Verify voiceprint or enter password to unlock</source>
-         <translation>Vérifier l’empreinte vocale ou saisir le mot de passe pour déverrouiller</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1208"/>
-+        <location filename="../src/mainwindow.cpp" line="1449"/>
-         <source>Verify finger vein or enter password to unlock</source>
-         <translation>Vérifiez la veine du doigt ou entrez le mot de passe pour déverrouiller</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1213"/>
-+        <location filename="../src/mainwindow.cpp" line="1454"/>
-         <source>Verify iris or enter password to unlock</source>
-         <translation>Vérifiez l’iris ou entrez le mot de passe pour déverrouiller</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1218"/>
-+        <location filename="../src/mainwindow.cpp" line="1459"/>
-         <source>Use the bound wechat scanning code or enter the password to unlock</source>
-         <translation>Utilisez le code d’analyse wechat lié ou entrez le mot de passe pour déverrouiller</translation>
-     </message>
-@@ -353,10 +373,10 @@
-         <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="623"/>
--        <location filename="../src/mainwindow.cpp" line="627"/>
--        <location filename="../src/mainwindow.cpp" line="631"/>
--        <location filename="../src/mainwindow.cpp" line="635"/>
-+        <location filename="../src/mainwindow.cpp" line="779"/>
-+        <location filename="../src/mainwindow.cpp" line="783"/>
-+        <location filename="../src/mainwindow.cpp" line="787"/>
-+        <location filename="../src/mainwindow.cpp" line="791"/>
-         <source>Account locked,</source>
-         <translation>Compte verrouillé,</translation>
-     </message>
-@@ -373,12 +393,12 @@
-         <translation>Un autre client est déjà en train de s’authentifier, veuillez réessayer plus tard.</translation>
-     </message>
-     <message>
--        <location filename="../src/PolkitListener.cpp" line="257"/>
-+        <location filename="../src/PolkitListener.cpp" line="265"/>
-         <source>Authentication failure, please try again.</source>
-         <translation>Échec de l’authentification, veuillez réessayer.</translation>
-     </message>
-     <message>
--        <location filename="../src/PolkitListener.cpp" line="264"/>
-+        <location filename="../src/PolkitListener.cpp" line="272"/>
-         <source>Password input error!</source>
-         <translation>Erreur de saisie du mot de passe !</translation>
-     </message>
-diff --git a/polkit-agent/i18n_ts/kk.ts b/polkit-agent/i18n_ts/kk.ts
-index f2eb55e..f3a13b3 100644
---- a/polkit-agent/i18n_ts/kk.ts
-+++ b/polkit-agent/i18n_ts/kk.ts
-@@ -65,7 +65,7 @@
- <context>
-     <name>MainWindow</name>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="65"/>
-+        <location filename="../src/mainwindow.cpp" line="66"/>
-         <source>Authentication</source>
-         <translation>Аутентификация</translation>
-     </message>
-@@ -91,14 +91,14 @@
-         <translation type="vanished">密码</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="302"/>
--        <location filename="../src/mainwindow.cpp" line="882"/>
--        <location filename="../src/mainwindow.cpp" line="948"/>
-+        <location filename="../src/mainwindow.ui" line="409"/>
-+        <location filename="../src/mainwindow.cpp" line="1075"/>
-+        <location filename="../src/mainwindow.cpp" line="1143"/>
-         <source>Biometric</source>
-         <translation>Биометриялық</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="373"/>
-+        <location filename="../src/mainwindow.ui" line="480"/>
-         <source>use password</source>
-         <translation>құпия сөзді пайдалану</translation>
-     </message>
-@@ -147,20 +147,20 @@
-         <translation type="vanished">Polkit.caller-pid:</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="334"/>
--        <location filename="../src/mainwindow.cpp" line="884"/>
-+        <location filename="../src/mainwindow.ui" line="441"/>
-+        <location filename="../src/mainwindow.cpp" line="1077"/>
-         <source>Cancel</source>
-         <translation>Болдырмау</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="353"/>
--        <location filename="../src/mainwindow.cpp" line="880"/>
-+        <location filename="../src/mainwindow.ui" line="460"/>
-+        <location filename="../src/mainwindow.cpp" line="1073"/>
-         <source>Authenticate</source>
-         <translation>Аутентификация</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="886"/>
--        <location filename="../src/mainwindow.cpp" line="991"/>
-+        <location filename="../src/mainwindow.cpp" line="1079"/>
-+        <location filename="../src/mainwindow.cpp" line="1183"/>
-         <source>Use password</source>
-         <translation>Құпиясөзді пайдалану</translation>
-     </message>
-@@ -185,30 +185,30 @@
-         <translation type="vanished">认证中,请稍等...</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1026"/>
--        <location filename="../src/mainwindow.cpp" line="1093"/>
--        <location filename="../src/mainwindow.cpp" line="1094"/>
-+        <location filename="../src/mainwindow.cpp" line="1219"/>
-+        <location filename="../src/mainwindow.cpp" line="1292"/>
-+        <location filename="../src/mainwindow.cpp" line="1293"/>
-         <source>Please try again in %1 minutes.</source>
-         <translation>% 1 минутта қайталап көріңіз.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1036"/>
--        <location filename="../src/mainwindow.cpp" line="1103"/>
--        <location filename="../src/mainwindow.cpp" line="1104"/>
-+        <location filename="../src/mainwindow.cpp" line="1230"/>
-+        <location filename="../src/mainwindow.cpp" line="1302"/>
-+        <location filename="../src/mainwindow.cpp" line="1303"/>
-         <source>Please try again in %1 seconds.</source>
-         <translation>% 1 секундта қайталап көріңіз.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1045"/>
--        <location filename="../src/mainwindow.cpp" line="1046"/>
--        <location filename="../src/mainwindow.cpp" line="1112"/>
--        <location filename="../src/mainwindow.cpp" line="1113"/>
-+        <location filename="../src/mainwindow.cpp" line="1240"/>
-+        <location filename="../src/mainwindow.cpp" line="1241"/>
-+        <location filename="../src/mainwindow.cpp" line="1311"/>
-+        <location filename="../src/mainwindow.cpp" line="1312"/>
-         <source>Account locked permanently.</source>
-         <translation>Тіркелгі біржолата құлыпталады.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="675"/>
--        <location filename="../src/mainwindow.cpp" line="676"/>
-+        <location filename="../src/mainwindow.cpp" line="834"/>
-+        <location filename="../src/mainwindow.cpp" line="835"/>
-         <source>Password cannot be empty</source>
-         <translation>Құпия сөз бос болмады</translation>
-     </message>
-@@ -221,7 +221,8 @@
-         <translation type="vanished">无法验证%1,请输入密码.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="175"/>
-+        <location filename="../src/mainwindow.cpp" line="242"/>
-+        <location filename="../src/mainwindow.cpp" line="246"/>
-         <source>Failed to verify %1, you still have %2 verification opportunities</source>
-         <translation>% 1 дегенді тексеру мүмкін болмады, сізде әлі де% 2 тексеру мүмкіндіктері бар</translation>
-     </message>
-@@ -230,42 +231,42 @@
-         <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="578"/>
-+        <location filename="../src/mainwindow.cpp" line="731"/>
-         <source>Password: </source>
-         <translation>Құпия сөз: </translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="261"/>
-+        <location filename="../src/mainwindow.cpp" line="335"/>
-         <source>Please enter your password or enroll your fingerprint </source>
-         <translation>Құпия сөзді енгізіңіз немесе саусақ ізін жазыңыз </translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="187"/>
-+        <location filename="../src/mainwindow.cpp" line="259"/>
-         <source>Abnormal network</source>
-         <translation>Аномальды желі</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="511"/>
-+        <location filename="../src/mainwindow.cpp" line="665"/>
-         <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
-         <translation>Бұл операция әкімшінің рұқсатын талап етеді. Осы операцияға рұқсат ету үшін құпия сөзіңізді енгізіңіз.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="580"/>
-+        <location filename="../src/mainwindow.cpp" line="733"/>
-         <source>_Password: </source>
-         <translation>_Password: </translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="582"/>
-+        <location filename="../src/mainwindow.cpp" line="735"/>
-         <source>_Password:</source>
-         <translation>_Password:</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="691"/>
-+        <location filename="../src/mainwindow.cpp" line="850"/>
-         <source>Authentication failed, please try again.</source>
-         <translation>Аутентификация сәтсіз аяқталды, қайталап көріңіз.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="623"/>
-+        <location filename="../src/mainwindow.cpp" line="779"/>
-         <source>days left</source>
-         <translation>қалған күндер</translation>
-     </message>
-@@ -278,14 +279,16 @@
-         <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="164"/>
--        <location filename="../src/mainwindow.cpp" line="1176"/>
-+        <location filename="../src/mainwindow.cpp" line="226"/>
-+        <location filename="../src/mainwindow.cpp" line="1415"/>
-+        <location filename="../src/mainwindow.cpp" line="1417"/>
-         <source>Failed to verify %1, please enter password to unlock</source>
-         <translation>% 1 дегенді тексеру мүмкін болмады, құлыптан босату үшін құпия сөзді енгізіңіз</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="168"/>
--        <location filename="../src/mainwindow.cpp" line="1178"/>
-+        <location filename="../src/mainwindow.cpp" line="231"/>
-+        <location filename="../src/mainwindow.cpp" line="233"/>
-+        <location filename="../src/mainwindow.cpp" line="1419"/>
-         <source>Unable to verify %1, please enter password to unlock</source>
-         <translation>% 1 дегенді тексеру мүмкін болмады, құлыптан босату үшін құпия сөзді енгізіңіз</translation>
-     </message>
-@@ -294,57 +297,74 @@
-         <translation type="vanished">网络异常</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="517"/>
-+        <location filename="../src/mainwindow.cpp" line="671"/>
-         <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
-         <translation>Бағдарлама артықшылықтарды талап ететін әрекетті орындауға талпыныс жасайды. Іс-әрекетті орындау үшін рұқсат талап етуге болады.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="576"/>
-+        <location filename="../src/mainwindow.cpp" line="108"/>
-+        <location filename="../src/mainwindow.cpp" line="729"/>
-         <source>Input Password</source>
-         <translation>Құпиясөзді енгізу</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="627"/>
-+        <location filename="../src/mainwindow.cpp" line="105"/>
-+        <source>Insert the ukey into the USB port</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="107"/>
-+        <source>Enter the ukey password</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="783"/>
-         <source>hours left</source>
-         <translation>сағаттар қалды</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="631"/>
-+        <location filename="../src/mainwindow.cpp" line="787"/>
-         <source>minutes left</source>
-         <translation>минуттар қалды</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="635"/>
-+        <location filename="../src/mainwindow.cpp" line="791"/>
-         <source>seconds left</source>
-         <translation>секундтар қалды</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1193"/>
-+        <location filename="../src/mainwindow.cpp" line="880"/>
-+        <location filename="../src/mainwindow.cpp" line="888"/>
-+        <source>Input your password to authentication</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1434"/>
-         <source>Verify face recognition or enter password to unlock</source>
-         <translation>Бет тануды тексеру немесе құлыптан босату үшін құпия сөзді енгізу</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1198"/>
-+        <location filename="../src/mainwindow.cpp" line="1439"/>
-         <source>Press fingerprint or enter password to unlock</source>
-         <translation>Құлыптан босату үшін дактилоскопияны басу немесе құпия сөзді енгізу</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1203"/>
-+        <location filename="../src/mainwindow.cpp" line="1444"/>
-         <source>Verify voiceprint or enter password to unlock</source>
-         <translation>Құлыптан босату үшін дауыстық ізді тексеру немесе құпия сөзді енгізу</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1208"/>
-+        <location filename="../src/mainwindow.cpp" line="1449"/>
-         <source>Verify finger vein or enter password to unlock</source>
-         <translation>Құлыптан босату үшін саусақ көктамырын тексеру немесе құпия сөзді енгізу</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1213"/>
-+        <location filename="../src/mainwindow.cpp" line="1454"/>
-         <source>Verify iris or enter password to unlock</source>
-         <translation>Құлыптан босату үшін IRIS тексеру немесе құпиясөзді енгізу</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1218"/>
-+        <location filename="../src/mainwindow.cpp" line="1459"/>
-         <source>Use the bound wechat scanning code or enter the password to unlock</source>
-         <translation>Байланыстыратын wechat сканерлеу кодын пайдаланыңыз немесе құлыптан босату үшін құпия сөзді енгізіңіз</translation>
-     </message>
-@@ -353,10 +373,10 @@
-         <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="623"/>
--        <location filename="../src/mainwindow.cpp" line="627"/>
--        <location filename="../src/mainwindow.cpp" line="631"/>
--        <location filename="../src/mainwindow.cpp" line="635"/>
-+        <location filename="../src/mainwindow.cpp" line="779"/>
-+        <location filename="../src/mainwindow.cpp" line="783"/>
-+        <location filename="../src/mainwindow.cpp" line="787"/>
-+        <location filename="../src/mainwindow.cpp" line="791"/>
-         <source>Account locked,</source>
-         <translation>Тіркелгі құлыпталған,</translation>
-     </message>
-@@ -373,12 +393,12 @@
-         <translation>Басқа клиент қазірдің өзінде аутентификацияда, кейінірек қайталап көріңіз.</translation>
-     </message>
-     <message>
--        <location filename="../src/PolkitListener.cpp" line="257"/>
-+        <location filename="../src/PolkitListener.cpp" line="265"/>
-         <source>Authentication failure, please try again.</source>
-         <translation>Аутентификация сәтсіздігі, қайталап көріңіз.</translation>
-     </message>
-     <message>
--        <location filename="../src/PolkitListener.cpp" line="264"/>
-+        <location filename="../src/PolkitListener.cpp" line="272"/>
-         <source>Password input error!</source>
-         <translation>Құпия сөзді енгізу қатесі!</translation>
-     </message>
-diff --git a/polkit-agent/i18n_ts/ky.ts b/polkit-agent/i18n_ts/ky.ts
-index a761425..7841ff1 100644
---- a/polkit-agent/i18n_ts/ky.ts
-+++ b/polkit-agent/i18n_ts/ky.ts
-@@ -65,7 +65,7 @@
- <context>
-     <name>MainWindow</name>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="65"/>
-+        <location filename="../src/mainwindow.cpp" line="66"/>
-         <source>Authentication</source>
-         <translation>Аутентификация</translation>
-     </message>
-@@ -91,14 +91,14 @@
-         <translation type="vanished">密码</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="302"/>
--        <location filename="../src/mainwindow.cpp" line="882"/>
--        <location filename="../src/mainwindow.cpp" line="948"/>
-+        <location filename="../src/mainwindow.ui" line="409"/>
-+        <location filename="../src/mainwindow.cpp" line="1075"/>
-+        <location filename="../src/mainwindow.cpp" line="1143"/>
-         <source>Biometric</source>
-         <translation>Биометрия</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="373"/>
-+        <location filename="../src/mainwindow.ui" line="480"/>
-         <source>use password</source>
-         <translation>сырсөз колдонуу</translation>
-     </message>
-@@ -147,20 +147,20 @@
-         <translation type="vanished">Polkit.caller-pid:</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="334"/>
--        <location filename="../src/mainwindow.cpp" line="884"/>
-+        <location filename="../src/mainwindow.ui" line="441"/>
-+        <location filename="../src/mainwindow.cpp" line="1077"/>
-         <source>Cancel</source>
-         <translation>Жокко чыгаруу</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="353"/>
--        <location filename="../src/mainwindow.cpp" line="880"/>
-+        <location filename="../src/mainwindow.ui" line="460"/>
-+        <location filename="../src/mainwindow.cpp" line="1073"/>
-         <source>Authenticate</source>
-         <translation>Аутентификация</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="886"/>
--        <location filename="../src/mainwindow.cpp" line="991"/>
-+        <location filename="../src/mainwindow.cpp" line="1079"/>
-+        <location filename="../src/mainwindow.cpp" line="1183"/>
-         <source>Use password</source>
-         <translation>Сырсөз колдонуу</translation>
-     </message>
-@@ -185,30 +185,30 @@
-         <translation type="vanished">认证中,请稍等...</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1026"/>
--        <location filename="../src/mainwindow.cpp" line="1093"/>
--        <location filename="../src/mainwindow.cpp" line="1094"/>
-+        <location filename="../src/mainwindow.cpp" line="1219"/>
-+        <location filename="../src/mainwindow.cpp" line="1292"/>
-+        <location filename="../src/mainwindow.cpp" line="1293"/>
-         <source>Please try again in %1 minutes.</source>
-         <translation>%1 мүнөттө кайра аракет кылыңыз.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1036"/>
--        <location filename="../src/mainwindow.cpp" line="1103"/>
--        <location filename="../src/mainwindow.cpp" line="1104"/>
-+        <location filename="../src/mainwindow.cpp" line="1230"/>
-+        <location filename="../src/mainwindow.cpp" line="1302"/>
-+        <location filename="../src/mainwindow.cpp" line="1303"/>
-         <source>Please try again in %1 seconds.</source>
-         <translation>%1 секунданын ичинде кайра аракет кылыңыз.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1045"/>
--        <location filename="../src/mainwindow.cpp" line="1046"/>
--        <location filename="../src/mainwindow.cpp" line="1112"/>
--        <location filename="../src/mainwindow.cpp" line="1113"/>
-+        <location filename="../src/mainwindow.cpp" line="1240"/>
-+        <location filename="../src/mainwindow.cpp" line="1241"/>
-+        <location filename="../src/mainwindow.cpp" line="1311"/>
-+        <location filename="../src/mainwindow.cpp" line="1312"/>
-         <source>Account locked permanently.</source>
-         <translation>Эсеп биротоло кулпуланган.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="675"/>
--        <location filename="../src/mainwindow.cpp" line="676"/>
-+        <location filename="../src/mainwindow.cpp" line="834"/>
-+        <location filename="../src/mainwindow.cpp" line="835"/>
-         <source>Password cannot be empty</source>
-         <translation>Сырсөз бош болушу мүмкүн эмес</translation>
-     </message>
-@@ -221,7 +221,8 @@
-         <translation type="vanished">无法验证%1,请输入密码.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="175"/>
-+        <location filename="../src/mainwindow.cpp" line="242"/>
-+        <location filename="../src/mainwindow.cpp" line="246"/>
-         <source>Failed to verify %1, you still have %2 verification opportunities</source>
-         <translation>%1 текшерүүгө болбоду, сизде дагы эле %2 текшерүү мүмкүнчүлүктөрү бар</translation>
-     </message>
-@@ -230,42 +231,42 @@
-         <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="578"/>
-+        <location filename="../src/mainwindow.cpp" line="731"/>
-         <source>Password: </source>
-         <translation>Сырсөз: </translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="261"/>
-+        <location filename="../src/mainwindow.cpp" line="335"/>
-         <source>Please enter your password or enroll your fingerprint </source>
-         <translation>Сырсөзүңөрдү киргизиңиз же манжа изин жазыңыз </translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="187"/>
-+        <location filename="../src/mainwindow.cpp" line="259"/>
-         <source>Abnormal network</source>
-         <translation>Аномалдуу тармак</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="511"/>
-+        <location filename="../src/mainwindow.cpp" line="665"/>
-         <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
-         <translation>Бул операция администратордун уруксатын талап кылат. Бул операцияга уруксат берүү үчүн сырсөздү киргизиңиз.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="580"/>
-+        <location filename="../src/mainwindow.cpp" line="733"/>
-         <source>_Password: </source>
-         <translation>_Password: </translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="582"/>
-+        <location filename="../src/mainwindow.cpp" line="735"/>
-         <source>_Password:</source>
-         <translation>_Password:</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="691"/>
-+        <location filename="../src/mainwindow.cpp" line="850"/>
-         <source>Authentication failed, please try again.</source>
-         <translation>Аутентификация ишке ашпады, кайра аракет кылыңыз.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="623"/>
-+        <location filename="../src/mainwindow.cpp" line="779"/>
-         <source>days left</source>
-         <translation>калган күндөр</translation>
-     </message>
-@@ -278,14 +279,16 @@
-         <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="164"/>
--        <location filename="../src/mainwindow.cpp" line="1176"/>
-+        <location filename="../src/mainwindow.cpp" line="226"/>
-+        <location filename="../src/mainwindow.cpp" line="1415"/>
-+        <location filename="../src/mainwindow.cpp" line="1417"/>
-         <source>Failed to verify %1, please enter password to unlock</source>
-         <translation>%1 текшерүүгө болбоду, кулпусун ачуу үчүн сырсөздү киргизиңиз</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="168"/>
--        <location filename="../src/mainwindow.cpp" line="1178"/>
-+        <location filename="../src/mainwindow.cpp" line="231"/>
-+        <location filename="../src/mainwindow.cpp" line="233"/>
-+        <location filename="../src/mainwindow.cpp" line="1419"/>
-         <source>Unable to verify %1, please enter password to unlock</source>
-         <translation>%1 текшерүүгө болбоду, кулпусун ачуу үчүн сырсөздү киргизиңиз</translation>
-     </message>
-@@ -294,57 +297,74 @@
-         <translation type="vanished">网络异常</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="517"/>
-+        <location filename="../src/mainwindow.cpp" line="671"/>
-         <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
-         <translation>Программа артыкчылыктарды талап кылган акцияны аткарууга аракет кылат. Акцияны аткарууга уруксат талап кылынат.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="576"/>
-+        <location filename="../src/mainwindow.cpp" line="108"/>
-+        <location filename="../src/mainwindow.cpp" line="729"/>
-         <source>Input Password</source>
-         <translation>Сырсөз киргизүү</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="627"/>
-+        <location filename="../src/mainwindow.cpp" line="105"/>
-+        <source>Insert the ukey into the USB port</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="107"/>
-+        <source>Enter the ukey password</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="783"/>
-         <source>hours left</source>
-         <translation>саат калды</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="631"/>
-+        <location filename="../src/mainwindow.cpp" line="787"/>
-         <source>minutes left</source>
-         <translation>мүнөт калды</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="635"/>
-+        <location filename="../src/mainwindow.cpp" line="791"/>
-         <source>seconds left</source>
-         <translation>секуд калды</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1193"/>
-+        <location filename="../src/mainwindow.cpp" line="880"/>
-+        <location filename="../src/mainwindow.cpp" line="888"/>
-+        <source>Input your password to authentication</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1434"/>
-         <source>Verify face recognition or enter password to unlock</source>
-         <translation>Беттин таанылышын текшерүү же кулпуну ачуу үчүн сырсөз киргизүү</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1198"/>
-+        <location filename="../src/mainwindow.cpp" line="1439"/>
-         <source>Press fingerprint or enter password to unlock</source>
-         <translation>Манжа изин басуу же кулпуну ачуу үчүн сырсөз киргизүү</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1203"/>
-+        <location filename="../src/mainwindow.cpp" line="1444"/>
-         <source>Verify voiceprint or enter password to unlock</source>
-         <translation>Үн изин текшерүү же сырсөз киргизүү</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1208"/>
-+        <location filename="../src/mainwindow.cpp" line="1449"/>
-         <source>Verify finger vein or enter password to unlock</source>
-         <translation>Манжа тамырын текшерүү же кулпуну ачуу үчүн сырсөз киргизүү</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1213"/>
-+        <location filename="../src/mainwindow.cpp" line="1454"/>
-         <source>Verify iris or enter password to unlock</source>
-         <translation>Ирис текшерүү же кулпусун ачуу үчүн сырсөз киргизүү</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1218"/>
-+        <location filename="../src/mainwindow.cpp" line="1459"/>
-         <source>Use the bound wechat scanning code or enter the password to unlock</source>
-         <translation>Чектелген вечат сканерлеу кодын колдонуңуз же сырсөздү ачуу үчүн киргизиңиз</translation>
-     </message>
-@@ -353,10 +373,10 @@
-         <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="623"/>
--        <location filename="../src/mainwindow.cpp" line="627"/>
--        <location filename="../src/mainwindow.cpp" line="631"/>
--        <location filename="../src/mainwindow.cpp" line="635"/>
-+        <location filename="../src/mainwindow.cpp" line="779"/>
-+        <location filename="../src/mainwindow.cpp" line="783"/>
-+        <location filename="../src/mainwindow.cpp" line="787"/>
-+        <location filename="../src/mainwindow.cpp" line="791"/>
-         <source>Account locked,</source>
-         <translation>Эсеп кулпуланган,</translation>
-     </message>
-@@ -373,12 +393,12 @@
-         <translation>Дагы бир кардар буга чейин аутентификацияланган, кийин кайра аракет кылыңыз.</translation>
-     </message>
-     <message>
--        <location filename="../src/PolkitListener.cpp" line="257"/>
-+        <location filename="../src/PolkitListener.cpp" line="265"/>
-         <source>Authentication failure, please try again.</source>
-         <translation>Аутентификациянын жетишсиздиги, сураныч, кайрадан аракет кылыңыз.</translation>
-     </message>
-     <message>
--        <location filename="../src/PolkitListener.cpp" line="264"/>
-+        <location filename="../src/PolkitListener.cpp" line="272"/>
-         <source>Password input error!</source>
-         <translation>Сырсөз киргизүү катасы!</translation>
-     </message>
-diff --git a/polkit-agent/i18n_ts/mn.ts b/polkit-agent/i18n_ts/mn.ts
-index ddf8371..4f8ed3c 100644
---- a/polkit-agent/i18n_ts/mn.ts
-+++ b/polkit-agent/i18n_ts/mn.ts
-@@ -65,7 +65,7 @@
- <context>
-     <name>MainWindow</name>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="65"/>
-+        <location filename="../src/mainwindow.cpp" line="66"/>
-         <source>Authentication</source>
-         <translation>ᠡᠷᠬᠡ ᠤᠯᠭᠤᠬᠤ</translation>
-     </message>
-@@ -93,7 +93,7 @@
-     <message>
-         <location filename="../src/mainwindow.ui" line="409"/>
-         <location filename="../src/mainwindow.cpp" line="1075"/>
--        <location filename="../src/mainwindow.cpp" line="1146"/>
-+        <location filename="../src/mainwindow.cpp" line="1143"/>
-         <source>Biometric</source>
-         <translation>ᠠᠮᠢᠳᠤ ᠪᠤᠳᠠᠰ ᠢ᠋ ᠬᠡᠷᠡᠭᠯᠡᠵᠤ ᠢᠯᠭᠠᠨ ᠳᠠᠨᠢᠬᠤ</translation>
-     </message>
-@@ -160,7 +160,7 @@
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="1079"/>
--        <location filename="../src/mainwindow.cpp" line="1189"/>
-+        <location filename="../src/mainwindow.cpp" line="1183"/>
-         <source>Use password</source>
-         <translation>ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠭᠰᠠᠨ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠢ᠋ ᠬᠡᠷᠡᠭᠯᠡᠬᠦ</translation>
-     </message>
-@@ -185,24 +185,24 @@
-         <translation type="vanished">认证中,请稍等...</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1225"/>
--        <location filename="../src/mainwindow.cpp" line="1298"/>
--        <location filename="../src/mainwindow.cpp" line="1299"/>
-+        <location filename="../src/mainwindow.cpp" line="1219"/>
-+        <location filename="../src/mainwindow.cpp" line="1292"/>
-+        <location filename="../src/mainwindow.cpp" line="1293"/>
-         <source>Please try again in %1 minutes.</source>
-         <translation>%1 ᠮᠢᠨᠦ᠋ᠲ᠎ᠦᠨ ᠳᠠᠷᠠᠭ᠎ᠠ ᠳᠠᠬᠢᠵᠤ ᠳᠤᠷᠱᠢᠭᠠᠷᠠᠢ.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1236"/>
--        <location filename="../src/mainwindow.cpp" line="1308"/>
--        <location filename="../src/mainwindow.cpp" line="1309"/>
-+        <location filename="../src/mainwindow.cpp" line="1230"/>
-+        <location filename="../src/mainwindow.cpp" line="1302"/>
-+        <location filename="../src/mainwindow.cpp" line="1303"/>
-         <source>Please try again in %1 seconds.</source>
-         <translation>%1 ᠮᠢᠨᠦ᠋ᠲ᠎ᠦᠨ ᠳᠠᠷᠠᠭ᠎ᠠ ᠳᠠᠬᠢᠵᠤ ᠳᠤᠷᠱᠢᠭᠠᠷᠠᠢ.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1246"/>
--        <location filename="../src/mainwindow.cpp" line="1247"/>
--        <location filename="../src/mainwindow.cpp" line="1317"/>
--        <location filename="../src/mainwindow.cpp" line="1318"/>
-+        <location filename="../src/mainwindow.cpp" line="1240"/>
-+        <location filename="../src/mainwindow.cpp" line="1241"/>
-+        <location filename="../src/mainwindow.cpp" line="1311"/>
-+        <location filename="../src/mainwindow.cpp" line="1312"/>
-         <source>Account locked permanently.</source>
-         <translation>ᠳᠠᠩᠰᠠ ᠨᠢᠭᠡᠨᠳᠡ ᠦᠨᠢᠳᠡ ᠤᠨᠢᠰᠤᠯᠠᠭᠳᠠᠪᠠ.</translation>
-     </message>
-@@ -280,15 +280,15 @@
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="226"/>
--        <location filename="../src/mainwindow.cpp" line="1421"/>
--        <location filename="../src/mainwindow.cpp" line="1423"/>
-+        <location filename="../src/mainwindow.cpp" line="1415"/>
-+        <location filename="../src/mainwindow.cpp" line="1417"/>
-         <source>Failed to verify %1, please enter password to unlock</source>
-         <translation>%1᠎ᠶᠢ/᠎ᠢ ᠪᠠᠳᠤᠯᠭᠠᠵᠢᠭᠤᠯᠬᠤ ᠠᠷᠭ᠎ᠠ ᠦᠬᠡᠢ ᠂ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="231"/>
-         <location filename="../src/mainwindow.cpp" line="233"/>
--        <location filename="../src/mainwindow.cpp" line="1425"/>
-+        <location filename="../src/mainwindow.cpp" line="1419"/>
-         <source>Unable to verify %1, please enter password to unlock</source>
-         <translation>%1᠎ᠶᠢ/᠎ᠢ ᠪᠠᠳᠤᠯᠭᠠᠵᠢᠭᠤᠯᠬᠤ ᠠᠷᠭ᠎ᠠ ᠦᠬᠡᠢ ᠂ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
-     </message>
-@@ -339,32 +339,32 @@
-         <translation>ᠨᠢᠭᠤᠴᠠ ᠨᠣᠮᠧᠷ ᠣᠷᠣᠭᠤᠯᠬᠤ ᠳᠤ ᠡᠷᠬᠡ ᠣᠯᠭᠣᠨ᠎ᠠ ᠃</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1440"/>
-+        <location filename="../src/mainwindow.cpp" line="1434"/>
-         <source>Verify face recognition or enter password to unlock</source>
-         <translation>ᠨᠢᠭᠤᠷ ᠱᠢᠷᠪᠢᠵᠤ ᠪᠠᠳᠤᠯᠭᠠᠵᠢᠭᠤᠯᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1445"/>
-+        <location filename="../src/mainwindow.cpp" line="1439"/>
-         <source>Press fingerprint or enter password to unlock</source>
-         <translation>ᠬᠤᠷᠤᠭᠤᠨ᠎ᠤ ᠤᠷᠤᠮ ᠳᠠᠷᠤᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1450"/>
-+        <location filename="../src/mainwindow.cpp" line="1444"/>
-         <source>Verify voiceprint or enter password to unlock</source>
-         <translation>ᠳᠠᠭᠤ᠎ᠪᠠᠷ ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1455"/>
-+        <location filename="../src/mainwindow.cpp" line="1449"/>
-         <source>Verify finger vein or enter password to unlock</source>
-         <translation>ᠬᠤᠷᠤᠭᠤᠨ᠎ᠤ ᠨᠠᠮᠵᠢᠭᠤᠨ ᠰᠤᠳᠠᠯ᠎ᠢᠶᠠᠷ ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1460"/>
-+        <location filename="../src/mainwindow.cpp" line="1454"/>
-         <source>Verify iris or enter password to unlock</source>
-         <translation>ᠰᠤᠯᠤᠩᠭ᠎ᠠ ᠪᠦᠷᠬᠦᠪᠴᠢ᠎ᠶᠢ ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1465"/>
-+        <location filename="../src/mainwindow.cpp" line="1459"/>
-         <source>Use the bound wechat scanning code or enter the password to unlock</source>
-         <translation>ᠤᠶᠠᠭᠰᠠᠨ ᠸᠢᠴᠠᠲ᠎ᠢᠶᠠᠷ ᠺᠤᠳ᠋ ᠱᠢᠷᠪᠢᠬᠦ᠌ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
-     </message>
-@@ -393,12 +393,12 @@
-         <translation>ᠦᠬᠡᠷ᠎ᠡ ᠨᠢᠭᠡ ᠬᠡᠷᠡᠭᠯᠡᠭᠴᠢ ᠵᠢᠨ ᠦᠵᠦᠬᠦᠷᠯᠢᠭ ᠢ᠋ ᠶᠠᠭ ᠨᠤᠳᠠᠯᠠᠵᠤ ᠪᠠᠢᠨ᠎ᠠ᠂ ᠤᠳᠠᠰᠬᠢᠭᠠᠳ ᠳᠠᠬᠢᠨ ᠳᠤᠷᠰᠢᠭᠠᠷᠠᠢ.</translation>
-     </message>
-     <message>
--        <location filename="../src/PolkitListener.cpp" line="261"/>
-+        <location filename="../src/PolkitListener.cpp" line="265"/>
-         <source>Authentication failure, please try again.</source>
-         <translation>ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠵᠤ ᠴᠢᠳᠠᠭᠰᠠᠨ ᠦᠬᠡᠢ᠂ ᠳᠠᠬᠢᠵᠤ ᠳᠤᠷᠰᠢᠭᠠᠷᠠᠢ.</translation>
-     </message>
-     <message>
--        <location filename="../src/PolkitListener.cpp" line="268"/>
-+        <location filename="../src/PolkitListener.cpp" line="272"/>
-         <source>Password input error!</source>
-         <translation>ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠢ᠋ ᠪᠤᠷᠤᠭᠤ ᠤᠷᠤᠭᠤᠯᠪᠠ!</translation>
-     </message>
-diff --git a/polkit-agent/i18n_ts/pt.ts b/polkit-agent/i18n_ts/pt.ts
-index b24dbb2..155dec7 100644
---- a/polkit-agent/i18n_ts/pt.ts
-+++ b/polkit-agent/i18n_ts/pt.ts
-@@ -185,6 +185,18 @@
-         <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
-         <translation type="unfinished"></translation>
-     </message>
-+    <message>
-+        <source>Insert the ukey into the USB port</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>Enter the ukey password</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>Input your password to authentication</source>
-+        <translation type="unfinished"></translation>
-+    </message>
- </context>
- <context>
-     <name>PolkitListener</name>
-diff --git a/polkit-agent/i18n_ts/ru.ts b/polkit-agent/i18n_ts/ru.ts
-index 6ceb7d7..c75c155 100644
---- a/polkit-agent/i18n_ts/ru.ts
-+++ b/polkit-agent/i18n_ts/ru.ts
-@@ -185,6 +185,18 @@
-         <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
-         <translation type="unfinished"></translation>
-     </message>
-+    <message>
-+        <source>Insert the ukey into the USB port</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>Enter the ukey password</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>Input your password to authentication</source>
-+        <translation type="unfinished"></translation>
-+    </message>
- </context>
- <context>
-     <name>PolkitListener</name>
-diff --git a/polkit-agent/i18n_ts/tr.ts b/polkit-agent/i18n_ts/tr.ts
-index 33848d7..f59c7a3 100644
---- a/polkit-agent/i18n_ts/tr.ts
-+++ b/polkit-agent/i18n_ts/tr.ts
-@@ -34,136 +34,156 @@
- <context>
-     <name>MainWindow</name>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="65"/>
-+        <location filename="../src/mainwindow.cpp" line="66"/>
-         <source>Authentication</source>
-         <translation>Kimlik Doğrulama</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="164"/>
--        <location filename="../src/mainwindow.cpp" line="1176"/>
-+        <location filename="../src/mainwindow.cpp" line="226"/>
-+        <location filename="../src/mainwindow.cpp" line="1415"/>
-+        <location filename="../src/mainwindow.cpp" line="1417"/>
-         <source>Failed to verify %1, please enter password to unlock</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="168"/>
--        <location filename="../src/mainwindow.cpp" line="1178"/>
-+        <location filename="../src/mainwindow.cpp" line="231"/>
-+        <location filename="../src/mainwindow.cpp" line="233"/>
-+        <location filename="../src/mainwindow.cpp" line="1419"/>
-         <source>Unable to verify %1, please enter password to unlock</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="175"/>
-+        <location filename="../src/mainwindow.cpp" line="242"/>
-+        <location filename="../src/mainwindow.cpp" line="246"/>
-         <source>Failed to verify %1, you still have %2 verification opportunities</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="187"/>
-+        <location filename="../src/mainwindow.cpp" line="259"/>
-         <source>Abnormal network</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="511"/>
-+        <location filename="../src/mainwindow.cpp" line="665"/>
-         <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="517"/>
-+        <location filename="../src/mainwindow.cpp" line="671"/>
-         <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="576"/>
-+        <location filename="../src/mainwindow.cpp" line="108"/>
-+        <location filename="../src/mainwindow.cpp" line="729"/>
-         <source>Input Password</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="623"/>
--        <location filename="../src/mainwindow.cpp" line="627"/>
--        <location filename="../src/mainwindow.cpp" line="631"/>
--        <location filename="../src/mainwindow.cpp" line="635"/>
-+        <location filename="../src/mainwindow.cpp" line="105"/>
-+        <source>Insert the ukey into the USB port</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="107"/>
-+        <source>Enter the ukey password</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="779"/>
-+        <location filename="../src/mainwindow.cpp" line="783"/>
-+        <location filename="../src/mainwindow.cpp" line="787"/>
-+        <location filename="../src/mainwindow.cpp" line="791"/>
-         <source>Account locked,</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="623"/>
-+        <location filename="../src/mainwindow.cpp" line="779"/>
-         <source>days left</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="627"/>
-+        <location filename="../src/mainwindow.cpp" line="783"/>
-         <source>hours left</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="631"/>
-+        <location filename="../src/mainwindow.cpp" line="787"/>
-         <source>minutes left</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="635"/>
-+        <location filename="../src/mainwindow.cpp" line="791"/>
-         <source>seconds left</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="675"/>
--        <location filename="../src/mainwindow.cpp" line="676"/>
-+        <location filename="../src/mainwindow.cpp" line="834"/>
-+        <location filename="../src/mainwindow.cpp" line="835"/>
-         <source>Password cannot be empty</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="886"/>
--        <location filename="../src/mainwindow.cpp" line="991"/>
-+        <location filename="../src/mainwindow.cpp" line="880"/>
-+        <location filename="../src/mainwindow.cpp" line="888"/>
-+        <source>Input your password to authentication</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1079"/>
-+        <location filename="../src/mainwindow.cpp" line="1183"/>
-         <source>Use password</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1026"/>
--        <location filename="../src/mainwindow.cpp" line="1093"/>
--        <location filename="../src/mainwindow.cpp" line="1094"/>
-+        <location filename="../src/mainwindow.cpp" line="1219"/>
-+        <location filename="../src/mainwindow.cpp" line="1292"/>
-+        <location filename="../src/mainwindow.cpp" line="1293"/>
-         <source>Please try again in %1 minutes.</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1036"/>
--        <location filename="../src/mainwindow.cpp" line="1103"/>
--        <location filename="../src/mainwindow.cpp" line="1104"/>
-+        <location filename="../src/mainwindow.cpp" line="1230"/>
-+        <location filename="../src/mainwindow.cpp" line="1302"/>
-+        <location filename="../src/mainwindow.cpp" line="1303"/>
-         <source>Please try again in %1 seconds.</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1045"/>
--        <location filename="../src/mainwindow.cpp" line="1046"/>
--        <location filename="../src/mainwindow.cpp" line="1112"/>
--        <location filename="../src/mainwindow.cpp" line="1113"/>
-+        <location filename="../src/mainwindow.cpp" line="1240"/>
-+        <location filename="../src/mainwindow.cpp" line="1241"/>
-+        <location filename="../src/mainwindow.cpp" line="1311"/>
-+        <location filename="../src/mainwindow.cpp" line="1312"/>
-         <source>Account locked permanently.</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1193"/>
-+        <location filename="../src/mainwindow.cpp" line="1434"/>
-         <source>Verify face recognition or enter password to unlock</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1198"/>
-+        <location filename="../src/mainwindow.cpp" line="1439"/>
-         <source>Press fingerprint or enter password to unlock</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1203"/>
-+        <location filename="../src/mainwindow.cpp" line="1444"/>
-         <source>Verify voiceprint or enter password to unlock</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1208"/>
-+        <location filename="../src/mainwindow.cpp" line="1449"/>
-         <source>Verify finger vein or enter password to unlock</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1213"/>
-+        <location filename="../src/mainwindow.cpp" line="1454"/>
-         <source>Verify iris or enter password to unlock</source>
-         <translation type="unfinished"></translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1218"/>
-+        <location filename="../src/mainwindow.cpp" line="1459"/>
-         <source>Use the bound wechat scanning code or enter the password to unlock</source>
-         <translation type="unfinished"></translation>
-     </message>
-@@ -185,9 +205,9 @@
-         <translation type="obsolete">Parola</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="302"/>
--        <location filename="../src/mainwindow.cpp" line="882"/>
--        <location filename="../src/mainwindow.cpp" line="948"/>
-+        <location filename="../src/mainwindow.ui" line="409"/>
-+        <location filename="../src/mainwindow.cpp" line="1075"/>
-+        <location filename="../src/mainwindow.cpp" line="1143"/>
-         <source>Biometric</source>
-         <translation>Biyometrik</translation>
-     </message>
-@@ -236,19 +256,19 @@
-         <translation type="vanished">Polkit.caller-pid:</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="334"/>
--        <location filename="../src/mainwindow.cpp" line="884"/>
-+        <location filename="../src/mainwindow.ui" line="441"/>
-+        <location filename="../src/mainwindow.cpp" line="1077"/>
-         <source>Cancel</source>
-         <translation>İptal</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="353"/>
--        <location filename="../src/mainwindow.cpp" line="880"/>
-+        <location filename="../src/mainwindow.ui" line="460"/>
-+        <location filename="../src/mainwindow.cpp" line="1073"/>
-         <source>Authenticate</source>
-         <translation>Kimlik Doğrulaması</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="373"/>
-+        <location filename="../src/mainwindow.ui" line="480"/>
-         <source>use password</source>
-         <translation type="unfinished"></translation>
-     </message>
-@@ -257,7 +277,7 @@
-         <translation type="obsolete">Kimlik Doğrulaması</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="261"/>
-+        <location filename="../src/mainwindow.cpp" line="335"/>
-         <source>Please enter your password or enroll your fingerprint </source>
-         <translation type="unfinished"></translation>
-     </message>
-@@ -270,22 +290,22 @@
-         <translation type="vanished">Bir uygulama, ayrıcalıklar gerektiren bir eylem gerçekleştirmeye çalışıyor. Bu işlemi gerçekleştirmek için kimlik doğrulaması gerekiyor.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="578"/>
-+        <location filename="../src/mainwindow.cpp" line="731"/>
-         <source>Password: </source>
-         <translation type="unfinished">Parola: </translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="580"/>
-+        <location filename="../src/mainwindow.cpp" line="733"/>
-         <source>_Password: </source>
-         <translation type="unfinished">_Parola: </translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="582"/>
-+        <location filename="../src/mainwindow.cpp" line="735"/>
-         <source>_Password:</source>
-         <translation type="unfinished">_Parola:</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="691"/>
-+        <location filename="../src/mainwindow.cpp" line="850"/>
-         <source>Authentication failed, please try again.</source>
-         <translation>Kimlik doğrulama başarısız, lütfen tekrar deneyin.</translation>
-     </message>
-@@ -302,12 +322,12 @@
-         <translation>Başka bir hesap zaten kimlik doğrulaması yapıyor, lütfen daha sonra tekrar deneyin.</translation>
-     </message>
-     <message>
--        <location filename="../src/PolkitListener.cpp" line="257"/>
-+        <location filename="../src/PolkitListener.cpp" line="265"/>
-         <source>Authentication failure, please try again.</source>
-         <translation>Kimlik doğrulama hatalı, lütfen tekrar deneyin.</translation>
-     </message>
-     <message>
--        <location filename="../src/PolkitListener.cpp" line="264"/>
-+        <location filename="../src/PolkitListener.cpp" line="272"/>
-         <source>Password input error!</source>
-         <translation type="unfinished"></translation>
-     </message>
-diff --git a/polkit-agent/i18n_ts/ug.ts b/polkit-agent/i18n_ts/ug.ts
-index 628eadd..3b2d973 100644
---- a/polkit-agent/i18n_ts/ug.ts
-+++ b/polkit-agent/i18n_ts/ug.ts
-@@ -65,7 +65,7 @@
- <context>
-     <name>MainWindow</name>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="65"/>
-+        <location filename="../src/mainwindow.cpp" line="66"/>
-         <source>Authentication</source>
-         <translation>راستىنى دەلىللەش</translation>
-     </message>
-@@ -91,14 +91,14 @@
-         <translation type="vanished">密码</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="302"/>
--        <location filename="../src/mainwindow.cpp" line="882"/>
--        <location filename="../src/mainwindow.cpp" line="948"/>
-+        <location filename="../src/mainwindow.ui" line="409"/>
-+        <location filename="../src/mainwindow.cpp" line="1075"/>
-+        <location filename="../src/mainwindow.cpp" line="1143"/>
-         <source>Biometric</source>
-         <translation>بىئومېتىرىيە</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="373"/>
-+        <location filename="../src/mainwindow.ui" line="480"/>
-         <source>use password</source>
-         <translation>مەخپىي نومۇر ئىشلىتىش</translation>
-     </message>
-@@ -147,20 +147,20 @@
-         <translation type="vanished">Polkit.caller-pid:</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="334"/>
--        <location filename="../src/mainwindow.cpp" line="884"/>
-+        <location filename="../src/mainwindow.ui" line="441"/>
-+        <location filename="../src/mainwindow.cpp" line="1077"/>
-         <source>Cancel</source>
-         <translation>ئەمەلدىن قالدۇرۇش</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="353"/>
--        <location filename="../src/mainwindow.cpp" line="880"/>
-+        <location filename="../src/mainwindow.ui" line="460"/>
-+        <location filename="../src/mainwindow.cpp" line="1073"/>
-         <source>Authenticate</source>
-         <translation>چىنلىق دەلىللەش</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="886"/>
--        <location filename="../src/mainwindow.cpp" line="991"/>
-+        <location filename="../src/mainwindow.cpp" line="1079"/>
-+        <location filename="../src/mainwindow.cpp" line="1183"/>
-         <source>Use password</source>
-         <translation>پارول ئىشلىتىش</translation>
-     </message>
-@@ -185,30 +185,30 @@
-         <translation type="vanished">认证中,请稍等...</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1026"/>
--        <location filename="../src/mainwindow.cpp" line="1093"/>
--        <location filename="../src/mainwindow.cpp" line="1094"/>
-+        <location filename="../src/mainwindow.cpp" line="1219"/>
-+        <location filename="../src/mainwindow.cpp" line="1292"/>
-+        <location filename="../src/mainwindow.cpp" line="1293"/>
-         <source>Please try again in %1 minutes.</source>
-         <translation>٪1 مىنۇت ئىچىدە قايتا سىناپ بېقىڭ.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1036"/>
--        <location filename="../src/mainwindow.cpp" line="1103"/>
--        <location filename="../src/mainwindow.cpp" line="1104"/>
-+        <location filename="../src/mainwindow.cpp" line="1230"/>
-+        <location filename="../src/mainwindow.cpp" line="1302"/>
-+        <location filename="../src/mainwindow.cpp" line="1303"/>
-         <source>Please try again in %1 seconds.</source>
-         <translation>٪1 سېكۇنت ئىچىدە قايتا سىناپ بېقىڭ.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1045"/>
--        <location filename="../src/mainwindow.cpp" line="1046"/>
--        <location filename="../src/mainwindow.cpp" line="1112"/>
--        <location filename="../src/mainwindow.cpp" line="1113"/>
-+        <location filename="../src/mainwindow.cpp" line="1240"/>
-+        <location filename="../src/mainwindow.cpp" line="1241"/>
-+        <location filename="../src/mainwindow.cpp" line="1311"/>
-+        <location filename="../src/mainwindow.cpp" line="1312"/>
-         <source>Account locked permanently.</source>
-         <translation>ھېسابات مەڭگۈلۈك قۇلۇپلىنىدۇ.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="675"/>
--        <location filename="../src/mainwindow.cpp" line="676"/>
-+        <location filename="../src/mainwindow.cpp" line="834"/>
-+        <location filename="../src/mainwindow.cpp" line="835"/>
-         <source>Password cannot be empty</source>
-         <translation>مەخپىي نومۇرنى بوش قويۇشقا بولمايدۇ</translation>
-     </message>
-@@ -221,7 +221,8 @@
-         <translation type="vanished">无法验证%1,请输入密码.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="175"/>
-+        <location filename="../src/mainwindow.cpp" line="242"/>
-+        <location filename="../src/mainwindow.cpp" line="246"/>
-         <source>Failed to verify %1, you still have %2 verification opportunities</source>
-         <translation>٪1 نى دەلىللەش مەغلۇپ بولدى، سىزدە يەنىلا ٪2 دەلىللەش پۇرسىتى بار</translation>
-     </message>
-@@ -230,42 +231,42 @@
-         <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="578"/>
-+        <location filename="../src/mainwindow.cpp" line="731"/>
-         <source>Password: </source>
-         <translation>مەخپىي نومۇرى: </translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="261"/>
-+        <location filename="../src/mainwindow.cpp" line="335"/>
-         <source>Please enter your password or enroll your fingerprint </source>
-         <translation>مەخپىي نومۇرىڭىزنى كىرگۈزۈڭ ياكى بارماق ئىزىڭىزنى تىزىملىتىڭ </translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="187"/>
-+        <location filename="../src/mainwindow.cpp" line="259"/>
-         <source>Abnormal network</source>
-         <translation>بىنورمال تور</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="511"/>
-+        <location filename="../src/mainwindow.cpp" line="665"/>
-         <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
-         <translation>بۇ مەشغۇلات باشقۇرغۇچىنىڭ ھوقۇق بېرىشىنى تەلەپ قىلىدۇ. بۇ مەشغۇلاتقا رۇخسەت قىلىش ئۈچۈن پارولىڭىزنى كىرگۈزۈڭ.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="580"/>
-+        <location filename="../src/mainwindow.cpp" line="733"/>
-         <source>_Password: </source>
-         <translation>_Password: </translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="582"/>
-+        <location filename="../src/mainwindow.cpp" line="735"/>
-         <source>_Password:</source>
-         <translation>_Password:</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="691"/>
-+        <location filename="../src/mainwindow.cpp" line="850"/>
-         <source>Authentication failed, please try again.</source>
-         <translation>دەلىللەش مەغلۇپ بولدى، قايتا سىناپ بېقىڭ.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="623"/>
-+        <location filename="../src/mainwindow.cpp" line="779"/>
-         <source>days left</source>
-         <translation>قالغان كۈنلەر</translation>
-     </message>
-@@ -278,14 +279,16 @@
-         <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="164"/>
--        <location filename="../src/mainwindow.cpp" line="1176"/>
-+        <location filename="../src/mainwindow.cpp" line="226"/>
-+        <location filename="../src/mainwindow.cpp" line="1415"/>
-+        <location filename="../src/mainwindow.cpp" line="1417"/>
-         <source>Failed to verify %1, please enter password to unlock</source>
-         <translation>٪1 نى دەلىللەش مەغلۇپ بولدى، مەخپى نۇمۇر كىرگۈزۈڭ</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="168"/>
--        <location filename="../src/mainwindow.cpp" line="1178"/>
-+        <location filename="../src/mainwindow.cpp" line="231"/>
-+        <location filename="../src/mainwindow.cpp" line="233"/>
-+        <location filename="../src/mainwindow.cpp" line="1419"/>
-         <source>Unable to verify %1, please enter password to unlock</source>
-         <translation>٪1 نى دەلىللەشكە ئامالسىز، مەخپىي نومۇرنى كىرگۈزۈپ قۇلۇپنى ئاچ</translation>
-     </message>
-@@ -294,57 +297,74 @@
-         <translation type="vanished">网络异常</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="517"/>
-+        <location filename="../src/mainwindow.cpp" line="671"/>
-         <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
-         <translation>بىر پروگرامما ئىمتىياز تەلەپ قىلىدىغان ھەرىكەتنى قىلىشقا ئۇرۇنماقتا. بۇ ھەرىكەتنى ئىجرا قىلىش ئۈچۈن ھوقۇق تەلەپ قىلىدۇ.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="576"/>
-+        <location filename="../src/mainwindow.cpp" line="108"/>
-+        <location filename="../src/mainwindow.cpp" line="729"/>
-         <source>Input Password</source>
-         <translation>ئىم كىرگۈزۈش</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="627"/>
-+        <location filename="../src/mainwindow.cpp" line="105"/>
-+        <source>Insert the ukey into the USB port</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="107"/>
-+        <source>Enter the ukey password</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="783"/>
-         <source>hours left</source>
-         <translation>قالغان سائەتلەر</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="631"/>
-+        <location filename="../src/mainwindow.cpp" line="787"/>
-         <source>minutes left</source>
-         <translation>مىنۇت قالدى</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="635"/>
-+        <location filename="../src/mainwindow.cpp" line="791"/>
-         <source>seconds left</source>
-         <translation>سېكۇنت قالدى</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1193"/>
-+        <location filename="../src/mainwindow.cpp" line="880"/>
-+        <location filename="../src/mainwindow.cpp" line="888"/>
-+        <source>Input your password to authentication</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1434"/>
-         <source>Verify face recognition or enter password to unlock</source>
-         <translation>چىراي تونۇشنى دەلىللەش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1198"/>
-+        <location filename="../src/mainwindow.cpp" line="1439"/>
-         <source>Press fingerprint or enter password to unlock</source>
-         <translation>بارماق ئىزىنى بېسىش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1203"/>
-+        <location filename="../src/mainwindow.cpp" line="1444"/>
-         <source>Verify voiceprint or enter password to unlock</source>
-         <translation>ئاۋاز ئىزىنى دەلىللەش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1208"/>
-+        <location filename="../src/mainwindow.cpp" line="1449"/>
-         <source>Verify finger vein or enter password to unlock</source>
-         <translation>بارماق تومۇرىنى ئېنىقلاش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1213"/>
-+        <location filename="../src/mainwindow.cpp" line="1454"/>
-         <source>Verify iris or enter password to unlock</source>
-         <translation>Iris نى ئېنىقلاش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1218"/>
-+        <location filename="../src/mainwindow.cpp" line="1459"/>
-         <source>Use the bound wechat scanning code or enter the password to unlock</source>
-         <translation>باغلانغان ئۈندىدارنى سىكاننېرلاش كودى ياكى مەخپىي نومۇرىنى كىرگۈزۈپ قۇلۇپ ئېچىش</translation>
-     </message>
-@@ -353,10 +373,10 @@
-         <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="623"/>
--        <location filename="../src/mainwindow.cpp" line="627"/>
--        <location filename="../src/mainwindow.cpp" line="631"/>
--        <location filename="../src/mainwindow.cpp" line="635"/>
-+        <location filename="../src/mainwindow.cpp" line="779"/>
-+        <location filename="../src/mainwindow.cpp" line="783"/>
-+        <location filename="../src/mainwindow.cpp" line="787"/>
-+        <location filename="../src/mainwindow.cpp" line="791"/>
-         <source>Account locked,</source>
-         <translation>ھېسابات قۇلۇپلانغان ،</translation>
-     </message>
-@@ -373,12 +393,12 @@
-         <translation>يەنە بىر خېرىدار ئاللىقاچان دەلىللەشكە باشلىدى، سەل تۇرۇپ قايتا سىناپ بېقىڭ.</translation>
-     </message>
-     <message>
--        <location filename="../src/PolkitListener.cpp" line="257"/>
-+        <location filename="../src/PolkitListener.cpp" line="265"/>
-         <source>Authentication failure, please try again.</source>
-         <translation>دەلىللەش مەغلۇپ بولدى، قايتا سىناپ بېقىڭ.</translation>
-     </message>
-     <message>
--        <location filename="../src/PolkitListener.cpp" line="264"/>
-+        <location filename="../src/PolkitListener.cpp" line="272"/>
-         <source>Password input error!</source>
-         <translation>پارول كىرگۈزۈش خاتالىقى!</translation>
-     </message>
-diff --git a/polkit-agent/i18n_ts/zh_CN.ts b/polkit-agent/i18n_ts/zh_CN.ts
-index 34b82ac..070732c 100644
---- a/polkit-agent/i18n_ts/zh_CN.ts
-+++ b/polkit-agent/i18n_ts/zh_CN.ts
-@@ -65,7 +65,7 @@
- <context>
-     <name>MainWindow</name>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="65"/>
-+        <location filename="../src/mainwindow.cpp" line="66"/>
-         <source>Authentication</source>
-         <translation>授权</translation>
-     </message>
-@@ -88,17 +88,17 @@
-     </message>
-     <message>
-         <source>Password</source>
--        <translation>密码</translation>
-+        <translation type="vanished">密码</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="302"/>
--        <location filename="../src/mainwindow.cpp" line="882"/>
--        <location filename="../src/mainwindow.cpp" line="948"/>
-+        <location filename="../src/mainwindow.ui" line="409"/>
-+        <location filename="../src/mainwindow.cpp" line="1075"/>
-+        <location filename="../src/mainwindow.cpp" line="1143"/>
-         <source>Biometric</source>
-         <translation>使用生物识别</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="373"/>
-+        <location filename="../src/mainwindow.ui" line="480"/>
-         <source>use password</source>
-         <translation>使用密码验证</translation>
-     </message>
-@@ -147,20 +147,20 @@
-         <translation type="vanished">Polkit.caller-pid:</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="334"/>
--        <location filename="../src/mainwindow.cpp" line="884"/>
-+        <location filename="../src/mainwindow.ui" line="441"/>
-+        <location filename="../src/mainwindow.cpp" line="1077"/>
-         <source>Cancel</source>
-         <translation>取消</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.ui" line="353"/>
--        <location filename="../src/mainwindow.cpp" line="880"/>
-+        <location filename="../src/mainwindow.ui" line="460"/>
-+        <location filename="../src/mainwindow.cpp" line="1073"/>
-         <source>Authenticate</source>
-         <translation>授权</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="886"/>
--        <location filename="../src/mainwindow.cpp" line="991"/>
-+        <location filename="../src/mainwindow.cpp" line="1079"/>
-+        <location filename="../src/mainwindow.cpp" line="1183"/>
-         <source>Use password</source>
-         <translation>使用密码验证</translation>
-     </message>
-@@ -185,30 +185,30 @@
-         <translation type="vanished">认证中,请稍等...</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1026"/>
--        <location filename="../src/mainwindow.cpp" line="1093"/>
--        <location filename="../src/mainwindow.cpp" line="1094"/>
-+        <location filename="../src/mainwindow.cpp" line="1219"/>
-+        <location filename="../src/mainwindow.cpp" line="1292"/>
-+        <location filename="../src/mainwindow.cpp" line="1293"/>
-         <source>Please try again in %1 minutes.</source>
-         <translation>请%1分钟后再试</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1036"/>
--        <location filename="../src/mainwindow.cpp" line="1103"/>
--        <location filename="../src/mainwindow.cpp" line="1104"/>
-+        <location filename="../src/mainwindow.cpp" line="1230"/>
-+        <location filename="../src/mainwindow.cpp" line="1302"/>
-+        <location filename="../src/mainwindow.cpp" line="1303"/>
-         <source>Please try again in %1 seconds.</source>
-         <translation>请%1秒后再试</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1045"/>
--        <location filename="../src/mainwindow.cpp" line="1046"/>
--        <location filename="../src/mainwindow.cpp" line="1112"/>
--        <location filename="../src/mainwindow.cpp" line="1113"/>
-+        <location filename="../src/mainwindow.cpp" line="1240"/>
-+        <location filename="../src/mainwindow.cpp" line="1241"/>
-+        <location filename="../src/mainwindow.cpp" line="1311"/>
-+        <location filename="../src/mainwindow.cpp" line="1312"/>
-         <source>Account locked permanently.</source>
-         <translation>账号已被永久锁定</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="675"/>
--        <location filename="../src/mainwindow.cpp" line="676"/>
-+        <location filename="../src/mainwindow.cpp" line="834"/>
-+        <location filename="../src/mainwindow.cpp" line="835"/>
-         <source>Password cannot be empty</source>
-         <translation>密码不能为空</translation>
-     </message>
-@@ -221,7 +221,8 @@
-         <translation type="vanished">无法验证%1,请输入密码.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="175"/>
-+        <location filename="../src/mainwindow.cpp" line="242"/>
-+        <location filename="../src/mainwindow.cpp" line="246"/>
-         <source>Failed to verify %1, you still have %2 verification opportunities</source>
-         <translation>验证%1失败,您还有%2次尝试机会</translation>
-     </message>
-@@ -230,42 +231,42 @@
-         <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="578"/>
-+        <location filename="../src/mainwindow.cpp" line="731"/>
-         <source>Password: </source>
-         <translation>密码: </translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="261"/>
-+        <location filename="../src/mainwindow.cpp" line="335"/>
-         <source>Please enter your password or enroll your fingerprint </source>
-         <translation>请输入密码或者录入指纹</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="187"/>
-+        <location filename="../src/mainwindow.cpp" line="259"/>
-         <source>Abnormal network</source>
-         <translation>网络异常</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="511"/>
-+        <location filename="../src/mainwindow.cpp" line="665"/>
-         <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
-         <translation>本次操作需要通过管理员的授权才能继续执行,请输入密码以允许本次操作。</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="580"/>
-+        <location filename="../src/mainwindow.cpp" line="733"/>
-         <source>_Password: </source>
-         <translation>密码: </translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="582"/>
-+        <location filename="../src/mainwindow.cpp" line="735"/>
-         <source>_Password:</source>
-         <translation>密码:</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="691"/>
-+        <location filename="../src/mainwindow.cpp" line="850"/>
-         <source>Authentication failed, please try again.</source>
-         <translation>认证失败,请重试。</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="623"/>
-+        <location filename="../src/mainwindow.cpp" line="779"/>
-         <source>days left</source>
-         <translation>天后解锁</translation>
-     </message>
-@@ -278,14 +279,16 @@
-         <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="164"/>
--        <location filename="../src/mainwindow.cpp" line="1176"/>
-+        <location filename="../src/mainwindow.cpp" line="226"/>
-+        <location filename="../src/mainwindow.cpp" line="1415"/>
-+        <location filename="../src/mainwindow.cpp" line="1417"/>
-         <source>Failed to verify %1, please enter password to unlock</source>
-         <translation>验证%1失败,请输入密码解锁</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="168"/>
--        <location filename="../src/mainwindow.cpp" line="1178"/>
-+        <location filename="../src/mainwindow.cpp" line="231"/>
-+        <location filename="../src/mainwindow.cpp" line="233"/>
-+        <location filename="../src/mainwindow.cpp" line="1419"/>
-         <source>Unable to verify %1, please enter password to unlock</source>
-         <translation>无法验证%1,请输入密码解锁</translation>
-     </message>
-@@ -294,67 +297,74 @@
-         <translation type="vanished">网络异常</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="517"/>
-+        <location filename="../src/mainwindow.cpp" line="671"/>
-         <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
-         <translation>一个程序正试图执行一个需要特权的动作,要求授权以执行该动作。</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="576"/>
-+        <location filename="../src/mainwindow.cpp" line="108"/>
-+        <location filename="../src/mainwindow.cpp" line="729"/>
-         <source>Input Password</source>
-         <translation>输入密码</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="104"/>
-+        <location filename="../src/mainwindow.cpp" line="105"/>
-         <source>Insert the ukey into the USB port</source>
-         <translation>请将安全密钥插入USB端口</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="106"/>
-+        <location filename="../src/mainwindow.cpp" line="107"/>
-         <source>Enter the ukey password</source>
-         <translation>输入安全密钥密码</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="764"/>
-+        <location filename="../src/mainwindow.cpp" line="783"/>
-         <source>hours left</source>
-         <translation>小时后解锁</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="631"/>
-+        <location filename="../src/mainwindow.cpp" line="787"/>
-         <source>minutes left</source>
-         <translation>分钟后解锁</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="635"/>
-+        <location filename="../src/mainwindow.cpp" line="791"/>
-         <source>seconds left</source>
-         <translation>秒后解锁</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1193"/>
-+        <location filename="../src/mainwindow.cpp" line="880"/>
-+        <location filename="../src/mainwindow.cpp" line="888"/>
-+        <source>Input your password to authentication</source>
-+        <translation>输入密码以授权</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1434"/>
-         <source>Verify face recognition or enter password to unlock</source>
-         <translation>验证人脸识别或输入密码解锁</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1198"/>
-+        <location filename="../src/mainwindow.cpp" line="1439"/>
-         <source>Press fingerprint or enter password to unlock</source>
-         <translation>按压指纹或输入密码解锁</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1203"/>
-+        <location filename="../src/mainwindow.cpp" line="1444"/>
-         <source>Verify voiceprint or enter password to unlock</source>
-         <translation>验证声纹或输入密码解锁</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1208"/>
-+        <location filename="../src/mainwindow.cpp" line="1449"/>
-         <source>Verify finger vein or enter password to unlock</source>
-         <translation>验证指静脉或输入密码解锁</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1213"/>
-+        <location filename="../src/mainwindow.cpp" line="1454"/>
-         <source>Verify iris or enter password to unlock</source>
-         <translation>验证虹膜或输入密码解锁</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1218"/>
-+        <location filename="../src/mainwindow.cpp" line="1459"/>
-         <source>Use the bound wechat scanning code or enter the password to unlock</source>
-         <translation>使用绑定的微信扫码或输入密码解锁</translation>
-     </message>
-@@ -363,10 +373,10 @@
-         <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="623"/>
--        <location filename="../src/mainwindow.cpp" line="627"/>
--        <location filename="../src/mainwindow.cpp" line="631"/>
--        <location filename="../src/mainwindow.cpp" line="635"/>
-+        <location filename="../src/mainwindow.cpp" line="779"/>
-+        <location filename="../src/mainwindow.cpp" line="783"/>
-+        <location filename="../src/mainwindow.cpp" line="787"/>
-+        <location filename="../src/mainwindow.cpp" line="791"/>
-         <source>Account locked,</source>
-         <translation>账户已锁定,</translation>
-     </message>
-@@ -383,12 +393,12 @@
-         <translation>有另外一个客户端正在认证,请稍后重试。</translation>
-     </message>
-     <message>
--        <location filename="../src/PolkitListener.cpp" line="257"/>
-+        <location filename="../src/PolkitListener.cpp" line="265"/>
-         <source>Authentication failure, please try again.</source>
-         <translation>认证失败,请重试。</translation>
-     </message>
-     <message>
--        <location filename="../src/PolkitListener.cpp" line="264"/>
-+        <location filename="../src/PolkitListener.cpp" line="272"/>
-         <source>Password input error!</source>
-         <translation>密码输入错误!</translation>
-     </message>
-diff --git a/polkit-agent/i18n_ts/zh_HK.ts b/polkit-agent/i18n_ts/zh_HK.ts
-index aea8f94..95c8c43 100644
---- a/polkit-agent/i18n_ts/zh_HK.ts
-+++ b/polkit-agent/i18n_ts/zh_HK.ts
-@@ -65,7 +65,7 @@
- <context>
-     <name>MainWindow</name>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="67"/>
-+        <location filename="../src/mainwindow.cpp" line="66"/>
-         <source>Authentication</source>
-         <translation>授權</translation>
-     </message>
-@@ -92,8 +92,8 @@
-     </message>
-     <message>
-         <location filename="../src/mainwindow.ui" line="409"/>
--        <location filename="../src/mainwindow.cpp" line="1077"/>
--        <location filename="../src/mainwindow.cpp" line="1145"/>
-+        <location filename="../src/mainwindow.cpp" line="1075"/>
-+        <location filename="../src/mainwindow.cpp" line="1143"/>
-         <source>Biometric</source>
-         <translation>使用生物識別</translation>
-     </message>
-@@ -148,19 +148,19 @@
-     </message>
-     <message>
-         <location filename="../src/mainwindow.ui" line="441"/>
--        <location filename="../src/mainwindow.cpp" line="1079"/>
-+        <location filename="../src/mainwindow.cpp" line="1077"/>
-         <source>Cancel</source>
-         <translation>取消</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.ui" line="460"/>
--        <location filename="../src/mainwindow.cpp" line="1075"/>
-+        <location filename="../src/mainwindow.cpp" line="1073"/>
-         <source>Authenticate</source>
-         <translation>授權</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1081"/>
--        <location filename="../src/mainwindow.cpp" line="1185"/>
-+        <location filename="../src/mainwindow.cpp" line="1079"/>
-+        <location filename="../src/mainwindow.cpp" line="1183"/>
-         <source>Use password</source>
-         <translation>使用密碼驗證</translation>
-     </message>
-@@ -185,30 +185,30 @@
-         <translation type="vanished">认证中,请稍等...</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1221"/>
--        <location filename="../src/mainwindow.cpp" line="1294"/>
--        <location filename="../src/mainwindow.cpp" line="1295"/>
-+        <location filename="../src/mainwindow.cpp" line="1219"/>
-+        <location filename="../src/mainwindow.cpp" line="1292"/>
-+        <location filename="../src/mainwindow.cpp" line="1293"/>
-         <source>Please try again in %1 minutes.</source>
-         <translation>請%1分鐘后再試</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1232"/>
--        <location filename="../src/mainwindow.cpp" line="1304"/>
--        <location filename="../src/mainwindow.cpp" line="1305"/>
-+        <location filename="../src/mainwindow.cpp" line="1230"/>
-+        <location filename="../src/mainwindow.cpp" line="1302"/>
-+        <location filename="../src/mainwindow.cpp" line="1303"/>
-         <source>Please try again in %1 seconds.</source>
-         <translation>請%1秒後再試</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1242"/>
--        <location filename="../src/mainwindow.cpp" line="1243"/>
--        <location filename="../src/mainwindow.cpp" line="1313"/>
--        <location filename="../src/mainwindow.cpp" line="1314"/>
-+        <location filename="../src/mainwindow.cpp" line="1240"/>
-+        <location filename="../src/mainwindow.cpp" line="1241"/>
-+        <location filename="../src/mainwindow.cpp" line="1311"/>
-+        <location filename="../src/mainwindow.cpp" line="1312"/>
-         <source>Account locked permanently.</source>
-         <translation>帳號已被永久鎖定</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="836"/>
--        <location filename="../src/mainwindow.cpp" line="837"/>
-+        <location filename="../src/mainwindow.cpp" line="834"/>
-+        <location filename="../src/mainwindow.cpp" line="835"/>
-         <source>Password cannot be empty</source>
-         <translation>密碼不能為空</translation>
-     </message>
-@@ -221,8 +221,8 @@
-         <translation type="vanished">无法验证%1,请输入密码.</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="244"/>
--        <location filename="../src/mainwindow.cpp" line="248"/>
-+        <location filename="../src/mainwindow.cpp" line="242"/>
-+        <location filename="../src/mainwindow.cpp" line="246"/>
-         <source>Failed to verify %1, you still have %2 verification opportunities</source>
-         <translation>驗證%1失敗,您還有%2次嘗試機會</translation>
-     </message>
-@@ -231,42 +231,42 @@
-         <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="733"/>
-+        <location filename="../src/mainwindow.cpp" line="731"/>
-         <source>Password: </source>
-         <translation>密碼: </translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="337"/>
-+        <location filename="../src/mainwindow.cpp" line="335"/>
-         <source>Please enter your password or enroll your fingerprint </source>
-         <translation>請輸入密碼或者錄入指紋 </translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="261"/>
-+        <location filename="../src/mainwindow.cpp" line="259"/>
-         <source>Abnormal network</source>
-         <translation>網路異常</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="511"/>
-+        <location filename="../src/mainwindow.cpp" line="665"/>
-         <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
-         <translation>本次操作需要通過管理員的授權才能繼續執行,請輸入密碼以允許本次操作。</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="735"/>
-+        <location filename="../src/mainwindow.cpp" line="733"/>
-         <source>_Password: </source>
-         <translation>密碼: </translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="737"/>
-+        <location filename="../src/mainwindow.cpp" line="735"/>
-         <source>_Password:</source>
-         <translation>密碼:</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="852"/>
-+        <location filename="../src/mainwindow.cpp" line="850"/>
-         <source>Authentication failed, please try again.</source>
-         <translation>認證失敗,請重試。</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="781"/>
-+        <location filename="../src/mainwindow.cpp" line="779"/>
-         <source>days left</source>
-         <translation>天后解鎖</translation>
-     </message>
-@@ -279,16 +279,16 @@
-         <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="228"/>
-+        <location filename="../src/mainwindow.cpp" line="226"/>
-+        <location filename="../src/mainwindow.cpp" line="1415"/>
-         <location filename="../src/mainwindow.cpp" line="1417"/>
--        <location filename="../src/mainwindow.cpp" line="1419"/>
-         <source>Failed to verify %1, please enter password to unlock</source>
-         <translation>驗證%1失敗,請輸入密碼解鎖</translation>
-     </message>
-     <message>
-+        <location filename="../src/mainwindow.cpp" line="231"/>
-         <location filename="../src/mainwindow.cpp" line="233"/>
--        <location filename="../src/mainwindow.cpp" line="235"/>
--        <location filename="../src/mainwindow.cpp" line="1421"/>
-+        <location filename="../src/mainwindow.cpp" line="1419"/>
-         <source>Unable to verify %1, please enter password to unlock</source>
-         <translation>無法驗證%1,請輸入密碼解鎖</translation>
-     </message>
-@@ -297,74 +297,74 @@
-         <translation type="vanished">网络异常</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="673"/>
-+        <location filename="../src/mainwindow.cpp" line="671"/>
-         <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
-         <translation>一個程式正試圖執行一個需要特權的動作,要求授權以執行該動作。</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="110"/>
--        <location filename="../src/mainwindow.cpp" line="731"/>
-+        <location filename="../src/mainwindow.cpp" line="108"/>
-+        <location filename="../src/mainwindow.cpp" line="729"/>
-         <source>Input Password</source>
-         <translation>輸入密碼</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="107"/>
-+        <location filename="../src/mainwindow.cpp" line="105"/>
-         <source>Insert the ukey into the USB port</source>
-         <translation>請將安全金鑰插入USB埠</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="109"/>
-+        <location filename="../src/mainwindow.cpp" line="107"/>
-         <source>Enter the ukey password</source>
-         <translation>輸入安全金鑰密碼</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="785"/>
-+        <location filename="../src/mainwindow.cpp" line="783"/>
-         <source>hours left</source>
-         <translation>小時後解鎖</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="789"/>
-+        <location filename="../src/mainwindow.cpp" line="787"/>
-         <source>minutes left</source>
-         <translation>分鐘後解鎖</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="793"/>
-+        <location filename="../src/mainwindow.cpp" line="791"/>
-         <source>seconds left</source>
-         <translation>秒後解鎖</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="882"/>
--        <location filename="../src/mainwindow.cpp" line="890"/>
-+        <location filename="../src/mainwindow.cpp" line="880"/>
-+        <location filename="../src/mainwindow.cpp" line="888"/>
-         <source>Input your password to authentication</source>
-         <translation>輸入密碼以認證</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1436"/>
-+        <location filename="../src/mainwindow.cpp" line="1434"/>
-         <source>Verify face recognition or enter password to unlock</source>
-         <translation>驗證人臉識別或輸入密碼解鎖</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1441"/>
-+        <location filename="../src/mainwindow.cpp" line="1439"/>
-         <source>Press fingerprint or enter password to unlock</source>
-         <translation>按壓指紋或輸入密碼解鎖</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1446"/>
-+        <location filename="../src/mainwindow.cpp" line="1444"/>
-         <source>Verify voiceprint or enter password to unlock</source>
-         <translation>驗證聲紋或輸入密碼解鎖</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1451"/>
-+        <location filename="../src/mainwindow.cpp" line="1449"/>
-         <source>Verify finger vein or enter password to unlock</source>
-         <translation>驗證指靜脈或輸入密碼解鎖</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1456"/>
-+        <location filename="../src/mainwindow.cpp" line="1454"/>
-         <source>Verify iris or enter password to unlock</source>
-         <translation>驗證虹膜或輸入密碼解鎖</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="1461"/>
-+        <location filename="../src/mainwindow.cpp" line="1459"/>
-         <source>Use the bound wechat scanning code or enter the password to unlock</source>
-         <translation>使用綁定的微信掃碼或輸入密碼解鎖</translation>
-     </message>
-@@ -373,10 +373,10 @@
-         <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
-     </message>
-     <message>
--        <location filename="../src/mainwindow.cpp" line="781"/>
--        <location filename="../src/mainwindow.cpp" line="785"/>
--        <location filename="../src/mainwindow.cpp" line="789"/>
--        <location filename="../src/mainwindow.cpp" line="793"/>
-+        <location filename="../src/mainwindow.cpp" line="779"/>
-+        <location filename="../src/mainwindow.cpp" line="783"/>
-+        <location filename="../src/mainwindow.cpp" line="787"/>
-+        <location filename="../src/mainwindow.cpp" line="791"/>
-         <source>Account locked,</source>
-         <translation>帳戶已鎖定,</translation>
-     </message>
-@@ -388,7 +388,7 @@
- <context>
-     <name>PolkitListener</name>
-     <message>
--        <location filename="../src/PolkitListener.cpp" line="90"/>
-+        <location filename="../src/PolkitListener.cpp" line="88"/>
-         <source>Another client is already authenticating, please try again later.</source>
-         <translation>有另外一個用戶端正在認證,請稍後重試。</translation>
-     </message>
-diff --git a/polkit-agent/src/PolkitListener.cpp b/polkit-agent/src/PolkitListener.cpp
-index 67fe34c..26b0f9a 100644
---- a/polkit-agent/src/PolkitListener.cpp
-+++ b/polkit-agent/src/PolkitListener.cpp
-@@ -146,12 +146,12 @@ void PolkitListener::initiateAuthentication(
- //    hints.functions = MWM_FUNC_ALL;
- //    hints.decorations = MWM_DECOR_BORDER;
- //    XAtomHelper::getInstance()->setWindowMotifHint(mainWindow->winId(), hints);
--    mainWindow->setWindowFlags(Qt::WindowCloseButtonHint | Qt::WindowStaysOnTopHint);
-     mainWindow->setIcon(iconName);
-     mainWindow->setCurProject(m_isMavis);
-     mainWindow->setHeader(message);
-     mainWindow->setUsers(usersList);
-     mainWindow->setEditInputMethod(m_isSupportTableMode);
-+    mainWindow->setFixedSize(420, 297);
-     /*
-     mainWindow->setDetails(subjectPid, callerPid,
-                            actionDesc.actionId(),
-@@ -161,15 +161,19 @@ void PolkitListener::initiateAuthentication(
-     */
-     /* set the position of the mainwindow */
-     QPoint pos = QCursor::pos();
--    for(auto screen : QGuiApplication::screens())
--    {
--        if(screen->geometry().contains(pos))
--        {
--            mainWindow->move(screen->geometry().left() + (screen->geometry().width() - mainWindow->width()) / 2,
--                             screen->geometry().top() + (screen->geometry().height() - mainWindow->height()) / 2);
-+    QRect desScreenGeometry;
-+    for (QScreen *screen : qApp->screens()) {
-+        if (screen->geometry().contains(pos)) {
-+            desScreenGeometry = screen->geometry();
-         }
-     }
- 
-+    if (desScreenGeometry.isEmpty()) {
-+        desScreenGeometry = qApp->primaryScreen()->geometry();
-+    }
-+    mainWindow->move(desScreenGeometry.x() + (desScreenGeometry.width() - mainWindow->width())/2,
-+               desScreenGeometry.y() + (desScreenGeometry.height() - mainWindow->height())/2);
-+    qDebug()<<"MoveWindow to center1:"<<desScreenGeometry<<","<<mainWindow->geometry()<<QGuiApplication::platformName();;
-     connect(mainWindow, &MainWindow::accept, this, &PolkitListener::onResponse);
-     connect(mainWindow, &MainWindow::canceled, this, [&]{
-         wasCancelled = true;
-diff --git a/polkit-agent/src/mainwindow.cpp b/polkit-agent/src/mainwindow.cpp
-index bbc327f..401700d 100644
---- a/polkit-agent/src/mainwindow.cpp
-+++ b/polkit-agent/src/mainwindow.cpp
-@@ -61,9 +61,9 @@ MainWindow::MainWindow(QWidget *parent) :
-     m_nCurLockMin(0),
-     isbioSuccess(false)
- {
-+    setWindowFlags(Qt::Tool | Qt::WindowCloseButtonHint | Qt::WindowStaysOnTopHint);
-     ui->setupUi(this);
-     setWindowTitle(tr("Authentication"));
--    setWindowFlags(Qt::WindowCloseButtonHint | Qt::WindowStaysOnTopHint);
- 
-     pam_tally_init(); //
- 
diff -Nru ukui-biometric-auth-4.10.0.0/debian/patches/0004-udpate-changelog.patch ukui-biometric-auth-4.20.0.0/debian/patches/0004-udpate-changelog.patch
--- ukui-biometric-auth-4.10.0.0/debian/patches/0004-udpate-changelog.patch	2024-04-23 10:31:46.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/debian/patches/0004-udpate-changelog.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,50 +0,0 @@
-From: yangmin <winner_yangmin@163.com>
-Date: Tue, 12 Dec 2023 16:08:43 +0800
-Subject: udpate changelog
-
----
- pam-biometric/pam_biometric.c | 24 +++++++++++++++++++++++-
- 1 file changed, 23 insertions(+), 1 deletion(-)
-
-diff --git a/pam-biometric/pam_biometric.c b/pam-biometric/pam_biometric.c
-index 68f6aab..c639e53 100644
---- a/pam-biometric/pam_biometric.c
-+++ b/pam-biometric/pam_biometric.c
-@@ -463,6 +463,28 @@ void get_greeter_session(char buf[], int len)
-             if (stdout_pidof)
-                 g_free(stdout_pidof);
-             g_ptr_array_free (args_pidof, TRUE);
-+
-+		//如果ukui-greeter进程不存在,进而判断ukui-screensaver-backend进程
-+	    args_pidof = g_ptr_array_new ();
-+            g_ptr_array_add(args_pidof, (gpointer)"/usr/bin/pidof");
-+            g_ptr_array_add(args_pidof, (gpointer)"ukui-screensaver-backend");
-+            g_ptr_array_add(args_pidof, NULL);
-+
-+	    if (!g_spawn_sync(NULL, (char**)args_pidof->pdata, NULL, G_SPAWN_STDERR_TO_DEV_NULL, NULL, NULL, &stdout_pidof, NULL, NULL, NULL)) {
-+                if (stdout_pidof)
-+                    g_free(stdout_pidof);
-+                g_ptr_array_free (args_pidof, TRUE);
-+	    }
-+	    
-+            if (stdout_pidof) {
-+                if (strlen(stdout_pidof) > 0 && atoi(stdout_pidof) > 0) {
-+                    g_strlcpy(buf, "ukui-screensaver-backend", len);
-+                }
-+                g_free(stdout_pidof);
-+            }
-+
-+	    g_ptr_array_free (args_pidof, TRUE);
-+
-             return ;
-         }
-         if (stdout_pidof) {
-@@ -668,7 +690,7 @@ int pam_sm_authenticate(pam_handle_t *pamh, int flags, int argc,
-         get_greeter_session(buf, sizeof(buf));
-         pam_logger("current greeter: %s\n", buf);
- 
--        if(strcmp(buf, "ukui-greeter") == 0 || strcmp(buf, "ukui-greeter-wayland") == 0)
-+        if(strcmp(buf, "ukui-greeter") == 0 || strcmp(buf, "ukui-greeter-wayland") == 0 || strcmp(buf, "ukui-session") == 0 || strcmp(buf,"ukui-screensaver-backend"))
-             return biometric_auth_embeded(pamh);
- //        else
- //            return biometric_auth_independent(pamh, "lightdm", 1);
diff -Nru ukui-biometric-auth-4.10.0.0/debian/patches/0005-16-task-190787-UKUI-Kylin-biometric-auth-screensaver.patch ukui-biometric-auth-4.20.0.0/debian/patches/0005-16-task-190787-UKUI-Kylin-biometric-auth-screensaver.patch
--- ukui-biometric-auth-4.10.0.0/debian/patches/0005-16-task-190787-UKUI-Kylin-biometric-auth-screensaver.patch	2024-04-23 10:31:46.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/debian/patches/0005-16-task-190787-UKUI-Kylin-biometric-auth-screensaver.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,772 +0,0 @@
-From: =?utf-8?b?5p2o5pWP?= <yangmin@kylinos.cn>
-Date: Fri, 5 Jan 2024 09:28:51 +0000
-Subject: =?utf-8?b?ITE2IHRhc2sjMTkwNzg3IOWtkCBVS1VJJkt5bGlu5bqU55So5o2Q6LWg?=
- =?utf-8?b?5LqL5a6cIC8gYmlvbWV0cmljLWF1dGgtICYgc2NyZWVuc2F2ZXLlkIjop4TmgKc=?=
- =?utf-8?b?5L+u5pS5IE1lcmdlIHB1bGwgcmVxdWVzdCAhMTYgZnJvbSBsaXVkdW5mYS9vcGVu?=
- =?utf-8?b?a3lsaW4vbmlsZQ==?=
-
----
- bioauth-bin/src/keywatcher.cpp           |  2 +-
- bioauth-bin/src/keywatcher.h             |  2 +-
- bioauth-bin/src/main.cpp                 |  2 +-
- bioauth/include/bioauth.h                |  2 +-
- bioauth/include/bioauthwidget.h          |  2 +-
- bioauth/include/biodevices.h             |  2 +-
- bioauth/include/biodeviceswidget.h       |  2 +-
- bioauth/include/biometric.h              |  2 +-
- bioauth/include/biotypes.h               |  2 +-
- bioauth/include/giodbus.h                |  2 +-
- bioauth/include/loginoptionswidget.h     |  2 +-
- bioauth/include/uniauthservice.h         |  2 +-
- bioauth/src/bioauth.cpp                  |  2 +-
- bioauth/src/bioauthwidget.cpp            |  2 +-
- bioauth/src/biodevices.cpp               |  2 +-
- bioauth/src/biodeviceswidget.cpp         |  2 +-
- bioauth/src/biotypes.cpp                 |  2 +-
- bioauth/src/giodbus.cpp                  |  2 +-
- bioauth/src/loginoptionswidget.cpp       |  2 +-
- bioauth/src/uniauthservice.cpp           |  2 +-
- common/generic.cpp                       |  2 +-
- common/generic.h                         |  2 +-
- pam-biometric/biotest.c                  |  2 +-
- pam-biometric/logger.c                   |  2 +-
- pam-biometric/pam_biometric.c            |  2 +-
- polkit-agent/src/PolkitAgent.cpp         |  2 +-
- polkit-agent/src/PolkitListener.cpp      |  2 +-
- polkit-agent/src/PolkitListener.h        |  2 +-
- polkit-agent/src/kalabel.cpp             | 17 +++++++++++++++++
- polkit-agent/src/kalabel.h               | 17 +++++++++++++++++
- polkit-agent/src/mainwindow.cpp          |  2 +-
- polkit-agent/src/mainwindow.h            |  2 +-
- polkit-agent/src/modeButton.cpp          | 17 +++++++++++++++++
- polkit-agent/src/modeButton.h            | 17 +++++++++++++++++
- polkit-agent/src/pam-tally.c             |  2 +-
- polkit-agent/src/pam-tally.h             |  2 +-
- polkit-agent/src/sessionmanager.cpp      |  2 +-
- polkit-agent/src/sessionmanager.h        |  2 +-
- polkit-agent/src/types.h                 |  2 +-
- polkit-agent/src/users.cpp               |  2 +-
- polkit-agent/src/users.h                 |  2 +-
- uniauth-backend/src/CSingleton.h         | 17 +++++++++++++++++
- uniauth-backend/src/biodeviceinfo.cpp    |  2 +-
- uniauth-backend/src/biodeviceinfo.h      |  2 +-
- uniauth-backend/src/main.cpp             |  2 +-
- uniauth-backend/src/personalizeddata.cpp | 17 +++++++++++++++++
- uniauth-backend/src/personalizeddata.h   | 17 +++++++++++++++++
- uniauth-backend/src/rsac.cpp             | 17 +++++++++++++++++
- uniauth-backend/src/rsac.h               | 17 +++++++++++++++++
- uniauth-backend/src/serviceinterface.cpp |  2 +-
- uniauth-backend/src/serviceinterface.h   |  2 +-
- uniauth-backend/src/servicemanager.cpp   |  2 +-
- uniauth-backend/src/servicemanager.h     |  2 +-
- 53 files changed, 197 insertions(+), 44 deletions(-)
-
-diff --git a/bioauth-bin/src/keywatcher.cpp b/bioauth-bin/src/keywatcher.cpp
-index aaa4398..a2cf2f9 100644
---- a/bioauth-bin/src/keywatcher.cpp
-+++ b/bioauth-bin/src/keywatcher.cpp
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/bioauth-bin/src/keywatcher.h b/bioauth-bin/src/keywatcher.h
-index 31db81e..ded83e3 100644
---- a/bioauth-bin/src/keywatcher.h
-+++ b/bioauth-bin/src/keywatcher.h
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/bioauth-bin/src/main.cpp b/bioauth-bin/src/main.cpp
-index ae13ec6..81ffdb4 100644
---- a/bioauth-bin/src/main.cpp
-+++ b/bioauth-bin/src/main.cpp
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/bioauth/include/bioauth.h b/bioauth/include/bioauth.h
-index 56588f7..477d3b3 100644
---- a/bioauth/include/bioauth.h
-+++ b/bioauth/include/bioauth.h
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/bioauth/include/bioauthwidget.h b/bioauth/include/bioauthwidget.h
-index 6779f48..a017080 100644
---- a/bioauth/include/bioauthwidget.h
-+++ b/bioauth/include/bioauthwidget.h
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/bioauth/include/biodevices.h b/bioauth/include/biodevices.h
-index 630f25f..59c2785 100644
---- a/bioauth/include/biodevices.h
-+++ b/bioauth/include/biodevices.h
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/bioauth/include/biodeviceswidget.h b/bioauth/include/biodeviceswidget.h
-index b4267de..711af03 100644
---- a/bioauth/include/biodeviceswidget.h
-+++ b/bioauth/include/biodeviceswidget.h
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/bioauth/include/biometric.h b/bioauth/include/biometric.h
-index 8d606a7..dfab2fa 100644
---- a/bioauth/include/biometric.h
-+++ b/bioauth/include/biometric.h
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/bioauth/include/biotypes.h b/bioauth/include/biotypes.h
-index b286edb..e37ace0 100644
---- a/bioauth/include/biotypes.h
-+++ b/bioauth/include/biotypes.h
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/bioauth/include/giodbus.h b/bioauth/include/giodbus.h
-index 9ae3213..9bdcc4e 100644
---- a/bioauth/include/giodbus.h
-+++ b/bioauth/include/giodbus.h
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2023 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/bioauth/include/loginoptionswidget.h b/bioauth/include/loginoptionswidget.h
-index 7ef3db9..dbbe1af 100644
---- a/bioauth/include/loginoptionswidget.h
-+++ b/bioauth/include/loginoptionswidget.h
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2023 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/bioauth/include/uniauthservice.h b/bioauth/include/uniauthservice.h
-index 3ed8707..774c646 100644
---- a/bioauth/include/uniauthservice.h
-+++ b/bioauth/include/uniauthservice.h
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2022 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/bioauth/src/bioauth.cpp b/bioauth/src/bioauth.cpp
-index bf725dc..98143e6 100644
---- a/bioauth/src/bioauth.cpp
-+++ b/bioauth/src/bioauth.cpp
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/bioauth/src/bioauthwidget.cpp b/bioauth/src/bioauthwidget.cpp
-index 9bacd6b..f163fae 100644
---- a/bioauth/src/bioauthwidget.cpp
-+++ b/bioauth/src/bioauthwidget.cpp
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/bioauth/src/biodevices.cpp b/bioauth/src/biodevices.cpp
-index 2f6a366..e1287b0 100644
---- a/bioauth/src/biodevices.cpp
-+++ b/bioauth/src/biodevices.cpp
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/bioauth/src/biodeviceswidget.cpp b/bioauth/src/biodeviceswidget.cpp
-index 7011361..bc83d0a 100644
---- a/bioauth/src/biodeviceswidget.cpp
-+++ b/bioauth/src/biodeviceswidget.cpp
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/bioauth/src/biotypes.cpp b/bioauth/src/biotypes.cpp
-index 3a52a85..7ea5518 100644
---- a/bioauth/src/biotypes.cpp
-+++ b/bioauth/src/biotypes.cpp
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/bioauth/src/giodbus.cpp b/bioauth/src/giodbus.cpp
-index c30098b..524734d 100644
---- a/bioauth/src/giodbus.cpp
-+++ b/bioauth/src/giodbus.cpp
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2023 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/bioauth/src/loginoptionswidget.cpp b/bioauth/src/loginoptionswidget.cpp
-index b089b33..bc54363 100644
---- a/bioauth/src/loginoptionswidget.cpp
-+++ b/bioauth/src/loginoptionswidget.cpp
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2023 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/bioauth/src/uniauthservice.cpp b/bioauth/src/uniauthservice.cpp
-index 8032cea..3996e34 100644
---- a/bioauth/src/uniauthservice.cpp
-+++ b/bioauth/src/uniauthservice.cpp
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2022 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/common/generic.cpp b/common/generic.cpp
-index 9e94b4a..76be0e4 100644
---- a/common/generic.cpp
-+++ b/common/generic.cpp
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/common/generic.h b/common/generic.h
-index 7d08d40..b00f6af 100644
---- a/common/generic.h
-+++ b/common/generic.h
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/pam-biometric/biotest.c b/pam-biometric/biotest.c
-index f938f13..d15ae4d 100644
---- a/pam-biometric/biotest.c
-+++ b/pam-biometric/biotest.c
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/pam-biometric/logger.c b/pam-biometric/logger.c
-index 47f70ce..6edce70 100644
---- a/pam-biometric/logger.c
-+++ b/pam-biometric/logger.c
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/pam-biometric/pam_biometric.c b/pam-biometric/pam_biometric.c
-index c639e53..6c1b054 100644
---- a/pam-biometric/pam_biometric.c
-+++ b/pam-biometric/pam_biometric.c
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/polkit-agent/src/PolkitAgent.cpp b/polkit-agent/src/PolkitAgent.cpp
-index aa9d5c7..183d17e 100644
---- a/polkit-agent/src/PolkitAgent.cpp
-+++ b/polkit-agent/src/PolkitAgent.cpp
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/polkit-agent/src/PolkitListener.cpp b/polkit-agent/src/PolkitListener.cpp
-index 26b0f9a..f15c9c9 100644
---- a/polkit-agent/src/PolkitListener.cpp
-+++ b/polkit-agent/src/PolkitListener.cpp
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/polkit-agent/src/PolkitListener.h b/polkit-agent/src/PolkitListener.h
-index 0f2420e..850077c 100644
---- a/polkit-agent/src/PolkitListener.h
-+++ b/polkit-agent/src/PolkitListener.h
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/polkit-agent/src/kalabel.cpp b/polkit-agent/src/kalabel.cpp
-index 2666f0b..a74f9da 100644
---- a/polkit-agent/src/kalabel.cpp
-+++ b/polkit-agent/src/kalabel.cpp
-@@ -1,3 +1,20 @@
-+/*
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 3, or (at your option)
-+ * any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
-+ *
-+**/
- #include "kalabel.h"
- 
- 
-diff --git a/polkit-agent/src/kalabel.h b/polkit-agent/src/kalabel.h
-index f2678ac..8fc9b53 100644
---- a/polkit-agent/src/kalabel.h
-+++ b/polkit-agent/src/kalabel.h
-@@ -1,3 +1,20 @@
-+/*
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 3, or (at your option)
-+ * any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
-+ *
-+**/
- #ifndef KALABEL_H
- #define KALABEL_H
- 
-diff --git a/polkit-agent/src/mainwindow.cpp b/polkit-agent/src/mainwindow.cpp
-index 401700d..74a0730 100644
---- a/polkit-agent/src/mainwindow.cpp
-+++ b/polkit-agent/src/mainwindow.cpp
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/polkit-agent/src/mainwindow.h b/polkit-agent/src/mainwindow.h
-index 8b3dbd2..898f2d0 100644
---- a/polkit-agent/src/mainwindow.h
-+++ b/polkit-agent/src/mainwindow.h
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/polkit-agent/src/modeButton.cpp b/polkit-agent/src/modeButton.cpp
-index 66f712c..66fd94d 100644
---- a/polkit-agent/src/modeButton.cpp
-+++ b/polkit-agent/src/modeButton.cpp
-@@ -1,3 +1,20 @@
-+/*
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 3, or (at your option)
-+ * any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
-+ *
-+**/
- #include "modeButton.h"
- 
- #include <QIcon>
-diff --git a/polkit-agent/src/modeButton.h b/polkit-agent/src/modeButton.h
-index b8fa08f..51ab67f 100644
---- a/polkit-agent/src/modeButton.h
-+++ b/polkit-agent/src/modeButton.h
-@@ -1,3 +1,20 @@
-+/*
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 3, or (at your option)
-+ * any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
-+ *
-+**/
- #ifndef MODEBUTTON_H
- #define MODEBUTTON_H
- 
-diff --git a/polkit-agent/src/pam-tally.c b/polkit-agent/src/pam-tally.c
-index 50a3055..da2651b 100644
---- a/polkit-agent/src/pam-tally.c
-+++ b/polkit-agent/src/pam-tally.c
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/polkit-agent/src/pam-tally.h b/polkit-agent/src/pam-tally.h
-index 0e27338..2585f56 100644
---- a/polkit-agent/src/pam-tally.h
-+++ b/polkit-agent/src/pam-tally.h
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/polkit-agent/src/sessionmanager.cpp b/polkit-agent/src/sessionmanager.cpp
-index ddec665..61d4ace 100644
---- a/polkit-agent/src/sessionmanager.cpp
-+++ b/polkit-agent/src/sessionmanager.cpp
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/polkit-agent/src/sessionmanager.h b/polkit-agent/src/sessionmanager.h
-index 8898901..8192193 100644
---- a/polkit-agent/src/sessionmanager.h
-+++ b/polkit-agent/src/sessionmanager.h
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/polkit-agent/src/types.h b/polkit-agent/src/types.h
-index 87fcc29..ded7185 100644
---- a/polkit-agent/src/types.h
-+++ b/polkit-agent/src/types.h
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/polkit-agent/src/users.cpp b/polkit-agent/src/users.cpp
-index 956a9d9..64395c5 100644
---- a/polkit-agent/src/users.cpp
-+++ b/polkit-agent/src/users.cpp
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/polkit-agent/src/users.h b/polkit-agent/src/users.h
-index d43a01d..509cb3f 100644
---- a/polkit-agent/src/users.h
-+++ b/polkit-agent/src/users.h
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/uniauth-backend/src/CSingleton.h b/uniauth-backend/src/CSingleton.h
-index 99c42d8..42d6aee 100644
---- a/uniauth-backend/src/CSingleton.h
-+++ b/uniauth-backend/src/CSingleton.h
-@@ -1,3 +1,20 @@
-+/*
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 3, or (at your option)
-+ * any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
-+ *
-+**/
- #ifndef CSINGLETON_H
- #define CSINGLETON_H
- 
-diff --git a/uniauth-backend/src/biodeviceinfo.cpp b/uniauth-backend/src/biodeviceinfo.cpp
-index d386d2b..b9782df 100644
---- a/uniauth-backend/src/biodeviceinfo.cpp
-+++ b/uniauth-backend/src/biodeviceinfo.cpp
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2022 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/uniauth-backend/src/biodeviceinfo.h b/uniauth-backend/src/biodeviceinfo.h
-index 87c5f87..55195f6 100644
---- a/uniauth-backend/src/biodeviceinfo.h
-+++ b/uniauth-backend/src/biodeviceinfo.h
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2022 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/uniauth-backend/src/main.cpp b/uniauth-backend/src/main.cpp
-index f719754..b472046 100644
---- a/uniauth-backend/src/main.cpp
-+++ b/uniauth-backend/src/main.cpp
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2022 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/uniauth-backend/src/personalizeddata.cpp b/uniauth-backend/src/personalizeddata.cpp
-index d093977..a5a0a97 100644
---- a/uniauth-backend/src/personalizeddata.cpp
-+++ b/uniauth-backend/src/personalizeddata.cpp
-@@ -1,3 +1,20 @@
-+/*
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 3, or (at your option)
-+ * any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
-+ *
-+**/
- #include "personalizeddata.h"
- 
- #include <QJsonDocument>
-diff --git a/uniauth-backend/src/personalizeddata.h b/uniauth-backend/src/personalizeddata.h
-index b8fb872..1c6dafc 100644
---- a/uniauth-backend/src/personalizeddata.h
-+++ b/uniauth-backend/src/personalizeddata.h
-@@ -1,3 +1,20 @@
-+/*
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 3, or (at your option)
-+ * any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
-+ *
-+**/
- #ifndef PERSONALIZEDDATA_H
- #define PERSONALIZEDDATA_H
- 
-diff --git a/uniauth-backend/src/rsac.cpp b/uniauth-backend/src/rsac.cpp
-index 0c6877d..5590c6f 100644
---- a/uniauth-backend/src/rsac.cpp
-+++ b/uniauth-backend/src/rsac.cpp
-@@ -1,3 +1,20 @@
-+/*
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 3, or (at your option)
-+ * any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
-+ *
-+**/
- #include "rsac.h"
- #include <openssl/rsa.h>
- #include <openssl/pem.h>
-diff --git a/uniauth-backend/src/rsac.h b/uniauth-backend/src/rsac.h
-index 93d4678..f51c31a 100644
---- a/uniauth-backend/src/rsac.h
-+++ b/uniauth-backend/src/rsac.h
-@@ -1,3 +1,20 @@
-+/*
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 3, or (at your option)
-+ * any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
-+ *
-+**/
- #ifndef RSAC_H
- #define RSAC_H
- 
-diff --git a/uniauth-backend/src/serviceinterface.cpp b/uniauth-backend/src/serviceinterface.cpp
-index 58670dd..6969efb 100644
---- a/uniauth-backend/src/serviceinterface.cpp
-+++ b/uniauth-backend/src/serviceinterface.cpp
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2022 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/uniauth-backend/src/serviceinterface.h b/uniauth-backend/src/serviceinterface.h
-index cf13d8c..6edf7b6 100644
---- a/uniauth-backend/src/serviceinterface.h
-+++ b/uniauth-backend/src/serviceinterface.h
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2022 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/uniauth-backend/src/servicemanager.cpp b/uniauth-backend/src/servicemanager.cpp
-index a9b61c3..daacec5 100644
---- a/uniauth-backend/src/servicemanager.cpp
-+++ b/uniauth-backend/src/servicemanager.cpp
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-diff --git a/uniauth-backend/src/servicemanager.h b/uniauth-backend/src/servicemanager.h
-index 6c85df3..a4bbbb8 100644
---- a/uniauth-backend/src/servicemanager.h
-+++ b/uniauth-backend/src/servicemanager.h
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
-+ * Copyright (C) 2023 KylinSoftCo., Ltd.
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
diff -Nru ukui-biometric-auth-4.10.0.0/debian/patches/0006-COPYING-LICENSE.patch ukui-biometric-auth-4.20.0.0/debian/patches/0006-COPYING-LICENSE.patch
--- ukui-biometric-auth-4.10.0.0/debian/patches/0006-COPYING-LICENSE.patch	2024-04-23 10:31:46.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/debian/patches/0006-COPYING-LICENSE.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,1371 +0,0 @@
-From: handsome_feng <jianfengli@ubuntukylin.com>
-Date: Sat, 16 Mar 2024 15:31:53 +0800
-Subject: COPYING -> LICENSE
-
----
- COPYING | 674 ----------------------------------------------------------------
- LICENSE | 674 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 674 insertions(+), 674 deletions(-)
- delete mode 100644 COPYING
- create mode 100644 LICENSE
-
-diff --git a/COPYING b/COPYING
-deleted file mode 100644
-index 94a9ed0..0000000
---- a/COPYING
-+++ /dev/null
-@@ -1,674 +0,0 @@
--                    GNU GENERAL PUBLIC LICENSE
--                       Version 3, 29 June 2007
--
-- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
-- Everyone is permitted to copy and distribute verbatim copies
-- of this license document, but changing it is not allowed.
--
--                            Preamble
--
--  The GNU General Public License is a free, copyleft license for
--software and other kinds of works.
--
--  The licenses for most software and other practical works are designed
--to take away your freedom to share and change the works.  By contrast,
--the GNU General Public License is intended to guarantee your freedom to
--share and change all versions of a program--to make sure it remains free
--software for all its users.  We, the Free Software Foundation, use the
--GNU General Public License for most of our software; it applies also to
--any other work released this way by its authors.  You can apply it to
--your programs, too.
--
--  When we speak of free software, we are referring to freedom, not
--price.  Our General Public Licenses are designed to make sure that you
--have the freedom to distribute copies of free software (and charge for
--them if you wish), that you receive source code or can get it if you
--want it, that you can change the software or use pieces of it in new
--free programs, and that you know you can do these things.
--
--  To protect your rights, we need to prevent others from denying you
--these rights or asking you to surrender the rights.  Therefore, you have
--certain responsibilities if you distribute copies of the software, or if
--you modify it: responsibilities to respect the freedom of others.
--
--  For example, if you distribute copies of such a program, whether
--gratis or for a fee, you must pass on to the recipients the same
--freedoms that you received.  You must make sure that they, too, receive
--or can get the source code.  And you must show them these terms so they
--know their rights.
--
--  Developers that use the GNU GPL protect your rights with two steps:
--(1) assert copyright on the software, and (2) offer you this License
--giving you legal permission to copy, distribute and/or modify it.
--
--  For the developers' and authors' protection, the GPL clearly explains
--that there is no warranty for this free software.  For both users' and
--authors' sake, the GPL requires that modified versions be marked as
--changed, so that their problems will not be attributed erroneously to
--authors of previous versions.
--
--  Some devices are designed to deny users access to install or run
--modified versions of the software inside them, although the manufacturer
--can do so.  This is fundamentally incompatible with the aim of
--protecting users' freedom to change the software.  The systematic
--pattern of such abuse occurs in the area of products for individuals to
--use, which is precisely where it is most unacceptable.  Therefore, we
--have designed this version of the GPL to prohibit the practice for those
--products.  If such problems arise substantially in other domains, we
--stand ready to extend this provision to those domains in future versions
--of the GPL, as needed to protect the freedom of users.
--
--  Finally, every program is threatened constantly by software patents.
--States should not allow patents to restrict development and use of
--software on general-purpose computers, but in those that do, we wish to
--avoid the special danger that patents applied to a free program could
--make it effectively proprietary.  To prevent this, the GPL assures that
--patents cannot be used to render the program non-free.
--
--  The precise terms and conditions for copying, distribution and
--modification follow.
--
--                       TERMS AND CONDITIONS
--
--  0. Definitions.
--
--  "This License" refers to version 3 of the GNU General Public License.
--
--  "Copyright" also means copyright-like laws that apply to other kinds of
--works, such as semiconductor masks.
--
--  "The Program" refers to any copyrightable work licensed under this
--License.  Each licensee is addressed as "you".  "Licensees" and
--"recipients" may be individuals or organizations.
--
--  To "modify" a work means to copy from or adapt all or part of the work
--in a fashion requiring copyright permission, other than the making of an
--exact copy.  The resulting work is called a "modified version" of the
--earlier work or a work "based on" the earlier work.
--
--  A "covered work" means either the unmodified Program or a work based
--on the Program.
--
--  To "propagate" a work means to do anything with it that, without
--permission, would make you directly or secondarily liable for
--infringement under applicable copyright law, except executing it on a
--computer or modifying a private copy.  Propagation includes copying,
--distribution (with or without modification), making available to the
--public, and in some countries other activities as well.
--
--  To "convey" a work means any kind of propagation that enables other
--parties to make or receive copies.  Mere interaction with a user through
--a computer network, with no transfer of a copy, is not conveying.
--
--  An interactive user interface displays "Appropriate Legal Notices"
--to the extent that it includes a convenient and prominently visible
--feature that (1) displays an appropriate copyright notice, and (2)
--tells the user that there is no warranty for the work (except to the
--extent that warranties are provided), that licensees may convey the
--work under this License, and how to view a copy of this License.  If
--the interface presents a list of user commands or options, such as a
--menu, a prominent item in the list meets this criterion.
--
--  1. Source Code.
--
--  The "source code" for a work means the preferred form of the work
--for making modifications to it.  "Object code" means any non-source
--form of a work.
--
--  A "Standard Interface" means an interface that either is an official
--standard defined by a recognized standards body, or, in the case of
--interfaces specified for a particular programming language, one that
--is widely used among developers working in that language.
--
--  The "System Libraries" of an executable work include anything, other
--than the work as a whole, that (a) is included in the normal form of
--packaging a Major Component, but which is not part of that Major
--Component, and (b) serves only to enable use of the work with that
--Major Component, or to implement a Standard Interface for which an
--implementation is available to the public in source code form.  A
--"Major Component", in this context, means a major essential component
--(kernel, window system, and so on) of the specific operating system
--(if any) on which the executable work runs, or a compiler used to
--produce the work, or an object code interpreter used to run it.
--
--  The "Corresponding Source" for a work in object code form means all
--the source code needed to generate, install, and (for an executable
--work) run the object code and to modify the work, including scripts to
--control those activities.  However, it does not include the work's
--System Libraries, or general-purpose tools or generally available free
--programs which are used unmodified in performing those activities but
--which are not part of the work.  For example, Corresponding Source
--includes interface definition files associated with source files for
--the work, and the source code for shared libraries and dynamically
--linked subprograms that the work is specifically designed to require,
--such as by intimate data communication or control flow between those
--subprograms and other parts of the work.
--
--  The Corresponding Source need not include anything that users
--can regenerate automatically from other parts of the Corresponding
--Source.
--
--  The Corresponding Source for a work in source code form is that
--same work.
--
--  2. Basic Permissions.
--
--  All rights granted under this License are granted for the term of
--copyright on the Program, and are irrevocable provided the stated
--conditions are met.  This License explicitly affirms your unlimited
--permission to run the unmodified Program.  The output from running a
--covered work is covered by this License only if the output, given its
--content, constitutes a covered work.  This License acknowledges your
--rights of fair use or other equivalent, as provided by copyright law.
--
--  You may make, run and propagate covered works that you do not
--convey, without conditions so long as your license otherwise remains
--in force.  You may convey covered works to others for the sole purpose
--of having them make modifications exclusively for you, or provide you
--with facilities for running those works, provided that you comply with
--the terms of this License in conveying all material for which you do
--not control copyright.  Those thus making or running the covered works
--for you must do so exclusively on your behalf, under your direction
--and control, on terms that prohibit them from making any copies of
--your copyrighted material outside their relationship with you.
--
--  Conveying under any other circumstances is permitted solely under
--the conditions stated below.  Sublicensing is not allowed; section 10
--makes it unnecessary.
--
--  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
--
--  No covered work shall be deemed part of an effective technological
--measure under any applicable law fulfilling obligations under article
--11 of the WIPO copyright treaty adopted on 20 December 1996, or
--similar laws prohibiting or restricting circumvention of such
--measures.
--
--  When you convey a covered work, you waive any legal power to forbid
--circumvention of technological measures to the extent such circumvention
--is effected by exercising rights under this License with respect to
--the covered work, and you disclaim any intention to limit operation or
--modification of the work as a means of enforcing, against the work's
--users, your or third parties' legal rights to forbid circumvention of
--technological measures.
--
--  4. Conveying Verbatim Copies.
--
--  You may convey verbatim copies of the Program's source code as you
--receive it, in any medium, provided that you conspicuously and
--appropriately publish on each copy an appropriate copyright notice;
--keep intact all notices stating that this License and any
--non-permissive terms added in accord with section 7 apply to the code;
--keep intact all notices of the absence of any warranty; and give all
--recipients a copy of this License along with the Program.
--
--  You may charge any price or no price for each copy that you convey,
--and you may offer support or warranty protection for a fee.
--
--  5. Conveying Modified Source Versions.
--
--  You may convey a work based on the Program, or the modifications to
--produce it from the Program, in the form of source code under the
--terms of section 4, provided that you also meet all of these conditions:
--
--    a) The work must carry prominent notices stating that you modified
--    it, and giving a relevant date.
--
--    b) The work must carry prominent notices stating that it is
--    released under this License and any conditions added under section
--    7.  This requirement modifies the requirement in section 4 to
--    "keep intact all notices".
--
--    c) You must license the entire work, as a whole, under this
--    License to anyone who comes into possession of a copy.  This
--    License will therefore apply, along with any applicable section 7
--    additional terms, to the whole of the work, and all its parts,
--    regardless of how they are packaged.  This License gives no
--    permission to license the work in any other way, but it does not
--    invalidate such permission if you have separately received it.
--
--    d) If the work has interactive user interfaces, each must display
--    Appropriate Legal Notices; however, if the Program has interactive
--    interfaces that do not display Appropriate Legal Notices, your
--    work need not make them do so.
--
--  A compilation of a covered work with other separate and independent
--works, which are not by their nature extensions of the covered work,
--and which are not combined with it such as to form a larger program,
--in or on a volume of a storage or distribution medium, is called an
--"aggregate" if the compilation and its resulting copyright are not
--used to limit the access or legal rights of the compilation's users
--beyond what the individual works permit.  Inclusion of a covered work
--in an aggregate does not cause this License to apply to the other
--parts of the aggregate.
--
--  6. Conveying Non-Source Forms.
--
--  You may convey a covered work in object code form under the terms
--of sections 4 and 5, provided that you also convey the
--machine-readable Corresponding Source under the terms of this License,
--in one of these ways:
--
--    a) Convey the object code in, or embodied in, a physical product
--    (including a physical distribution medium), accompanied by the
--    Corresponding Source fixed on a durable physical medium
--    customarily used for software interchange.
--
--    b) Convey the object code in, or embodied in, a physical product
--    (including a physical distribution medium), accompanied by a
--    written offer, valid for at least three years and valid for as
--    long as you offer spare parts or customer support for that product
--    model, to give anyone who possesses the object code either (1) a
--    copy of the Corresponding Source for all the software in the
--    product that is covered by this License, on a durable physical
--    medium customarily used for software interchange, for a price no
--    more than your reasonable cost of physically performing this
--    conveying of source, or (2) access to copy the
--    Corresponding Source from a network server at no charge.
--
--    c) Convey individual copies of the object code with a copy of the
--    written offer to provide the Corresponding Source.  This
--    alternative is allowed only occasionally and noncommercially, and
--    only if you received the object code with such an offer, in accord
--    with subsection 6b.
--
--    d) Convey the object code by offering access from a designated
--    place (gratis or for a charge), and offer equivalent access to the
--    Corresponding Source in the same way through the same place at no
--    further charge.  You need not require recipients to copy the
--    Corresponding Source along with the object code.  If the place to
--    copy the object code is a network server, the Corresponding Source
--    may be on a different server (operated by you or a third party)
--    that supports equivalent copying facilities, provided you maintain
--    clear directions next to the object code saying where to find the
--    Corresponding Source.  Regardless of what server hosts the
--    Corresponding Source, you remain obligated to ensure that it is
--    available for as long as needed to satisfy these requirements.
--
--    e) Convey the object code using peer-to-peer transmission, provided
--    you inform other peers where the object code and Corresponding
--    Source of the work are being offered to the general public at no
--    charge under subsection 6d.
--
--  A separable portion of the object code, whose source code is excluded
--from the Corresponding Source as a System Library, need not be
--included in conveying the object code work.
--
--  A "User Product" is either (1) a "consumer product", which means any
--tangible personal property which is normally used for personal, family,
--or household purposes, or (2) anything designed or sold for incorporation
--into a dwelling.  In determining whether a product is a consumer product,
--doubtful cases shall be resolved in favor of coverage.  For a particular
--product received by a particular user, "normally used" refers to a
--typical or common use of that class of product, regardless of the status
--of the particular user or of the way in which the particular user
--actually uses, or expects or is expected to use, the product.  A product
--is a consumer product regardless of whether the product has substantial
--commercial, industrial or non-consumer uses, unless such uses represent
--the only significant mode of use of the product.
--
--  "Installation Information" for a User Product means any methods,
--procedures, authorization keys, or other information required to install
--and execute modified versions of a covered work in that User Product from
--a modified version of its Corresponding Source.  The information must
--suffice to ensure that the continued functioning of the modified object
--code is in no case prevented or interfered with solely because
--modification has been made.
--
--  If you convey an object code work under this section in, or with, or
--specifically for use in, a User Product, and the conveying occurs as
--part of a transaction in which the right of possession and use of the
--User Product is transferred to the recipient in perpetuity or for a
--fixed term (regardless of how the transaction is characterized), the
--Corresponding Source conveyed under this section must be accompanied
--by the Installation Information.  But this requirement does not apply
--if neither you nor any third party retains the ability to install
--modified object code on the User Product (for example, the work has
--been installed in ROM).
--
--  The requirement to provide Installation Information does not include a
--requirement to continue to provide support service, warranty, or updates
--for a work that has been modified or installed by the recipient, or for
--the User Product in which it has been modified or installed.  Access to a
--network may be denied when the modification itself materially and
--adversely affects the operation of the network or violates the rules and
--protocols for communication across the network.
--
--  Corresponding Source conveyed, and Installation Information provided,
--in accord with this section must be in a format that is publicly
--documented (and with an implementation available to the public in
--source code form), and must require no special password or key for
--unpacking, reading or copying.
--
--  7. Additional Terms.
--
--  "Additional permissions" are terms that supplement the terms of this
--License by making exceptions from one or more of its conditions.
--Additional permissions that are applicable to the entire Program shall
--be treated as though they were included in this License, to the extent
--that they are valid under applicable law.  If additional permissions
--apply only to part of the Program, that part may be used separately
--under those permissions, but the entire Program remains governed by
--this License without regard to the additional permissions.
--
--  When you convey a copy of a covered work, you may at your option
--remove any additional permissions from that copy, or from any part of
--it.  (Additional permissions may be written to require their own
--removal in certain cases when you modify the work.)  You may place
--additional permissions on material, added by you to a covered work,
--for which you have or can give appropriate copyright permission.
--
--  Notwithstanding any other provision of this License, for material you
--add to a covered work, you may (if authorized by the copyright holders of
--that material) supplement the terms of this License with terms:
--
--    a) Disclaiming warranty or limiting liability differently from the
--    terms of sections 15 and 16 of this License; or
--
--    b) Requiring preservation of specified reasonable legal notices or
--    author attributions in that material or in the Appropriate Legal
--    Notices displayed by works containing it; or
--
--    c) Prohibiting misrepresentation of the origin of that material, or
--    requiring that modified versions of such material be marked in
--    reasonable ways as different from the original version; or
--
--    d) Limiting the use for publicity purposes of names of licensors or
--    authors of the material; or
--
--    e) Declining to grant rights under trademark law for use of some
--    trade names, trademarks, or service marks; or
--
--    f) Requiring indemnification of licensors and authors of that
--    material by anyone who conveys the material (or modified versions of
--    it) with contractual assumptions of liability to the recipient, for
--    any liability that these contractual assumptions directly impose on
--    those licensors and authors.
--
--  All other non-permissive additional terms are considered "further
--restrictions" within the meaning of section 10.  If the Program as you
--received it, or any part of it, contains a notice stating that it is
--governed by this License along with a term that is a further
--restriction, you may remove that term.  If a license document contains
--a further restriction but permits relicensing or conveying under this
--License, you may add to a covered work material governed by the terms
--of that license document, provided that the further restriction does
--not survive such relicensing or conveying.
--
--  If you add terms to a covered work in accord with this section, you
--must place, in the relevant source files, a statement of the
--additional terms that apply to those files, or a notice indicating
--where to find the applicable terms.
--
--  Additional terms, permissive or non-permissive, may be stated in the
--form of a separately written license, or stated as exceptions;
--the above requirements apply either way.
--
--  8. Termination.
--
--  You may not propagate or modify a covered work except as expressly
--provided under this License.  Any attempt otherwise to propagate or
--modify it is void, and will automatically terminate your rights under
--this License (including any patent licenses granted under the third
--paragraph of section 11).
--
--  However, if you cease all violation of this License, then your
--license from a particular copyright holder is reinstated (a)
--provisionally, unless and until the copyright holder explicitly and
--finally terminates your license, and (b) permanently, if the copyright
--holder fails to notify you of the violation by some reasonable means
--prior to 60 days after the cessation.
--
--  Moreover, your license from a particular copyright holder is
--reinstated permanently if the copyright holder notifies you of the
--violation by some reasonable means, this is the first time you have
--received notice of violation of this License (for any work) from that
--copyright holder, and you cure the violation prior to 30 days after
--your receipt of the notice.
--
--  Termination of your rights under this section does not terminate the
--licenses of parties who have received copies or rights from you under
--this License.  If your rights have been terminated and not permanently
--reinstated, you do not qualify to receive new licenses for the same
--material under section 10.
--
--  9. Acceptance Not Required for Having Copies.
--
--  You are not required to accept this License in order to receive or
--run a copy of the Program.  Ancillary propagation of a covered work
--occurring solely as a consequence of using peer-to-peer transmission
--to receive a copy likewise does not require acceptance.  However,
--nothing other than this License grants you permission to propagate or
--modify any covered work.  These actions infringe copyright if you do
--not accept this License.  Therefore, by modifying or propagating a
--covered work, you indicate your acceptance of this License to do so.
--
--  10. Automatic Licensing of Downstream Recipients.
--
--  Each time you convey a covered work, the recipient automatically
--receives a license from the original licensors, to run, modify and
--propagate that work, subject to this License.  You are not responsible
--for enforcing compliance by third parties with this License.
--
--  An "entity transaction" is a transaction transferring control of an
--organization, or substantially all assets of one, or subdividing an
--organization, or merging organizations.  If propagation of a covered
--work results from an entity transaction, each party to that
--transaction who receives a copy of the work also receives whatever
--licenses to the work the party's predecessor in interest had or could
--give under the previous paragraph, plus a right to possession of the
--Corresponding Source of the work from the predecessor in interest, if
--the predecessor has it or can get it with reasonable efforts.
--
--  You may not impose any further restrictions on the exercise of the
--rights granted or affirmed under this License.  For example, you may
--not impose a license fee, royalty, or other charge for exercise of
--rights granted under this License, and you may not initiate litigation
--(including a cross-claim or counterclaim in a lawsuit) alleging that
--any patent claim is infringed by making, using, selling, offering for
--sale, or importing the Program or any portion of it.
--
--  11. Patents.
--
--  A "contributor" is a copyright holder who authorizes use under this
--License of the Program or a work on which the Program is based.  The
--work thus licensed is called the contributor's "contributor version".
--
--  A contributor's "essential patent claims" are all patent claims
--owned or controlled by the contributor, whether already acquired or
--hereafter acquired, that would be infringed by some manner, permitted
--by this License, of making, using, or selling its contributor version,
--but do not include claims that would be infringed only as a
--consequence of further modification of the contributor version.  For
--purposes of this definition, "control" includes the right to grant
--patent sublicenses in a manner consistent with the requirements of
--this License.
--
--  Each contributor grants you a non-exclusive, worldwide, royalty-free
--patent license under the contributor's essential patent claims, to
--make, use, sell, offer for sale, import and otherwise run, modify and
--propagate the contents of its contributor version.
--
--  In the following three paragraphs, a "patent license" is any express
--agreement or commitment, however denominated, not to enforce a patent
--(such as an express permission to practice a patent or covenant not to
--sue for patent infringement).  To "grant" such a patent license to a
--party means to make such an agreement or commitment not to enforce a
--patent against the party.
--
--  If you convey a covered work, knowingly relying on a patent license,
--and the Corresponding Source of the work is not available for anyone
--to copy, free of charge and under the terms of this License, through a
--publicly available network server or other readily accessible means,
--then you must either (1) cause the Corresponding Source to be so
--available, or (2) arrange to deprive yourself of the benefit of the
--patent license for this particular work, or (3) arrange, in a manner
--consistent with the requirements of this License, to extend the patent
--license to downstream recipients.  "Knowingly relying" means you have
--actual knowledge that, but for the patent license, your conveying the
--covered work in a country, or your recipient's use of the covered work
--in a country, would infringe one or more identifiable patents in that
--country that you have reason to believe are valid.
--
--  If, pursuant to or in connection with a single transaction or
--arrangement, you convey, or propagate by procuring conveyance of, a
--covered work, and grant a patent license to some of the parties
--receiving the covered work authorizing them to use, propagate, modify
--or convey a specific copy of the covered work, then the patent license
--you grant is automatically extended to all recipients of the covered
--work and works based on it.
--
--  A patent license is "discriminatory" if it does not include within
--the scope of its coverage, prohibits the exercise of, or is
--conditioned on the non-exercise of one or more of the rights that are
--specifically granted under this License.  You may not convey a covered
--work if you are a party to an arrangement with a third party that is
--in the business of distributing software, under which you make payment
--to the third party based on the extent of your activity of conveying
--the work, and under which the third party grants, to any of the
--parties who would receive the covered work from you, a discriminatory
--patent license (a) in connection with copies of the covered work
--conveyed by you (or copies made from those copies), or (b) primarily
--for and in connection with specific products or compilations that
--contain the covered work, unless you entered into that arrangement,
--or that patent license was granted, prior to 28 March 2007.
--
--  Nothing in this License shall be construed as excluding or limiting
--any implied license or other defenses to infringement that may
--otherwise be available to you under applicable patent law.
--
--  12. No Surrender of Others' Freedom.
--
--  If conditions are imposed on you (whether by court order, agreement or
--otherwise) that contradict the conditions of this License, they do not
--excuse you from the conditions of this License.  If you cannot convey a
--covered work so as to satisfy simultaneously your obligations under this
--License and any other pertinent obligations, then as a consequence you may
--not convey it at all.  For example, if you agree to terms that obligate you
--to collect a royalty for further conveying from those to whom you convey
--the Program, the only way you could satisfy both those terms and this
--License would be to refrain entirely from conveying the Program.
--
--  13. Use with the GNU Affero General Public License.
--
--  Notwithstanding any other provision of this License, you have
--permission to link or combine any covered work with a work licensed
--under version 3 of the GNU Affero General Public License into a single
--combined work, and to convey the resulting work.  The terms of this
--License will continue to apply to the part which is the covered work,
--but the special requirements of the GNU Affero General Public License,
--section 13, concerning interaction through a network will apply to the
--combination as such.
--
--  14. Revised Versions of this License.
--
--  The Free Software Foundation may publish revised and/or new versions of
--the GNU General Public License from time to time.  Such new versions will
--be similar in spirit to the present version, but may differ in detail to
--address new problems or concerns.
--
--  Each version is given a distinguishing version number.  If the
--Program specifies that a certain numbered version of the GNU General
--Public License "or any later version" applies to it, you have the
--option of following the terms and conditions either of that numbered
--version or of any later version published by the Free Software
--Foundation.  If the Program does not specify a version number of the
--GNU General Public License, you may choose any version ever published
--by the Free Software Foundation.
--
--  If the Program specifies that a proxy can decide which future
--versions of the GNU General Public License can be used, that proxy's
--public statement of acceptance of a version permanently authorizes you
--to choose that version for the Program.
--
--  Later license versions may give you additional or different
--permissions.  However, no additional obligations are imposed on any
--author or copyright holder as a result of your choosing to follow a
--later version.
--
--  15. Disclaimer of Warranty.
--
--  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
--APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
--HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
--OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
--THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
--PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
--IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
--ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
--
--  16. Limitation of Liability.
--
--  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
--WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
--THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
--GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
--USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
--DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
--PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
--EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
--SUCH DAMAGES.
--
--  17. Interpretation of Sections 15 and 16.
--
--  If the disclaimer of warranty and limitation of liability provided
--above cannot be given local legal effect according to their terms,
--reviewing courts shall apply local law that most closely approximates
--an absolute waiver of all civil liability in connection with the
--Program, unless a warranty or assumption of liability accompanies a
--copy of the Program in return for a fee.
--
--                     END OF TERMS AND CONDITIONS
--
--            How to Apply These Terms to Your New Programs
--
--  If you develop a new program, and you want it to be of the greatest
--possible use to the public, the best way to achieve this is to make it
--free software which everyone can redistribute and change under these terms.
--
--  To do so, attach the following notices to the program.  It is safest
--to attach them to the start of each source file to most effectively
--state the exclusion of warranty; and each file should have at least
--the "copyright" line and a pointer to where the full notice is found.
--
--    <one line to give the program's name and a brief idea of what it does.>
--    Copyright (C) <year>  <name of author>
--
--    This program is free software: you can redistribute it and/or modify
--    it under the terms of the GNU General Public License as published by
--    the Free Software Foundation, either version 3 of the License, or
--    (at your option) any later version.
--
--    This program is distributed in the hope that it will be useful,
--    but WITHOUT ANY WARRANTY; without even the implied warranty of
--    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--    GNU General Public License for more details.
--
--    You should have received a copy of the GNU General Public License
--    along with this program.  If not, see <http://www.gnu.org/licenses/>.
--
--Also add information on how to contact you by electronic and paper mail.
--
--  If the program does terminal interaction, make it output a short
--notice like this when it starts in an interactive mode:
--
--    <program>  Copyright (C) <year>  <name of author>
--    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
--    This is free software, and you are welcome to redistribute it
--    under certain conditions; type `show c' for details.
--
--The hypothetical commands `show w' and `show c' should show the appropriate
--parts of the General Public License.  Of course, your program's commands
--might be different; for a GUI interface, you would use an "about box".
--
--  You should also get your employer (if you work as a programmer) or school,
--if any, to sign a "copyright disclaimer" for the program, if necessary.
--For more information on this, and how to apply and follow the GNU GPL, see
--<http://www.gnu.org/licenses/>.
--
--  The GNU General Public License does not permit incorporating your program
--into proprietary programs.  If your program is a subroutine library, you
--may consider it more useful to permit linking proprietary applications with
--the library.  If this is what you want to do, use the GNU Lesser General
--Public License instead of this License.  But first, please read
--<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-diff --git a/LICENSE b/LICENSE
-new file mode 100644
-index 0000000..818433e
---- /dev/null
-+++ b/LICENSE
-@@ -0,0 +1,674 @@
-+                    GNU GENERAL PUBLIC LICENSE
-+                       Version 3, 29 June 2007
-+
-+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
-+ Everyone is permitted to copy and distribute verbatim copies
-+ of this license document, but changing it is not allowed.
-+
-+                            Preamble
-+
-+  The GNU General Public License is a free, copyleft license for
-+software and other kinds of works.
-+
-+  The licenses for most software and other practical works are designed
-+to take away your freedom to share and change the works.  By contrast,
-+the GNU General Public License is intended to guarantee your freedom to
-+share and change all versions of a program--to make sure it remains free
-+software for all its users.  We, the Free Software Foundation, use the
-+GNU General Public License for most of our software; it applies also to
-+any other work released this way by its authors.  You can apply it to
-+your programs, too.
-+
-+  When we speak of free software, we are referring to freedom, not
-+price.  Our General Public Licenses are designed to make sure that you
-+have the freedom to distribute copies of free software (and charge for
-+them if you wish), that you receive source code or can get it if you
-+want it, that you can change the software or use pieces of it in new
-+free programs, and that you know you can do these things.
-+
-+  To protect your rights, we need to prevent others from denying you
-+these rights or asking you to surrender the rights.  Therefore, you have
-+certain responsibilities if you distribute copies of the software, or if
-+you modify it: responsibilities to respect the freedom of others.
-+
-+  For example, if you distribute copies of such a program, whether
-+gratis or for a fee, you must pass on to the recipients the same
-+freedoms that you received.  You must make sure that they, too, receive
-+or can get the source code.  And you must show them these terms so they
-+know their rights.
-+
-+  Developers that use the GNU GPL protect your rights with two steps:
-+(1) assert copyright on the software, and (2) offer you this License
-+giving you legal permission to copy, distribute and/or modify it.
-+
-+  For the developers' and authors' protection, the GPL clearly explains
-+that there is no warranty for this free software.  For both users' and
-+authors' sake, the GPL requires that modified versions be marked as
-+changed, so that their problems will not be attributed erroneously to
-+authors of previous versions.
-+
-+  Some devices are designed to deny users access to install or run
-+modified versions of the software inside them, although the manufacturer
-+can do so.  This is fundamentally incompatible with the aim of
-+protecting users' freedom to change the software.  The systematic
-+pattern of such abuse occurs in the area of products for individuals to
-+use, which is precisely where it is most unacceptable.  Therefore, we
-+have designed this version of the GPL to prohibit the practice for those
-+products.  If such problems arise substantially in other domains, we
-+stand ready to extend this provision to those domains in future versions
-+of the GPL, as needed to protect the freedom of users.
-+
-+  Finally, every program is threatened constantly by software patents.
-+States should not allow patents to restrict development and use of
-+software on general-purpose computers, but in those that do, we wish to
-+avoid the special danger that patents applied to a free program could
-+make it effectively proprietary.  To prevent this, the GPL assures that
-+patents cannot be used to render the program non-free.
-+
-+  The precise terms and conditions for copying, distribution and
-+modification follow.
-+
-+                       TERMS AND CONDITIONS
-+
-+  0. Definitions.
-+
-+  "This License" refers to version 3 of the GNU General Public License.
-+
-+  "Copyright" also means copyright-like laws that apply to other kinds of
-+works, such as semiconductor masks.
-+
-+  "The Program" refers to any copyrightable work licensed under this
-+License.  Each licensee is addressed as "you".  "Licensees" and
-+"recipients" may be individuals or organizations.
-+
-+  To "modify" a work means to copy from or adapt all or part of the work
-+in a fashion requiring copyright permission, other than the making of an
-+exact copy.  The resulting work is called a "modified version" of the
-+earlier work or a work "based on" the earlier work.
-+
-+  A "covered work" means either the unmodified Program or a work based
-+on the Program.
-+
-+  To "propagate" a work means to do anything with it that, without
-+permission, would make you directly or secondarily liable for
-+infringement under applicable copyright law, except executing it on a
-+computer or modifying a private copy.  Propagation includes copying,
-+distribution (with or without modification), making available to the
-+public, and in some countries other activities as well.
-+
-+  To "convey" a work means any kind of propagation that enables other
-+parties to make or receive copies.  Mere interaction with a user through
-+a computer network, with no transfer of a copy, is not conveying.
-+
-+  An interactive user interface displays "Appropriate Legal Notices"
-+to the extent that it includes a convenient and prominently visible
-+feature that (1) displays an appropriate copyright notice, and (2)
-+tells the user that there is no warranty for the work (except to the
-+extent that warranties are provided), that licensees may convey the
-+work under this License, and how to view a copy of this License.  If
-+the interface presents a list of user commands or options, such as a
-+menu, a prominent item in the list meets this criterion.
-+
-+  1. Source Code.
-+
-+  The "source code" for a work means the preferred form of the work
-+for making modifications to it.  "Object code" means any non-source
-+form of a work.
-+
-+  A "Standard Interface" means an interface that either is an official
-+standard defined by a recognized standards body, or, in the case of
-+interfaces specified for a particular programming language, one that
-+is widely used among developers working in that language.
-+
-+  The "System Libraries" of an executable work include anything, other
-+than the work as a whole, that (a) is included in the normal form of
-+packaging a Major Component, but which is not part of that Major
-+Component, and (b) serves only to enable use of the work with that
-+Major Component, or to implement a Standard Interface for which an
-+implementation is available to the public in source code form.  A
-+"Major Component", in this context, means a major essential component
-+(kernel, window system, and so on) of the specific operating system
-+(if any) on which the executable work runs, or a compiler used to
-+produce the work, or an object code interpreter used to run it.
-+
-+  The "Corresponding Source" for a work in object code form means all
-+the source code needed to generate, install, and (for an executable
-+work) run the object code and to modify the work, including scripts to
-+control those activities.  However, it does not include the work's
-+System Libraries, or general-purpose tools or generally available free
-+programs which are used unmodified in performing those activities but
-+which are not part of the work.  For example, Corresponding Source
-+includes interface definition files associated with source files for
-+the work, and the source code for shared libraries and dynamically
-+linked subprograms that the work is specifically designed to require,
-+such as by intimate data communication or control flow between those
-+subprograms and other parts of the work.
-+
-+  The Corresponding Source need not include anything that users
-+can regenerate automatically from other parts of the Corresponding
-+Source.
-+
-+  The Corresponding Source for a work in source code form is that
-+same work.
-+
-+  2. Basic Permissions.
-+
-+  All rights granted under this License are granted for the term of
-+copyright on the Program, and are irrevocable provided the stated
-+conditions are met.  This License explicitly affirms your unlimited
-+permission to run the unmodified Program.  The output from running a
-+covered work is covered by this License only if the output, given its
-+content, constitutes a covered work.  This License acknowledges your
-+rights of fair use or other equivalent, as provided by copyright law.
-+
-+  You may make, run and propagate covered works that you do not
-+convey, without conditions so long as your license otherwise remains
-+in force.  You may convey covered works to others for the sole purpose
-+of having them make modifications exclusively for you, or provide you
-+with facilities for running those works, provided that you comply with
-+the terms of this License in conveying all material for which you do
-+not control copyright.  Those thus making or running the covered works
-+for you must do so exclusively on your behalf, under your direction
-+and control, on terms that prohibit them from making any copies of
-+your copyrighted material outside their relationship with you.
-+
-+  Conveying under any other circumstances is permitted solely under
-+the conditions stated below.  Sublicensing is not allowed; section 10
-+makes it unnecessary.
-+
-+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-+
-+  No covered work shall be deemed part of an effective technological
-+measure under any applicable law fulfilling obligations under article
-+11 of the WIPO copyright treaty adopted on 20 December 1996, or
-+similar laws prohibiting or restricting circumvention of such
-+measures.
-+
-+  When you convey a covered work, you waive any legal power to forbid
-+circumvention of technological measures to the extent such circumvention
-+is effected by exercising rights under this License with respect to
-+the covered work, and you disclaim any intention to limit operation or
-+modification of the work as a means of enforcing, against the work's
-+users, your or third parties' legal rights to forbid circumvention of
-+technological measures.
-+
-+  4. Conveying Verbatim Copies.
-+
-+  You may convey verbatim copies of the Program's source code as you
-+receive it, in any medium, provided that you conspicuously and
-+appropriately publish on each copy an appropriate copyright notice;
-+keep intact all notices stating that this License and any
-+non-permissive terms added in accord with section 7 apply to the code;
-+keep intact all notices of the absence of any warranty; and give all
-+recipients a copy of this License along with the Program.
-+
-+  You may charge any price or no price for each copy that you convey,
-+and you may offer support or warranty protection for a fee.
-+
-+  5. Conveying Modified Source Versions.
-+
-+  You may convey a work based on the Program, or the modifications to
-+produce it from the Program, in the form of source code under the
-+terms of section 4, provided that you also meet all of these conditions:
-+
-+    a) The work must carry prominent notices stating that you modified
-+    it, and giving a relevant date.
-+
-+    b) The work must carry prominent notices stating that it is
-+    released under this License and any conditions added under section
-+    7.  This requirement modifies the requirement in section 4 to
-+    "keep intact all notices".
-+
-+    c) You must license the entire work, as a whole, under this
-+    License to anyone who comes into possession of a copy.  This
-+    License will therefore apply, along with any applicable section 7
-+    additional terms, to the whole of the work, and all its parts,
-+    regardless of how they are packaged.  This License gives no
-+    permission to license the work in any other way, but it does not
-+    invalidate such permission if you have separately received it.
-+
-+    d) If the work has interactive user interfaces, each must display
-+    Appropriate Legal Notices; however, if the Program has interactive
-+    interfaces that do not display Appropriate Legal Notices, your
-+    work need not make them do so.
-+
-+  A compilation of a covered work with other separate and independent
-+works, which are not by their nature extensions of the covered work,
-+and which are not combined with it such as to form a larger program,
-+in or on a volume of a storage or distribution medium, is called an
-+"aggregate" if the compilation and its resulting copyright are not
-+used to limit the access or legal rights of the compilation's users
-+beyond what the individual works permit.  Inclusion of a covered work
-+in an aggregate does not cause this License to apply to the other
-+parts of the aggregate.
-+
-+  6. Conveying Non-Source Forms.
-+
-+  You may convey a covered work in object code form under the terms
-+of sections 4 and 5, provided that you also convey the
-+machine-readable Corresponding Source under the terms of this License,
-+in one of these ways:
-+
-+    a) Convey the object code in, or embodied in, a physical product
-+    (including a physical distribution medium), accompanied by the
-+    Corresponding Source fixed on a durable physical medium
-+    customarily used for software interchange.
-+
-+    b) Convey the object code in, or embodied in, a physical product
-+    (including a physical distribution medium), accompanied by a
-+    written offer, valid for at least three years and valid for as
-+    long as you offer spare parts or customer support for that product
-+    model, to give anyone who possesses the object code either (1) a
-+    copy of the Corresponding Source for all the software in the
-+    product that is covered by this License, on a durable physical
-+    medium customarily used for software interchange, for a price no
-+    more than your reasonable cost of physically performing this
-+    conveying of source, or (2) access to copy the
-+    Corresponding Source from a network server at no charge.
-+
-+    c) Convey individual copies of the object code with a copy of the
-+    written offer to provide the Corresponding Source.  This
-+    alternative is allowed only occasionally and noncommercially, and
-+    only if you received the object code with such an offer, in accord
-+    with subsection 6b.
-+
-+    d) Convey the object code by offering access from a designated
-+    place (gratis or for a charge), and offer equivalent access to the
-+    Corresponding Source in the same way through the same place at no
-+    further charge.  You need not require recipients to copy the
-+    Corresponding Source along with the object code.  If the place to
-+    copy the object code is a network server, the Corresponding Source
-+    may be on a different server (operated by you or a third party)
-+    that supports equivalent copying facilities, provided you maintain
-+    clear directions next to the object code saying where to find the
-+    Corresponding Source.  Regardless of what server hosts the
-+    Corresponding Source, you remain obligated to ensure that it is
-+    available for as long as needed to satisfy these requirements.
-+
-+    e) Convey the object code using peer-to-peer transmission, provided
-+    you inform other peers where the object code and Corresponding
-+    Source of the work are being offered to the general public at no
-+    charge under subsection 6d.
-+
-+  A separable portion of the object code, whose source code is excluded
-+from the Corresponding Source as a System Library, need not be
-+included in conveying the object code work.
-+
-+  A "User Product" is either (1) a "consumer product", which means any
-+tangible personal property which is normally used for personal, family,
-+or household purposes, or (2) anything designed or sold for incorporation
-+into a dwelling.  In determining whether a product is a consumer product,
-+doubtful cases shall be resolved in favor of coverage.  For a particular
-+product received by a particular user, "normally used" refers to a
-+typical or common use of that class of product, regardless of the status
-+of the particular user or of the way in which the particular user
-+actually uses, or expects or is expected to use, the product.  A product
-+is a consumer product regardless of whether the product has substantial
-+commercial, industrial or non-consumer uses, unless such uses represent
-+the only significant mode of use of the product.
-+
-+  "Installation Information" for a User Product means any methods,
-+procedures, authorization keys, or other information required to install
-+and execute modified versions of a covered work in that User Product from
-+a modified version of its Corresponding Source.  The information must
-+suffice to ensure that the continued functioning of the modified object
-+code is in no case prevented or interfered with solely because
-+modification has been made.
-+
-+  If you convey an object code work under this section in, or with, or
-+specifically for use in, a User Product, and the conveying occurs as
-+part of a transaction in which the right of possession and use of the
-+User Product is transferred to the recipient in perpetuity or for a
-+fixed term (regardless of how the transaction is characterized), the
-+Corresponding Source conveyed under this section must be accompanied
-+by the Installation Information.  But this requirement does not apply
-+if neither you nor any third party retains the ability to install
-+modified object code on the User Product (for example, the work has
-+been installed in ROM).
-+
-+  The requirement to provide Installation Information does not include a
-+requirement to continue to provide support service, warranty, or updates
-+for a work that has been modified or installed by the recipient, or for
-+the User Product in which it has been modified or installed.  Access to a
-+network may be denied when the modification itself materially and
-+adversely affects the operation of the network or violates the rules and
-+protocols for communication across the network.
-+
-+  Corresponding Source conveyed, and Installation Information provided,
-+in accord with this section must be in a format that is publicly
-+documented (and with an implementation available to the public in
-+source code form), and must require no special password or key for
-+unpacking, reading or copying.
-+
-+  7. Additional Terms.
-+
-+  "Additional permissions" are terms that supplement the terms of this
-+License by making exceptions from one or more of its conditions.
-+Additional permissions that are applicable to the entire Program shall
-+be treated as though they were included in this License, to the extent
-+that they are valid under applicable law.  If additional permissions
-+apply only to part of the Program, that part may be used separately
-+under those permissions, but the entire Program remains governed by
-+this License without regard to the additional permissions.
-+
-+  When you convey a copy of a covered work, you may at your option
-+remove any additional permissions from that copy, or from any part of
-+it.  (Additional permissions may be written to require their own
-+removal in certain cases when you modify the work.)  You may place
-+additional permissions on material, added by you to a covered work,
-+for which you have or can give appropriate copyright permission.
-+
-+  Notwithstanding any other provision of this License, for material you
-+add to a covered work, you may (if authorized by the copyright holders of
-+that material) supplement the terms of this License with terms:
-+
-+    a) Disclaiming warranty or limiting liability differently from the
-+    terms of sections 15 and 16 of this License; or
-+
-+    b) Requiring preservation of specified reasonable legal notices or
-+    author attributions in that material or in the Appropriate Legal
-+    Notices displayed by works containing it; or
-+
-+    c) Prohibiting misrepresentation of the origin of that material, or
-+    requiring that modified versions of such material be marked in
-+    reasonable ways as different from the original version; or
-+
-+    d) Limiting the use for publicity purposes of names of licensors or
-+    authors of the material; or
-+
-+    e) Declining to grant rights under trademark law for use of some
-+    trade names, trademarks, or service marks; or
-+
-+    f) Requiring indemnification of licensors and authors of that
-+    material by anyone who conveys the material (or modified versions of
-+    it) with contractual assumptions of liability to the recipient, for
-+    any liability that these contractual assumptions directly impose on
-+    those licensors and authors.
-+
-+  All other non-permissive additional terms are considered "further
-+restrictions" within the meaning of section 10.  If the Program as you
-+received it, or any part of it, contains a notice stating that it is
-+governed by this License along with a term that is a further
-+restriction, you may remove that term.  If a license document contains
-+a further restriction but permits relicensing or conveying under this
-+License, you may add to a covered work material governed by the terms
-+of that license document, provided that the further restriction does
-+not survive such relicensing or conveying.
-+
-+  If you add terms to a covered work in accord with this section, you
-+must place, in the relevant source files, a statement of the
-+additional terms that apply to those files, or a notice indicating
-+where to find the applicable terms.
-+
-+  Additional terms, permissive or non-permissive, may be stated in the
-+form of a separately written license, or stated as exceptions;
-+the above requirements apply either way.
-+
-+  8. Termination.
-+
-+  You may not propagate or modify a covered work except as expressly
-+provided under this License.  Any attempt otherwise to propagate or
-+modify it is void, and will automatically terminate your rights under
-+this License (including any patent licenses granted under the third
-+paragraph of section 11).
-+
-+  However, if you cease all violation of this License, then your
-+license from a particular copyright holder is reinstated (a)
-+provisionally, unless and until the copyright holder explicitly and
-+finally terminates your license, and (b) permanently, if the copyright
-+holder fails to notify you of the violation by some reasonable means
-+prior to 60 days after the cessation.
-+
-+  Moreover, your license from a particular copyright holder is
-+reinstated permanently if the copyright holder notifies you of the
-+violation by some reasonable means, this is the first time you have
-+received notice of violation of this License (for any work) from that
-+copyright holder, and you cure the violation prior to 30 days after
-+your receipt of the notice.
-+
-+  Termination of your rights under this section does not terminate the
-+licenses of parties who have received copies or rights from you under
-+this License.  If your rights have been terminated and not permanently
-+reinstated, you do not qualify to receive new licenses for the same
-+material under section 10.
-+
-+  9. Acceptance Not Required for Having Copies.
-+
-+  You are not required to accept this License in order to receive or
-+run a copy of the Program.  Ancillary propagation of a covered work
-+occurring solely as a consequence of using peer-to-peer transmission
-+to receive a copy likewise does not require acceptance.  However,
-+nothing other than this License grants you permission to propagate or
-+modify any covered work.  These actions infringe copyright if you do
-+not accept this License.  Therefore, by modifying or propagating a
-+covered work, you indicate your acceptance of this License to do so.
-+
-+  10. Automatic Licensing of Downstream Recipients.
-+
-+  Each time you convey a covered work, the recipient automatically
-+receives a license from the original licensors, to run, modify and
-+propagate that work, subject to this License.  You are not responsible
-+for enforcing compliance by third parties with this License.
-+
-+  An "entity transaction" is a transaction transferring control of an
-+organization, or substantially all assets of one, or subdividing an
-+organization, or merging organizations.  If propagation of a covered
-+work results from an entity transaction, each party to that
-+transaction who receives a copy of the work also receives whatever
-+licenses to the work the party's predecessor in interest had or could
-+give under the previous paragraph, plus a right to possession of the
-+Corresponding Source of the work from the predecessor in interest, if
-+the predecessor has it or can get it with reasonable efforts.
-+
-+  You may not impose any further restrictions on the exercise of the
-+rights granted or affirmed under this License.  For example, you may
-+not impose a license fee, royalty, or other charge for exercise of
-+rights granted under this License, and you may not initiate litigation
-+(including a cross-claim or counterclaim in a lawsuit) alleging that
-+any patent claim is infringed by making, using, selling, offering for
-+sale, or importing the Program or any portion of it.
-+
-+  11. Patents.
-+
-+  A "contributor" is a copyright holder who authorizes use under this
-+License of the Program or a work on which the Program is based.  The
-+work thus licensed is called the contributor's "contributor version".
-+
-+  A contributor's "essential patent claims" are all patent claims
-+owned or controlled by the contributor, whether already acquired or
-+hereafter acquired, that would be infringed by some manner, permitted
-+by this License, of making, using, or selling its contributor version,
-+but do not include claims that would be infringed only as a
-+consequence of further modification of the contributor version.  For
-+purposes of this definition, "control" includes the right to grant
-+patent sublicenses in a manner consistent with the requirements of
-+this License.
-+
-+  Each contributor grants you a non-exclusive, worldwide, royalty-free
-+patent license under the contributor's essential patent claims, to
-+make, use, sell, offer for sale, import and otherwise run, modify and
-+propagate the contents of its contributor version.
-+
-+  In the following three paragraphs, a "patent license" is any express
-+agreement or commitment, however denominated, not to enforce a patent
-+(such as an express permission to practice a patent or covenant not to
-+sue for patent infringement).  To "grant" such a patent license to a
-+party means to make such an agreement or commitment not to enforce a
-+patent against the party.
-+
-+  If you convey a covered work, knowingly relying on a patent license,
-+and the Corresponding Source of the work is not available for anyone
-+to copy, free of charge and under the terms of this License, through a
-+publicly available network server or other readily accessible means,
-+then you must either (1) cause the Corresponding Source to be so
-+available, or (2) arrange to deprive yourself of the benefit of the
-+patent license for this particular work, or (3) arrange, in a manner
-+consistent with the requirements of this License, to extend the patent
-+license to downstream recipients.  "Knowingly relying" means you have
-+actual knowledge that, but for the patent license, your conveying the
-+covered work in a country, or your recipient's use of the covered work
-+in a country, would infringe one or more identifiable patents in that
-+country that you have reason to believe are valid.
-+
-+  If, pursuant to or in connection with a single transaction or
-+arrangement, you convey, or propagate by procuring conveyance of, a
-+covered work, and grant a patent license to some of the parties
-+receiving the covered work authorizing them to use, propagate, modify
-+or convey a specific copy of the covered work, then the patent license
-+you grant is automatically extended to all recipients of the covered
-+work and works based on it.
-+
-+  A patent license is "discriminatory" if it does not include within
-+the scope of its coverage, prohibits the exercise of, or is
-+conditioned on the non-exercise of one or more of the rights that are
-+specifically granted under this License.  You may not convey a covered
-+work if you are a party to an arrangement with a third party that is
-+in the business of distributing software, under which you make payment
-+to the third party based on the extent of your activity of conveying
-+the work, and under which the third party grants, to any of the
-+parties who would receive the covered work from you, a discriminatory
-+patent license (a) in connection with copies of the covered work
-+conveyed by you (or copies made from those copies), or (b) primarily
-+for and in connection with specific products or compilations that
-+contain the covered work, unless you entered into that arrangement,
-+or that patent license was granted, prior to 28 March 2007.
-+
-+  Nothing in this License shall be construed as excluding or limiting
-+any implied license or other defenses to infringement that may
-+otherwise be available to you under applicable patent law.
-+
-+  12. No Surrender of Others' Freedom.
-+
-+  If conditions are imposed on you (whether by court order, agreement or
-+otherwise) that contradict the conditions of this License, they do not
-+excuse you from the conditions of this License.  If you cannot convey a
-+covered work so as to satisfy simultaneously your obligations under this
-+License and any other pertinent obligations, then as a consequence you may
-+not convey it at all.  For example, if you agree to terms that obligate you
-+to collect a royalty for further conveying from those to whom you convey
-+the Program, the only way you could satisfy both those terms and this
-+License would be to refrain entirely from conveying the Program.
-+
-+  13. Use with the GNU Affero General Public License.
-+
-+  Notwithstanding any other provision of this License, you have
-+permission to link or combine any covered work with a work licensed
-+under version 3 of the GNU Affero General Public License into a single
-+combined work, and to convey the resulting work.  The terms of this
-+License will continue to apply to the part which is the covered work,
-+but the special requirements of the GNU Affero General Public License,
-+section 13, concerning interaction through a network will apply to the
-+combination as such.
-+
-+  14. Revised Versions of this License.
-+
-+  The Free Software Foundation may publish revised and/or new versions of
-+the GNU General Public License from time to time.  Such new versions will
-+be similar in spirit to the present version, but may differ in detail to
-+address new problems or concerns.
-+
-+  Each version is given a distinguishing version number.  If the
-+Program specifies that a certain numbered version of the GNU General
-+Public License "or any later version" applies to it, you have the
-+option of following the terms and conditions either of that numbered
-+version or of any later version published by the Free Software
-+Foundation.  If the Program does not specify a version number of the
-+GNU General Public License, you may choose any version ever published
-+by the Free Software Foundation.
-+
-+  If the Program specifies that a proxy can decide which future
-+versions of the GNU General Public License can be used, that proxy's
-+public statement of acceptance of a version permanently authorizes you
-+to choose that version for the Program.
-+
-+  Later license versions may give you additional or different
-+permissions.  However, no additional obligations are imposed on any
-+author or copyright holder as a result of your choosing to follow a
-+later version.
-+
-+  15. Disclaimer of Warranty.
-+
-+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-+
-+  16. Limitation of Liability.
-+
-+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-+SUCH DAMAGES.
-+
-+  17. Interpretation of Sections 15 and 16.
-+
-+  If the disclaimer of warranty and limitation of liability provided
-+above cannot be given local legal effect according to their terms,
-+reviewing courts shall apply local law that most closely approximates
-+an absolute waiver of all civil liability in connection with the
-+Program, unless a warranty or assumption of liability accompanies a
-+copy of the Program in return for a fee.
-+
-+                     END OF TERMS AND CONDITIONS
-+
-+            How to Apply These Terms to Your New Programs
-+
-+  If you develop a new program, and you want it to be of the greatest
-+possible use to the public, the best way to achieve this is to make it
-+free software which everyone can redistribute and change under these terms.
-+
-+  To do so, attach the following notices to the program.  It is safest
-+to attach them to the start of each source file to most effectively
-+state the exclusion of warranty; and each file should have at least
-+the "copyright" line and a pointer to where the full notice is found.
-+
-+    <one line to give the program's name and a brief idea of what it does.>
-+    Copyright (C) <year>  <name of author>
-+
-+    This program is free software: you can redistribute it and/or modify
-+    it under the terms of the GNU General Public License as published by
-+    the Free Software Foundation, either version 3 of the License, or
-+    (at your option) any later version.
-+
-+    This program is distributed in the hope that it will be useful,
-+    but WITHOUT ANY WARRANTY; without even the implied warranty of
-+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+    GNU General Public License for more details.
-+
-+    You should have received a copy of the GNU General Public License
-+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-+
-+Also add information on how to contact you by electronic and paper mail.
-+
-+  If the program does terminal interaction, make it output a short
-+notice like this when it starts in an interactive mode:
-+
-+    <program>  Copyright (C) <year>  <name of author>
-+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-+    This is free software, and you are welcome to redistribute it
-+    under certain conditions; type `show c' for details.
-+
-+The hypothetical commands `show w' and `show c' should show the appropriate
-+parts of the General Public License.  Of course, your program's commands
-+might be different; for a GUI interface, you would use an "about box".
-+
-+  You should also get your employer (if you work as a programmer) or school,
-+if any, to sign a "copyright disclaimer" for the program, if necessary.
-+For more information on this, and how to apply and follow the GNU GPL, see
-+<http://www.gnu.org/licenses/>.
-+
-+  The GNU General Public License does not permit incorporating your program
-+into proprietary programs.  If your program is a subroutine library, you
-+may consider it more useful to permit linking proprietary applications with
-+the library.  If this is what you want to do, use the GNU Lesser General
-+Public License instead of this License.  But first, please read
-+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff -Nru ukui-biometric-auth-4.10.0.0/debian/patches/0007-17.patch ukui-biometric-auth-4.20.0.0/debian/patches/0007-17.patch
--- ukui-biometric-auth-4.10.0.0/debian/patches/0007-17.patch	2024-04-23 10:31:46.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/debian/patches/0007-17.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,78 +0,0 @@
-From: =?utf-8?b?5p2o5pWP?= <yangmin@kylinos.cn>
-Date: Tue, 23 Apr 2024 02:22:36 +0000
-Subject: =?utf-8?b?ITE3IOWNleeCueeZu+W9lei/geenu+WIsOWQjuerryBNZXJnZSBwdWxs?=
- =?utf-8?b?IHJlcXVlc3QgITE3IGZyb20g5YiY6L+c6bmPL29wZW5reWxpbi9uaWxl?=
-
----
- uniauth-backend/src/serviceinterface.cpp | 21 ++++++++++++++-------
- 1 file changed, 14 insertions(+), 7 deletions(-)
-
-diff --git a/uniauth-backend/src/serviceinterface.cpp b/uniauth-backend/src/serviceinterface.cpp
-index 6969efb..1399dae 100644
---- a/uniauth-backend/src/serviceinterface.cpp
-+++ b/uniauth-backend/src/serviceinterface.cpp
-@@ -41,7 +41,7 @@
- #include <openssl/pem.h>
- 
- #define UKUI_GREETER        "/usr/sbin/ukui-greeter"
--#define UKUI_SCREENSAVER    "/usr/bin/ukui-screensaver-dialog"
-+#define UKUI_SCREENSAVER    "/usr/bin/ukui-screensaver-backend"
- 
- #define GREETER_DBUS_PATH           "/"
- #define GREETER_DBUS_INTERFACE      "org.ukui.greeter"
-@@ -916,13 +916,13 @@ bool ServiceInterface::sendPassword(QString username,QByteArray password)
-     rsac.decrypt(password, decryptText, priKey);     // 解密
-     //如果处于登录状态
- 
--    qDebug()<<"sendPassword"<<loginAppList.count();
-+    qDebug()<<"sendPassword"<<loginAppList.count()<<loginAppList;
-     if(loginAppList.contains("lightdm")){
-         qDebug()<<"login:";
-         isFirstLogin = false;
--        QString publicKey = getLoginPubKey(loginAppList.value("lightdm"),GREETER_DBUS_PATH,GREETER_DBUS_INTERFACE);
-+        QString publicKey = getLoginPubKey(loginAppList.value("lightdm"),SCREENSAVER_DBUS_PATH,SCREENSAVER_DBUS_INTERFACE);
-         rsac.encrypt(decryptText, encryptText, publicKey.toLatin1());
--        return sendLoginPassword(loginAppList.value("lightdm"),GREETER_DBUS_PATH,GREETER_DBUS_INTERFACE,username,encryptText);
-+        return sendLoginPassword(loginAppList.value("lightdm"),SCREENSAVER_DBUS_PATH,SCREENSAVER_DBUS_INTERFACE,username,encryptText);
-     }
- 
-     //处于锁屏状态
-@@ -934,6 +934,14 @@ bool ServiceInterface::sendPassword(QString username,QByteArray password)
-         return sendLoginPassword(loginAppList.value(username),SCREENSAVER_DBUS_PATH,SCREENSAVER_DBUS_INTERFACE,username,encryptText);
-     }
- 
-+    if(loginAppList.count()>0){
-+	qDebug()<<"login by screensaver:";
-+	isFirstLogin = false;
-+        QString publicKey = getLoginPubKey(loginAppList.value(loginAppList.firstKey()),SCREENSAVER_DBUS_PATH,SCREENSAVER_DBUS_INTERFACE);
-+        rsac.encrypt(decryptText, encryptText, publicKey.toLatin1());
-+        return sendLoginPassword(loginAppList.value(loginAppList.firstKey()),SCREENSAVER_DBUS_PATH,SCREENSAVER_DBUS_INTERFACE,username,encryptText);
-+    }
-+
-     //如果是第一次调用,则配置自动登录
-     if(isFirstLogin){
-         qDebug()<<"isFirstLogin:";
-@@ -965,13 +973,13 @@ bool ServiceInterface::handleFirstSingleLogn(QString username,QByteArray decrypt
-      qDebug()<<loginAppList.count();
-      if(loginAppList.contains("lightdm")){
-          isFirstLogin = false;
--         QString publicKey = getLoginPubKey(loginAppList.value("lightdm"),GREETER_DBUS_PATH,GREETER_DBUS_INTERFACE);
-+         QString publicKey = getLoginPubKey(loginAppList.value("lightdm"),SCREENSAVER_DBUS_PATH,SCREENSAVER_DBUS_INTERFACE);
-          if(publicKey.isEmpty()){
-              qDebug()<<"get Login PubKey failed!";
-              return false;
-          }
-          rsac.encrypt(decryptText, encryptText, publicKey.toLatin1());
--         return sendLoginPassword(loginAppList.value("lightdm"),GREETER_DBUS_PATH,GREETER_DBUS_INTERFACE,username,encryptText);
-+         return sendLoginPassword(loginAppList.value("lightdm"),SCREENSAVER_DBUS_PATH,SCREENSAVER_DBUS_INTERFACE,username,encryptText);
-      }
-      return ret;
- }
-@@ -1018,7 +1026,6 @@ bool  ServiceInterface::sendLoginPassword(QString service,QString path,QString i
-                          path,
-                          interface,
-                          QDBusConnection::systemBus());
--
-     QDBusReply<bool> stateReply = iface.call("sendPassword",username,array);
-     if(!stateReply.isValid()){
-         disconnect(connection);
diff -Nru ukui-biometric-auth-4.10.0.0/debian/patches/0008-21.patch ukui-biometric-auth-4.20.0.0/debian/patches/0008-21.patch
--- ukui-biometric-auth-4.10.0.0/debian/patches/0008-21.patch	2024-04-23 10:31:46.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/debian/patches/0008-21.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,107 +0,0 @@
-From: =?utf-8?b?5p2o5pWP?= <yangmin@kylinos.cn>
-Date: Tue, 23 Apr 2024 02:23:54 +0000
-Subject: =?utf-8?b?ITIxIOmcgOimgeaPkOadg+ahhui/m+ihjOaOiOadg+aXtu+8iOWmgg==?=
- =?utf-8?b?5re75Yqg5paw55So5oi344CB55Sf54mp54m55b6B566h55CG5bel5YW35Lit5b2V?=
- =?utf-8?b?5YWl5oyH57q55o+Q5p2D77yJ77yM5o6I5p2D5qGG5Ye6546w5Zyo5bem5LiK6KeS?=
- =?utf-8?b?5LiN5bGF5LitIE1lcmdlIHB1bGwgcmVxdWVzdCAhMjEgZnJvbSBsaXVkdW5mYS9v?=
- =?utf-8?b?cGVua3lsaW4vbmlsZQ==?=
-
----
- polkit-agent/CMakeLists.txt         |  7 +++++++
- polkit-agent/src/PolkitListener.cpp | 31 +++++++++++++++++++++++++++----
- 2 files changed, 34 insertions(+), 4 deletions(-)
-
-diff --git a/polkit-agent/CMakeLists.txt b/polkit-agent/CMakeLists.txt
-index fa7768e..cb8e3e9 100644
---- a/polkit-agent/CMakeLists.txt
-+++ b/polkit-agent/CMakeLists.txt
-@@ -3,9 +3,12 @@ project(ukui-polkit-agent)
- 
- pkg_check_modules(QGS REQUIRED gsettings-qt)
- pkg_check_modules(KDKINFO REQUIRED kysdk-sysinfo)
-+pkg_check_modules(KYSDKWAYLANDHELPER_PKG REQUIRED kysdk-waylandhelper)
- 
- find_package(PolkitQt5-1 REQUIRED 0.103.0)
- find_package(Qt5 COMPONENTS Core Widgets DBus X11Extras Xml Network Svg)
-+find_package(KF5WindowSystem)
-+find_package(X11 REQUIRED)
- set(CMAKE_AUTOMOC ON)
- set(CMAKE_AUTOUIC ON)
- set(CMAKE_AUTORCC ON)
-@@ -58,10 +61,14 @@ set(polkit_SRCS
-     )
- 
- add_executable(polkit-ukui-authentication-agent-1 ${polkit_SRCS})
-+target_include_directories(polkit-ukui-authentication-agent-1 PRIVATE ${KYSDKWAYLANDHELPER_PKG_INCLUDE_DIRS})
-+target_link_directories(polkit-ukui-authentication-agent-1 PRIVATE ${KYSDKWAYLANDHELPER_PKG_LIBRARY_DIRS})
- target_link_libraries(polkit-ukui-authentication-agent-1
-     Qt5::Core Qt5::Widgets Qt5::DBus ${EXTRA_LIBS}
-     ${POLKITQT-1_LIBRARIES}
-+    ${KYSDKWAYLANDHELPER_PKG_LIBRARIES}
-     BioAuthWidgets
-+    KF5::WindowSystem
-     -lrt
-     -lukui-log4qt
-     )
-diff --git a/polkit-agent/src/PolkitListener.cpp b/polkit-agent/src/PolkitListener.cpp
-index f15c9c9..749e551 100644
---- a/polkit-agent/src/PolkitListener.cpp
-+++ b/polkit-agent/src/PolkitListener.cpp
-@@ -31,11 +31,13 @@
- #include <QApplication>
- #include <QScreen>
- #include <fcntl.h>
-+#include <kysdk/kysdk-system/libkysysinfo.h>
- 
- #include "PolkitListener.h"
- #include "mainwindow.h"
- #include "generic.h"
- #include <libkysysinfo.h>
-+#include "windowmanager/windowmanager.h"
- 
- PolkitListener::PolkitListener(QObject *parent)
-     : Listener(parent),
-@@ -171,9 +173,12 @@ void PolkitListener::initiateAuthentication(
-     if (desScreenGeometry.isEmpty()) {
-         desScreenGeometry = qApp->primaryScreen()->geometry();
-     }
--    mainWindow->move(desScreenGeometry.x() + (desScreenGeometry.width() - mainWindow->width())/2,
--               desScreenGeometry.y() + (desScreenGeometry.height() - mainWindow->height())/2);
--    qDebug()<<"MoveWindow to center1:"<<desScreenGeometry<<","<<mainWindow->geometry()<<QGuiApplication::platformName();;
-+//    mainWindow->move(desScreenGeometry.x() + (desScreenGeometry.width() - mainWindow->width())/2,
-+//               desScreenGeometry.y() + (desScreenGeometry.height() - mainWindow->height())/2);
-+//    qDebug()<<"MoveWindow to center1:"<<desScreenGeometry<<","<<mainWindow->geometry()<<QGuiApplication::platformName();;
-+
-+
-+
-     connect(mainWindow, &MainWindow::accept, this, &PolkitListener::onResponse);
-     connect(mainWindow, &MainWindow::canceled, this, [&]{
-         wasCancelled = true;
-@@ -360,8 +365,26 @@ void PolkitListener::onShowPrompt(const QString &prompt, bool echo)
-         mainWindow->switchAuthMode(MainWindow::PASSWORD);
-         mainWindow->setPrompt(prompt, echo);
-     }
--
-     mainWindow->setFixedSize(mainWindow->width(),mainWindow->height());
-+
-+    /* set the position of the mainwindow */
-+    QPoint pos = QCursor::pos();
-+    QRect desScreenGeometry;
-+    for (QScreen *screen : qApp->screens()) {
-+        if (screen->geometry().contains(pos)) {
-+            desScreenGeometry = screen->geometry();
-+        }
-+    }
-+
-+    if (desScreenGeometry.isEmpty()) {
-+        desScreenGeometry = qApp->primaryScreen()->geometry();
-+    }
-+
-+    kdk::WindowManager::setGeometry(mainWindow->windowHandle(),
-+                                    QRect(desScreenGeometry.left() + (desScreenGeometry.width() - mainWindow->width())/2,
-+                                          desScreenGeometry.top() + (desScreenGeometry.height() - mainWindow->height())/2,
-+                                          mainWindow->width(), mainWindow->height()));
-+
-     mainWindow->show();
-     // 重新开始认证不调整窗口位置
- //    QPoint pos = QCursor::pos();
diff -Nru ukui-biometric-auth-4.10.0.0/debian/patches/0009-Added-translation-using-Weblate-Uyghur.patch ukui-biometric-auth-4.20.0.0/debian/patches/0009-Added-translation-using-Weblate-Uyghur.patch
--- ukui-biometric-auth-4.10.0.0/debian/patches/0009-Added-translation-using-Weblate-Uyghur.patch	2024-04-23 10:31:46.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/debian/patches/0009-Added-translation-using-Weblate-Uyghur.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,583 +0,0 @@
-From: KevinDuan <duankaiwen@kylinos.com>
-Date: Wed, 8 May 2024 10:08:51 +0800
-Subject: Added translation using Weblate (Uyghur)
-
----
- bioauth/i18n_ts/kk.ts | 184 ++++++++++++++++++++++++++++++++++++++++++++++++++
- bioauth/i18n_ts/ky.ts | 184 ++++++++++++++++++++++++++++++++++++++++++++++++++
- bioauth/i18n_ts/ug.ts | 184 ++++++++++++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 552 insertions(+)
- create mode 100644 bioauth/i18n_ts/kk.ts
- create mode 100644 bioauth/i18n_ts/ky.ts
- create mode 100644 bioauth/i18n_ts/ug.ts
-
-diff --git a/bioauth/i18n_ts/kk.ts b/bioauth/i18n_ts/kk.ts
-new file mode 100644
-index 0000000..458186e
---- /dev/null
-+++ b/bioauth/i18n_ts/kk.ts
-@@ -0,0 +1,184 @@
-+<?xml version="1.0" encoding="utf-8"?>
-+<!DOCTYPE TS>
-+<TS version="2.1" language="kk">
-+<context>
-+    <name>BioAuthWidget</name>
-+    <message>
-+        <location filename="../src/bioauthwidget.ui" line="14"/>
-+        <source>Form</source>
-+        <translation></translation>
-+    </message>
-+    <message>
-+        <source>More</source>
-+        <translation type="vanished">更多</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.ui" line="146"/>
-+        <location filename="../src/bioauthwidget.cpp" line="41"/>
-+        <source>Retry</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>Too many unsuccessful attempts,please enter password.</source>
-+        <translation type="vanished">验证失败达最大次数,请使用密码解锁</translation>
-+    </message>
-+    <message>
-+        <source>Bioauth authentication failed, you still have %1 verification opportunities</source>
-+        <translation type="vanished">生物认证失败,您还有%1次尝试机会</translation>
-+    </message>
-+    <message>
-+        <source>Password</source>
-+        <translation type="vanished">密码</translation>
-+    </message>
-+    <message>
-+        <source>Current Device: </source>
-+        <translation type="vanished">当前设备:</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="96"/>
-+        <location filename="../src/bioauthwidget.cpp" line="212"/>
-+        <source>%1 too many unsuccessful attempts,please enter password.</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="102"/>
-+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="226"/>
-+        <source>Please use wechat to scan the code</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+</context>
-+<context>
-+    <name>BioDevices</name>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="78"/>
-+        <source>Unplugging of %1 device detected</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="88"/>
-+        <source>%1 device insertion detected</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="97"/>
-+        <source>Biometric Manager</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="100"/>
-+        <source>biometric</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="700"/>
-+        <source>FingerPrint</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="702"/>
-+        <source>FingerVein</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="704"/>
-+        <source>Iris</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="706"/>
-+        <source>Face</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="708"/>
-+        <source>VoicePrint</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="710"/>
-+        <source>Ukey</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="712"/>
-+        <source>QRCode</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>BioDevicesWidget</name>
-+    <message>
-+        <location filename="../src/biodeviceswidget.ui" line="14"/>
-+        <source>Form</source>
-+        <translation></translation>
-+    </message>
-+    <message>
-+        <source>Device types:</source>
-+        <translation type="vanished">设备类型:</translation>
-+    </message>
-+    <message>
-+        <source>Back</source>
-+        <translation type="vanished">返回</translation>
-+    </message>
-+    <message>
-+        <source>OK</source>
-+        <translation type="vanished">确定</translation>
-+    </message>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="vanished">指纹</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>LoginOptionsWidget</name>
-+    <message>
-+        <location filename="../src/loginoptionswidget.cpp" line="79"/>
-+        <source>Login Options</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/loginoptionswidget.cpp" line="320"/>
-+        <source>Password</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+    <message>
-+        <source>Biometric</source>
-+        <translation type="vanished">生物识别</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>QObject</name>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="vanished">指纹</translation>
-+    </message>
-+    <message>
-+        <source>FingerVein</source>
-+        <translation type="vanished">指静脉</translation>
-+    </message>
-+    <message>
-+        <source>Iris</source>
-+        <translation type="vanished">虹膜</translation>
-+    </message>
-+    <message>
-+        <source>Face</source>
-+        <translation type="vanished">人脸</translation>
-+    </message>
-+    <message>
-+        <source>VoicePrint</source>
-+        <translation type="vanished">声纹</translation>
-+    </message>
-+</context>
-+</TS>
-diff --git a/bioauth/i18n_ts/ky.ts b/bioauth/i18n_ts/ky.ts
-new file mode 100644
-index 0000000..8cda500
---- /dev/null
-+++ b/bioauth/i18n_ts/ky.ts
-@@ -0,0 +1,184 @@
-+<?xml version="1.0" encoding="utf-8"?>
-+<!DOCTYPE TS>
-+<TS version="2.1" language="ky">
-+<context>
-+    <name>BioAuthWidget</name>
-+    <message>
-+        <location filename="../src/bioauthwidget.ui" line="14"/>
-+        <source>Form</source>
-+        <translation></translation>
-+    </message>
-+    <message>
-+        <source>More</source>
-+        <translation type="vanished">更多</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.ui" line="146"/>
-+        <location filename="../src/bioauthwidget.cpp" line="41"/>
-+        <source>Retry</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>Too many unsuccessful attempts,please enter password.</source>
-+        <translation type="vanished">验证失败达最大次数,请使用密码解锁</translation>
-+    </message>
-+    <message>
-+        <source>Bioauth authentication failed, you still have %1 verification opportunities</source>
-+        <translation type="vanished">生物认证失败,您还有%1次尝试机会</translation>
-+    </message>
-+    <message>
-+        <source>Password</source>
-+        <translation type="vanished">密码</translation>
-+    </message>
-+    <message>
-+        <source>Current Device: </source>
-+        <translation type="vanished">当前设备:</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="96"/>
-+        <location filename="../src/bioauthwidget.cpp" line="212"/>
-+        <source>%1 too many unsuccessful attempts,please enter password.</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="102"/>
-+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="226"/>
-+        <source>Please use wechat to scan the code</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+</context>
-+<context>
-+    <name>BioDevices</name>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="78"/>
-+        <source>Unplugging of %1 device detected</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="88"/>
-+        <source>%1 device insertion detected</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="97"/>
-+        <source>Biometric Manager</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="100"/>
-+        <source>biometric</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="700"/>
-+        <source>FingerPrint</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="702"/>
-+        <source>FingerVein</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="704"/>
-+        <source>Iris</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="706"/>
-+        <source>Face</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="708"/>
-+        <source>VoicePrint</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="710"/>
-+        <source>Ukey</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="712"/>
-+        <source>QRCode</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>BioDevicesWidget</name>
-+    <message>
-+        <location filename="../src/biodeviceswidget.ui" line="14"/>
-+        <source>Form</source>
-+        <translation></translation>
-+    </message>
-+    <message>
-+        <source>Device types:</source>
-+        <translation type="vanished">设备类型:</translation>
-+    </message>
-+    <message>
-+        <source>Back</source>
-+        <translation type="vanished">返回</translation>
-+    </message>
-+    <message>
-+        <source>OK</source>
-+        <translation type="vanished">确定</translation>
-+    </message>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="vanished">指纹</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>LoginOptionsWidget</name>
-+    <message>
-+        <location filename="../src/loginoptionswidget.cpp" line="79"/>
-+        <source>Login Options</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/loginoptionswidget.cpp" line="320"/>
-+        <source>Password</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+    <message>
-+        <source>Biometric</source>
-+        <translation type="vanished">生物识别</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>QObject</name>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="vanished">指纹</translation>
-+    </message>
-+    <message>
-+        <source>FingerVein</source>
-+        <translation type="vanished">指静脉</translation>
-+    </message>
-+    <message>
-+        <source>Iris</source>
-+        <translation type="vanished">虹膜</translation>
-+    </message>
-+    <message>
-+        <source>Face</source>
-+        <translation type="vanished">人脸</translation>
-+    </message>
-+    <message>
-+        <source>VoicePrint</source>
-+        <translation type="vanished">声纹</translation>
-+    </message>
-+</context>
-+</TS>
-diff --git a/bioauth/i18n_ts/ug.ts b/bioauth/i18n_ts/ug.ts
-new file mode 100644
-index 0000000..8a4c988
---- /dev/null
-+++ b/bioauth/i18n_ts/ug.ts
-@@ -0,0 +1,184 @@
-+<?xml version="1.0" encoding="utf-8"?>
-+<!DOCTYPE TS>
-+<TS version="2.1" language="ug">
-+<context>
-+    <name>BioAuthWidget</name>
-+    <message>
-+        <location filename="../src/bioauthwidget.ui" line="14"/>
-+        <source>Form</source>
-+        <translation></translation>
-+    </message>
-+    <message>
-+        <source>More</source>
-+        <translation type="vanished">更多</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.ui" line="146"/>
-+        <location filename="../src/bioauthwidget.cpp" line="41"/>
-+        <source>Retry</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>Too many unsuccessful attempts,please enter password.</source>
-+        <translation type="vanished">验证失败达最大次数,请使用密码解锁</translation>
-+    </message>
-+    <message>
-+        <source>Bioauth authentication failed, you still have %1 verification opportunities</source>
-+        <translation type="vanished">生物认证失败,您还有%1次尝试机会</translation>
-+    </message>
-+    <message>
-+        <source>Password</source>
-+        <translation type="vanished">密码</translation>
-+    </message>
-+    <message>
-+        <source>Current Device: </source>
-+        <translation type="vanished">当前设备:</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="96"/>
-+        <location filename="../src/bioauthwidget.cpp" line="212"/>
-+        <source>%1 too many unsuccessful attempts,please enter password.</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="102"/>
-+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/bioauthwidget.cpp" line="226"/>
-+        <source>Please use wechat to scan the code</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+</context>
-+<context>
-+    <name>BioDevices</name>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="78"/>
-+        <source>Unplugging of %1 device detected</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="88"/>
-+        <source>%1 device insertion detected</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="97"/>
-+        <source>Biometric Manager</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="100"/>
-+        <source>biometric</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="700"/>
-+        <source>FingerPrint</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="702"/>
-+        <source>FingerVein</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="704"/>
-+        <source>Iris</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="706"/>
-+        <source>Face</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="708"/>
-+        <source>VoicePrint</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="710"/>
-+        <source>Ukey</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/biodevices.cpp" line="712"/>
-+        <source>QRCode</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>BioDevicesWidget</name>
-+    <message>
-+        <location filename="../src/biodeviceswidget.ui" line="14"/>
-+        <source>Form</source>
-+        <translation></translation>
-+    </message>
-+    <message>
-+        <source>Device types:</source>
-+        <translation type="vanished">设备类型:</translation>
-+    </message>
-+    <message>
-+        <source>Back</source>
-+        <translation type="vanished">返回</translation>
-+    </message>
-+    <message>
-+        <source>OK</source>
-+        <translation type="vanished">确定</translation>
-+    </message>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="vanished">指纹</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>LoginOptionsWidget</name>
-+    <message>
-+        <location filename="../src/loginoptionswidget.cpp" line="79"/>
-+        <source>Login Options</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/loginoptionswidget.cpp" line="320"/>
-+        <source>Password</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+    <message>
-+        <source>Biometric</source>
-+        <translation type="vanished">生物识别</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>QObject</name>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="vanished">指纹</translation>
-+    </message>
-+    <message>
-+        <source>FingerVein</source>
-+        <translation type="vanished">指静脉</translation>
-+    </message>
-+    <message>
-+        <source>Iris</source>
-+        <translation type="vanished">虹膜</translation>
-+    </message>
-+    <message>
-+        <source>Face</source>
-+        <translation type="vanished">人脸</translation>
-+    </message>
-+    <message>
-+        <source>VoicePrint</source>
-+        <translation type="vanished">声纹</translation>
-+    </message>
-+</context>
-+</TS>
diff -Nru ukui-biometric-auth-4.10.0.0/debian/patches/0010-Deleted-translation-using-Weblate-Kazakh.patch ukui-biometric-auth-4.20.0.0/debian/patches/0010-Deleted-translation-using-Weblate-Kazakh.patch
--- ukui-biometric-auth-4.10.0.0/debian/patches/0010-Deleted-translation-using-Weblate-Kazakh.patch	2024-04-23 10:31:46.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/debian/patches/0010-Deleted-translation-using-Weblate-Kazakh.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,456 +0,0 @@
-From: KevinDuan <duankaiwen@kylinos.com>
-Date: Wed, 8 May 2024 10:18:12 +0800
-Subject: Deleted translation using Weblate (Kazakh)
-
----
- polkit-agent/i18n_ts/kk.ts | 441 ---------------------------------------------
- 1 file changed, 441 deletions(-)
- delete mode 100644 polkit-agent/i18n_ts/kk.ts
-
-diff --git a/polkit-agent/i18n_ts/kk.ts b/polkit-agent/i18n_ts/kk.ts
-deleted file mode 100644
-index f3a13b3..0000000
---- a/polkit-agent/i18n_ts/kk.ts
-+++ /dev/null
-@@ -1,441 +0,0 @@
--<?xml version="1.0" encoding="utf-8"?>
--<!DOCTYPE TS>
--<TS version="2.1" language="kk">
--<context>
--    <name>BioAuthWidget</name>
--    <message>
--        <source>Retry</source>
--        <translation type="obsolete">重试</translation>
--    </message>
--    <message>
--        <source>%1 too many unsuccessful attempts,please enter password.</source>
--        <translation type="obsolete">%1验证失败达最大次数,请使用密码登录</translation>
--    </message>
--    <message>
--        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
--        <translation type="obsolete">%1认证失败,还剩%2次尝试机会</translation>
--    </message>
--    <message>
--        <source>Please use wechat to scan the code</source>
--        <translation type="vanished">请使用微信扫码</translation>
--    </message>
--</context>
--<context>
--    <name>BioDevices</name>
--    <message>
--        <source>FingerPrint</source>
--        <translation type="obsolete">指纹</translation>
--    </message>
--    <message>
--        <source>FingerVein</source>
--        <translation type="obsolete">指静脉</translation>
--    </message>
--    <message>
--        <source>Iris</source>
--        <translation type="obsolete">虹膜</translation>
--    </message>
--    <message>
--        <source>Face</source>
--        <translation type="obsolete">人脸</translation>
--    </message>
--    <message>
--        <source>VoicePrint</source>
--        <translation type="obsolete">声纹</translation>
--    </message>
--    <message>
--        <source>Wechat</source>
--        <translation type="vanished">微信</translation>
--    </message>
--    <message>
--        <source>QRCode</source>
--        <translation type="vanished">二维码</translation>
--    </message>
--</context>
--<context>
--    <name>LoginOptionsWidget</name>
--    <message>
--        <source>Login Options</source>
--        <translation type="vanished">登录选项</translation>
--    </message>
--    <message>
--        <source>Wechat</source>
--        <translation type="vanished">微信</translation>
--    </message>
--</context>
--<context>
--    <name>MainWindow</name>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="66"/>
--        <source>Authentication</source>
--        <translation>Аутентификация</translation>
--    </message>
--    <message>
--        <source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
--        <translation type="vanished">指纹验证失败,您还有%1次尝试机会</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.ui" line="26"/>
--        <source>Form</source>
--        <translation></translation>
--    </message>
--    <message>
--        <source>More</source>
--        <translation type="obsolete">更多</translation>
--    </message>
--    <message>
--        <source>Restart</source>
--        <translation type="obsolete">重新开始</translation>
--    </message>
--    <message>
--        <source>Password</source>
--        <translation type="vanished">密码</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.ui" line="409"/>
--        <location filename="../src/mainwindow.cpp" line="1075"/>
--        <location filename="../src/mainwindow.cpp" line="1143"/>
--        <source>Biometric</source>
--        <translation>Биометриялық</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.ui" line="480"/>
--        <source>use password</source>
--        <translation>құпия сөзді пайдалану</translation>
--    </message>
--    <message>
--        <source>DeviceType:</source>
--        <translation type="obsolete">设备类型:</translation>
--    </message>
--    <message>
--        <source>Back</source>
--        <translation type="obsolete">返回</translation>
--    </message>
--    <message>
--        <source>Details</source>
--        <translation type="vanished">详细</translation>
--    </message>
--    <message>
--        <source>Action Id:</source>
--        <translation type="obsolete">动作:</translation>
--    </message>
--    <message>
--        <source>Description:</source>
--        <translation type="vanished">描述:</translation>
--    </message>
--    <message>
--        <source>Polkit.subject-pid:</source>
--        <translation type="vanished">Polkit.subject-pid:</translation>
--    </message>
--    <message>
--        <source>Retry</source>
--        <translation type="obsolete">重试</translation>
--    </message>
--    <message>
--        <source>Device types:</source>
--        <translation type="obsolete">设备类型:</translation>
--    </message>
--    <message>
--        <source>Vendor:</source>
--        <translation type="vanished">发行商:</translation>
--    </message>
--    <message>
--        <source>Action:</source>
--        <translation type="vanished">动作:</translation>
--    </message>
--    <message>
--        <source>Polkit.caller-pid:</source>
--        <translation type="vanished">Polkit.caller-pid:</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.ui" line="441"/>
--        <location filename="../src/mainwindow.cpp" line="1077"/>
--        <source>Cancel</source>
--        <translation>Болдырмау</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.ui" line="460"/>
--        <location filename="../src/mainwindow.cpp" line="1073"/>
--        <source>Authenticate</source>
--        <translation>Аутентификация</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="1079"/>
--        <location filename="../src/mainwindow.cpp" line="1183"/>
--        <source>Use password</source>
--        <translation>Құпиясөзді пайдалану</translation>
--    </message>
--    <message>
--        <source>Auth</source>
--        <translation type="obsolete">授权</translation>
--    </message>
--    <message>
--        <source>Too many unsuccessful attempts,please enter password.</source>
--        <translation type="vanished">指纹验证失败达最大次数,请使用密码解锁</translation>
--    </message>
--    <message>
--        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
--        <translation type="vanished">%1认证失败,还剩%2次尝试机会</translation>
--    </message>
--    <message>
--        <source>%1 too many unsuccessful attempts,please enter password.</source>
--        <translation type="vanished">%1验证失败达最大次数,请使用密码登录</translation>
--    </message>
--    <message>
--        <source>in authentication, please wait...</source>
--        <translation type="vanished">认证中,请稍等...</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="1219"/>
--        <location filename="../src/mainwindow.cpp" line="1292"/>
--        <location filename="../src/mainwindow.cpp" line="1293"/>
--        <source>Please try again in %1 minutes.</source>
--        <translation>% 1 минутта қайталап көріңіз.</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="1230"/>
--        <location filename="../src/mainwindow.cpp" line="1302"/>
--        <location filename="../src/mainwindow.cpp" line="1303"/>
--        <source>Please try again in %1 seconds.</source>
--        <translation>% 1 секундта қайталап көріңіз.</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="1240"/>
--        <location filename="../src/mainwindow.cpp" line="1241"/>
--        <location filename="../src/mainwindow.cpp" line="1311"/>
--        <location filename="../src/mainwindow.cpp" line="1312"/>
--        <source>Account locked permanently.</source>
--        <translation>Тіркелгі біржолата құлыпталады.</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="834"/>
--        <location filename="../src/mainwindow.cpp" line="835"/>
--        <source>Password cannot be empty</source>
--        <translation>Құпия сөз бос болмады</translation>
--    </message>
--    <message>
--        <source>Failed to verify %1, please enter password.</source>
--        <translation type="vanished">验证%1失败,请输入密码.</translation>
--    </message>
--    <message>
--        <source>Unable to verify %1, please enter password.</source>
--        <translation type="vanished">无法验证%1,请输入密码.</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="242"/>
--        <location filename="../src/mainwindow.cpp" line="246"/>
--        <source>Failed to verify %1, you still have %2 verification opportunities</source>
--        <translation>% 1 дегенді тексеру мүмкін болмады, сізде әлі де% 2 тексеру мүмкіндіктері бар</translation>
--    </message>
--    <message>
--        <source>An application is attempting to perform an action that requires privileges. Authentication is required to perform this action.</source>
--        <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="731"/>
--        <source>Password: </source>
--        <translation>Құпия сөз: </translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="335"/>
--        <source>Please enter your password or enroll your fingerprint </source>
--        <translation>Құпия сөзді енгізіңіз немесе саусақ ізін жазыңыз </translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="259"/>
--        <source>Abnormal network</source>
--        <translation>Аномальды желі</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="665"/>
--        <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
--        <translation>Бұл операция әкімшінің рұқсатын талап етеді. Осы операцияға рұқсат ету үшін құпия сөзіңізді енгізіңіз.</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="733"/>
--        <source>_Password: </source>
--        <translation>_Password: </translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="735"/>
--        <source>_Password:</source>
--        <translation>_Password:</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="850"/>
--        <source>Authentication failed, please try again.</source>
--        <translation>Аутентификация сәтсіз аяқталды, қайталап көріңіз.</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="779"/>
--        <source>days left</source>
--        <translation>қалған күндер</translation>
--    </message>
--    <message>
--        <source>Biometric/code scan authentication failed too many times, please enter the password.</source>
--        <translation type="vanished">生物/扫码验证失败达最大次数,请使用密码解锁.</translation>
--    </message>
--    <message>
--        <source>Bioauth/code scan authentication failed, you still have %1 verification opportunities</source>
--        <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="226"/>
--        <location filename="../src/mainwindow.cpp" line="1415"/>
--        <location filename="../src/mainwindow.cpp" line="1417"/>
--        <source>Failed to verify %1, please enter password to unlock</source>
--        <translation>% 1 дегенді тексеру мүмкін болмады, құлыптан босату үшін құпия сөзді енгізіңіз</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="231"/>
--        <location filename="../src/mainwindow.cpp" line="233"/>
--        <location filename="../src/mainwindow.cpp" line="1419"/>
--        <source>Unable to verify %1, please enter password to unlock</source>
--        <translation>% 1 дегенді тексеру мүмкін болмады, құлыптан босату үшін құпия сөзді енгізіңіз</translation>
--    </message>
--    <message>
--        <source>NET Exception</source>
--        <translation type="vanished">网络异常</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="671"/>
--        <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
--        <translation>Бағдарлама артықшылықтарды талап ететін әрекетті орындауға талпыныс жасайды. Іс-әрекетті орындау үшін рұқсат талап етуге болады.</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="108"/>
--        <location filename="../src/mainwindow.cpp" line="729"/>
--        <source>Input Password</source>
--        <translation>Құпиясөзді енгізу</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="105"/>
--        <source>Insert the ukey into the USB port</source>
--        <translation type="unfinished"></translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="107"/>
--        <source>Enter the ukey password</source>
--        <translation type="unfinished"></translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="783"/>
--        <source>hours left</source>
--        <translation>сағаттар қалды</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="787"/>
--        <source>minutes left</source>
--        <translation>минуттар қалды</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="791"/>
--        <source>seconds left</source>
--        <translation>секундтар қалды</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="880"/>
--        <location filename="../src/mainwindow.cpp" line="888"/>
--        <source>Input your password to authentication</source>
--        <translation type="unfinished"></translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="1434"/>
--        <source>Verify face recognition or enter password to unlock</source>
--        <translation>Бет тануды тексеру немесе құлыптан босату үшін құпия сөзді енгізу</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="1439"/>
--        <source>Press fingerprint or enter password to unlock</source>
--        <translation>Құлыптан босату үшін дактилоскопияны басу немесе құпия сөзді енгізу</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="1444"/>
--        <source>Verify voiceprint or enter password to unlock</source>
--        <translation>Құлыптан босату үшін дауыстық ізді тексеру немесе құпия сөзді енгізу</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="1449"/>
--        <source>Verify finger vein or enter password to unlock</source>
--        <translation>Құлыптан босату үшін саусақ көктамырын тексеру немесе құпия сөзді енгізу</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="1454"/>
--        <source>Verify iris or enter password to unlock</source>
--        <translation>Құлыптан босату үшін IRIS тексеру немесе құпиясөзді енгізу</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="1459"/>
--        <source>Use the bound wechat scanning code or enter the password to unlock</source>
--        <translation>Байланыстыратын wechat сканерлеу кодын пайдаланыңыз немесе құлыптан босату үшін құпия сөзді енгізіңіз</translation>
--    </message>
--    <message>
--        <source>Use the bound wechat scanning code or enter the password to log in</source>
--        <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="779"/>
--        <location filename="../src/mainwindow.cpp" line="783"/>
--        <location filename="../src/mainwindow.cpp" line="787"/>
--        <location filename="../src/mainwindow.cpp" line="791"/>
--        <source>Account locked,</source>
--        <translation>Тіркелгі құлыпталған,</translation>
--    </message>
--    <message>
--        <source>Authentication failed, please try again</source>
--        <translation type="obsolete">认证失败,请重试</translation>
--    </message>
--</context>
--<context>
--    <name>PolkitListener</name>
--    <message>
--        <location filename="../src/PolkitListener.cpp" line="88"/>
--        <source>Another client is already authenticating, please try again later.</source>
--        <translation>Басқа клиент қазірдің өзінде аутентификацияда, кейінірек қайталап көріңіз.</translation>
--    </message>
--    <message>
--        <location filename="../src/PolkitListener.cpp" line="265"/>
--        <source>Authentication failure, please try again.</source>
--        <translation>Аутентификация сәтсіздігі, қайталап көріңіз.</translation>
--    </message>
--    <message>
--        <location filename="../src/PolkitListener.cpp" line="272"/>
--        <source>Password input error!</source>
--        <translation>Құпия сөзді енгізу қатесі!</translation>
--    </message>
--    <message>
--        <source>Account locked %1 minutes due to %2 fail attempts</source>
--        <translation type="vanished">账户锁定%1分钟由于%2次错误尝试</translation>
--    </message>
--    <message>
--        <source>Authentication failure,there are still %1 remaining opportunities</source>
--        <translation type="vanished">认证失败,还剩余%1次尝试机会</translation>
--    </message>
--</context>
--<context>
--    <name>QObject</name>
--    <message>
--        <source>FingerPrint</source>
--        <translation type="obsolete">指纹</translation>
--    </message>
--    <message>
--        <source>FingerVein</source>
--        <translation type="obsolete">指静脉</translation>
--    </message>
--    <message>
--        <source>Iris</source>
--        <translation type="obsolete">虹膜</translation>
--    </message>
--    <message>
--        <source>Face</source>
--        <translation type="obsolete">人脸</translation>
--    </message>
--    <message>
--        <source>VoicePrint</source>
--        <translation type="obsolete">声纹</translation>
--    </message>
--    <message>
--        <source>Cancel</source>
--        <translation type="obsolete">取消</translation>
--    </message>
--</context>
--</TS>
diff -Nru ukui-biometric-auth-4.10.0.0/debian/patches/0011-Deleted-translation-using-Weblate-Uyghur.patch ukui-biometric-auth-4.20.0.0/debian/patches/0011-Deleted-translation-using-Weblate-Uyghur.patch
--- ukui-biometric-auth-4.10.0.0/debian/patches/0011-Deleted-translation-using-Weblate-Uyghur.patch	2024-04-23 10:31:46.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/debian/patches/0011-Deleted-translation-using-Weblate-Uyghur.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,456 +0,0 @@
-From: KevinDuan <duankaiwen@kylinos.com>
-Date: Wed, 8 May 2024 10:18:25 +0800
-Subject: Deleted translation using Weblate (Uyghur)
-
----
- polkit-agent/i18n_ts/ug.ts | 441 ---------------------------------------------
- 1 file changed, 441 deletions(-)
- delete mode 100644 polkit-agent/i18n_ts/ug.ts
-
-diff --git a/polkit-agent/i18n_ts/ug.ts b/polkit-agent/i18n_ts/ug.ts
-deleted file mode 100644
-index 3b2d973..0000000
---- a/polkit-agent/i18n_ts/ug.ts
-+++ /dev/null
-@@ -1,441 +0,0 @@
--<?xml version="1.0" encoding="utf-8"?>
--<!DOCTYPE TS>
--<TS version="2.1" language="ug">
--<context>
--    <name>BioAuthWidget</name>
--    <message>
--        <source>Retry</source>
--        <translation type="obsolete">重试</translation>
--    </message>
--    <message>
--        <source>%1 too many unsuccessful attempts,please enter password.</source>
--        <translation type="obsolete">%1验证失败达最大次数,请使用密码登录</translation>
--    </message>
--    <message>
--        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
--        <translation type="obsolete">%1认证失败,还剩%2次尝试机会</translation>
--    </message>
--    <message>
--        <source>Please use wechat to scan the code</source>
--        <translation type="vanished">请使用微信扫码</translation>
--    </message>
--</context>
--<context>
--    <name>BioDevices</name>
--    <message>
--        <source>FingerPrint</source>
--        <translation type="obsolete">指纹</translation>
--    </message>
--    <message>
--        <source>FingerVein</source>
--        <translation type="obsolete">指静脉</translation>
--    </message>
--    <message>
--        <source>Iris</source>
--        <translation type="obsolete">虹膜</translation>
--    </message>
--    <message>
--        <source>Face</source>
--        <translation type="obsolete">人脸</translation>
--    </message>
--    <message>
--        <source>VoicePrint</source>
--        <translation type="obsolete">声纹</translation>
--    </message>
--    <message>
--        <source>Wechat</source>
--        <translation type="vanished">微信</translation>
--    </message>
--    <message>
--        <source>QRCode</source>
--        <translation type="vanished">二维码</translation>
--    </message>
--</context>
--<context>
--    <name>LoginOptionsWidget</name>
--    <message>
--        <source>Login Options</source>
--        <translation type="vanished">登录选项</translation>
--    </message>
--    <message>
--        <source>Wechat</source>
--        <translation type="vanished">微信</translation>
--    </message>
--</context>
--<context>
--    <name>MainWindow</name>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="66"/>
--        <source>Authentication</source>
--        <translation>راستىنى دەلىللەش</translation>
--    </message>
--    <message>
--        <source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
--        <translation type="vanished">指纹验证失败,您还有%1次尝试机会</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.ui" line="26"/>
--        <source>Form</source>
--        <translation></translation>
--    </message>
--    <message>
--        <source>More</source>
--        <translation type="obsolete">更多</translation>
--    </message>
--    <message>
--        <source>Restart</source>
--        <translation type="obsolete">重新开始</translation>
--    </message>
--    <message>
--        <source>Password</source>
--        <translation type="vanished">密码</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.ui" line="409"/>
--        <location filename="../src/mainwindow.cpp" line="1075"/>
--        <location filename="../src/mainwindow.cpp" line="1143"/>
--        <source>Biometric</source>
--        <translation>بىئومېتىرىيە</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.ui" line="480"/>
--        <source>use password</source>
--        <translation>مەخپىي نومۇر ئىشلىتىش</translation>
--    </message>
--    <message>
--        <source>DeviceType:</source>
--        <translation type="obsolete">设备类型:</translation>
--    </message>
--    <message>
--        <source>Back</source>
--        <translation type="obsolete">返回</translation>
--    </message>
--    <message>
--        <source>Details</source>
--        <translation type="vanished">详细</translation>
--    </message>
--    <message>
--        <source>Action Id:</source>
--        <translation type="obsolete">动作:</translation>
--    </message>
--    <message>
--        <source>Description:</source>
--        <translation type="vanished">描述:</translation>
--    </message>
--    <message>
--        <source>Polkit.subject-pid:</source>
--        <translation type="vanished">Polkit.subject-pid:</translation>
--    </message>
--    <message>
--        <source>Retry</source>
--        <translation type="obsolete">重试</translation>
--    </message>
--    <message>
--        <source>Device types:</source>
--        <translation type="obsolete">设备类型:</translation>
--    </message>
--    <message>
--        <source>Vendor:</source>
--        <translation type="vanished">发行商:</translation>
--    </message>
--    <message>
--        <source>Action:</source>
--        <translation type="vanished">动作:</translation>
--    </message>
--    <message>
--        <source>Polkit.caller-pid:</source>
--        <translation type="vanished">Polkit.caller-pid:</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.ui" line="441"/>
--        <location filename="../src/mainwindow.cpp" line="1077"/>
--        <source>Cancel</source>
--        <translation>ئەمەلدىن قالدۇرۇش</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.ui" line="460"/>
--        <location filename="../src/mainwindow.cpp" line="1073"/>
--        <source>Authenticate</source>
--        <translation>چىنلىق دەلىللەش</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="1079"/>
--        <location filename="../src/mainwindow.cpp" line="1183"/>
--        <source>Use password</source>
--        <translation>پارول ئىشلىتىش</translation>
--    </message>
--    <message>
--        <source>Auth</source>
--        <translation type="obsolete">授权</translation>
--    </message>
--    <message>
--        <source>Too many unsuccessful attempts,please enter password.</source>
--        <translation type="vanished">指纹验证失败达最大次数,请使用密码解锁</translation>
--    </message>
--    <message>
--        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
--        <translation type="vanished">%1认证失败,还剩%2次尝试机会</translation>
--    </message>
--    <message>
--        <source>%1 too many unsuccessful attempts,please enter password.</source>
--        <translation type="vanished">%1验证失败达最大次数,请使用密码登录</translation>
--    </message>
--    <message>
--        <source>in authentication, please wait...</source>
--        <translation type="vanished">认证中,请稍等...</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="1219"/>
--        <location filename="../src/mainwindow.cpp" line="1292"/>
--        <location filename="../src/mainwindow.cpp" line="1293"/>
--        <source>Please try again in %1 minutes.</source>
--        <translation>٪1 مىنۇت ئىچىدە قايتا سىناپ بېقىڭ.</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="1230"/>
--        <location filename="../src/mainwindow.cpp" line="1302"/>
--        <location filename="../src/mainwindow.cpp" line="1303"/>
--        <source>Please try again in %1 seconds.</source>
--        <translation>٪1 سېكۇنت ئىچىدە قايتا سىناپ بېقىڭ.</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="1240"/>
--        <location filename="../src/mainwindow.cpp" line="1241"/>
--        <location filename="../src/mainwindow.cpp" line="1311"/>
--        <location filename="../src/mainwindow.cpp" line="1312"/>
--        <source>Account locked permanently.</source>
--        <translation>ھېسابات مەڭگۈلۈك قۇلۇپلىنىدۇ.</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="834"/>
--        <location filename="../src/mainwindow.cpp" line="835"/>
--        <source>Password cannot be empty</source>
--        <translation>مەخپىي نومۇرنى بوش قويۇشقا بولمايدۇ</translation>
--    </message>
--    <message>
--        <source>Failed to verify %1, please enter password.</source>
--        <translation type="vanished">验证%1失败,请输入密码.</translation>
--    </message>
--    <message>
--        <source>Unable to verify %1, please enter password.</source>
--        <translation type="vanished">无法验证%1,请输入密码.</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="242"/>
--        <location filename="../src/mainwindow.cpp" line="246"/>
--        <source>Failed to verify %1, you still have %2 verification opportunities</source>
--        <translation>٪1 نى دەلىللەش مەغلۇپ بولدى، سىزدە يەنىلا ٪2 دەلىللەش پۇرسىتى بار</translation>
--    </message>
--    <message>
--        <source>An application is attempting to perform an action that requires privileges. Authentication is required to perform this action.</source>
--        <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="731"/>
--        <source>Password: </source>
--        <translation>مەخپىي نومۇرى: </translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="335"/>
--        <source>Please enter your password or enroll your fingerprint </source>
--        <translation>مەخپىي نومۇرىڭىزنى كىرگۈزۈڭ ياكى بارماق ئىزىڭىزنى تىزىملىتىڭ </translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="259"/>
--        <source>Abnormal network</source>
--        <translation>بىنورمال تور</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="665"/>
--        <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
--        <translation>بۇ مەشغۇلات باشقۇرغۇچىنىڭ ھوقۇق بېرىشىنى تەلەپ قىلىدۇ. بۇ مەشغۇلاتقا رۇخسەت قىلىش ئۈچۈن پارولىڭىزنى كىرگۈزۈڭ.</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="733"/>
--        <source>_Password: </source>
--        <translation>_Password: </translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="735"/>
--        <source>_Password:</source>
--        <translation>_Password:</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="850"/>
--        <source>Authentication failed, please try again.</source>
--        <translation>دەلىللەش مەغلۇپ بولدى، قايتا سىناپ بېقىڭ.</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="779"/>
--        <source>days left</source>
--        <translation>قالغان كۈنلەر</translation>
--    </message>
--    <message>
--        <source>Biometric/code scan authentication failed too many times, please enter the password.</source>
--        <translation type="vanished">生物/扫码验证失败达最大次数,请使用密码解锁.</translation>
--    </message>
--    <message>
--        <source>Bioauth/code scan authentication failed, you still have %1 verification opportunities</source>
--        <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="226"/>
--        <location filename="../src/mainwindow.cpp" line="1415"/>
--        <location filename="../src/mainwindow.cpp" line="1417"/>
--        <source>Failed to verify %1, please enter password to unlock</source>
--        <translation>٪1 نى دەلىللەش مەغلۇپ بولدى، مەخپى نۇمۇر كىرگۈزۈڭ</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="231"/>
--        <location filename="../src/mainwindow.cpp" line="233"/>
--        <location filename="../src/mainwindow.cpp" line="1419"/>
--        <source>Unable to verify %1, please enter password to unlock</source>
--        <translation>٪1 نى دەلىللەشكە ئامالسىز، مەخپىي نومۇرنى كىرگۈزۈپ قۇلۇپنى ئاچ</translation>
--    </message>
--    <message>
--        <source>NET Exception</source>
--        <translation type="vanished">网络异常</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="671"/>
--        <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
--        <translation>بىر پروگرامما ئىمتىياز تەلەپ قىلىدىغان ھەرىكەتنى قىلىشقا ئۇرۇنماقتا. بۇ ھەرىكەتنى ئىجرا قىلىش ئۈچۈن ھوقۇق تەلەپ قىلىدۇ.</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="108"/>
--        <location filename="../src/mainwindow.cpp" line="729"/>
--        <source>Input Password</source>
--        <translation>ئىم كىرگۈزۈش</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="105"/>
--        <source>Insert the ukey into the USB port</source>
--        <translation type="unfinished"></translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="107"/>
--        <source>Enter the ukey password</source>
--        <translation type="unfinished"></translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="783"/>
--        <source>hours left</source>
--        <translation>قالغان سائەتلەر</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="787"/>
--        <source>minutes left</source>
--        <translation>مىنۇت قالدى</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="791"/>
--        <source>seconds left</source>
--        <translation>سېكۇنت قالدى</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="880"/>
--        <location filename="../src/mainwindow.cpp" line="888"/>
--        <source>Input your password to authentication</source>
--        <translation type="unfinished"></translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="1434"/>
--        <source>Verify face recognition or enter password to unlock</source>
--        <translation>چىراي تونۇشنى دەلىللەش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="1439"/>
--        <source>Press fingerprint or enter password to unlock</source>
--        <translation>بارماق ئىزىنى بېسىش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="1444"/>
--        <source>Verify voiceprint or enter password to unlock</source>
--        <translation>ئاۋاز ئىزىنى دەلىللەش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="1449"/>
--        <source>Verify finger vein or enter password to unlock</source>
--        <translation>بارماق تومۇرىنى ئېنىقلاش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="1454"/>
--        <source>Verify iris or enter password to unlock</source>
--        <translation>Iris نى ئېنىقلاش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="1459"/>
--        <source>Use the bound wechat scanning code or enter the password to unlock</source>
--        <translation>باغلانغان ئۈندىدارنى سىكاننېرلاش كودى ياكى مەخپىي نومۇرىنى كىرگۈزۈپ قۇلۇپ ئېچىش</translation>
--    </message>
--    <message>
--        <source>Use the bound wechat scanning code or enter the password to log in</source>
--        <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
--    </message>
--    <message>
--        <location filename="../src/mainwindow.cpp" line="779"/>
--        <location filename="../src/mainwindow.cpp" line="783"/>
--        <location filename="../src/mainwindow.cpp" line="787"/>
--        <location filename="../src/mainwindow.cpp" line="791"/>
--        <source>Account locked,</source>
--        <translation>ھېسابات قۇلۇپلانغان ،</translation>
--    </message>
--    <message>
--        <source>Authentication failed, please try again</source>
--        <translation type="obsolete">认证失败,请重试</translation>
--    </message>
--</context>
--<context>
--    <name>PolkitListener</name>
--    <message>
--        <location filename="../src/PolkitListener.cpp" line="88"/>
--        <source>Another client is already authenticating, please try again later.</source>
--        <translation>يەنە بىر خېرىدار ئاللىقاچان دەلىللەشكە باشلىدى، سەل تۇرۇپ قايتا سىناپ بېقىڭ.</translation>
--    </message>
--    <message>
--        <location filename="../src/PolkitListener.cpp" line="265"/>
--        <source>Authentication failure, please try again.</source>
--        <translation>دەلىللەش مەغلۇپ بولدى، قايتا سىناپ بېقىڭ.</translation>
--    </message>
--    <message>
--        <location filename="../src/PolkitListener.cpp" line="272"/>
--        <source>Password input error!</source>
--        <translation>پارول كىرگۈزۈش خاتالىقى!</translation>
--    </message>
--    <message>
--        <source>Account locked %1 minutes due to %2 fail attempts</source>
--        <translation type="vanished">账户锁定%1分钟由于%2次错误尝试</translation>
--    </message>
--    <message>
--        <source>Authentication failure,there are still %1 remaining opportunities</source>
--        <translation type="vanished">认证失败,还剩余%1次尝试机会</translation>
--    </message>
--</context>
--<context>
--    <name>QObject</name>
--    <message>
--        <source>FingerPrint</source>
--        <translation type="obsolete">指纹</translation>
--    </message>
--    <message>
--        <source>FingerVein</source>
--        <translation type="obsolete">指静脉</translation>
--    </message>
--    <message>
--        <source>Iris</source>
--        <translation type="obsolete">虹膜</translation>
--    </message>
--    <message>
--        <source>Face</source>
--        <translation type="obsolete">人脸</translation>
--    </message>
--    <message>
--        <source>VoicePrint</source>
--        <translation type="obsolete">声纹</translation>
--    </message>
--    <message>
--        <source>Cancel</source>
--        <translation type="obsolete">取消</translation>
--    </message>
--</context>
--</TS>
diff -Nru ukui-biometric-auth-4.10.0.0/debian/patches/0012-Added-translation-using-Weblate-Uyghur.patch ukui-biometric-auth-4.20.0.0/debian/patches/0012-Added-translation-using-Weblate-Uyghur.patch
--- ukui-biometric-auth-4.10.0.0/debian/patches/0012-Added-translation-using-Weblate-Uyghur.patch	2024-04-23 10:31:46.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/debian/patches/0012-Added-translation-using-Weblate-Uyghur.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,1173 +0,0 @@
-From: KevinDuan <duankaiwen@kylinos.com>
-Date: Wed, 8 May 2024 10:18:52 +0800
-Subject: Added translation using Weblate (Uyghur)
-
----
- polkit-agent/i18n_ts/kk.ts | 441 +++++++++++++++++++++++++++++++++++++++++++++
- polkit-agent/i18n_ts/ky.ts |  72 ++++----
- polkit-agent/i18n_ts/ug.ts | 441 +++++++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 918 insertions(+), 36 deletions(-)
- create mode 100644 polkit-agent/i18n_ts/kk.ts
- create mode 100644 polkit-agent/i18n_ts/ug.ts
-
-diff --git a/polkit-agent/i18n_ts/kk.ts b/polkit-agent/i18n_ts/kk.ts
-new file mode 100644
-index 0000000..80308b0
---- /dev/null
-+++ b/polkit-agent/i18n_ts/kk.ts
-@@ -0,0 +1,441 @@
-+<?xml version="1.0" encoding="utf-8"?>
-+<!DOCTYPE TS>
-+<TS version="2.1" language="kk">
-+<context>
-+    <name>BioAuthWidget</name>
-+    <message>
-+        <source>Retry</source>
-+        <translation type="obsolete">重试</translation>
-+    </message>
-+    <message>
-+        <source>%1 too many unsuccessful attempts,please enter password.</source>
-+        <translation type="obsolete">%1验证失败达最大次数,请使用密码登录</translation>
-+    </message>
-+    <message>
-+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
-+        <translation type="obsolete">%1认证失败,还剩%2次尝试机会</translation>
-+    </message>
-+    <message>
-+        <source>Please use wechat to scan the code</source>
-+        <translation type="vanished">请使用微信扫码</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>BioDevices</name>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="obsolete">指纹</translation>
-+    </message>
-+    <message>
-+        <source>FingerVein</source>
-+        <translation type="obsolete">指静脉</translation>
-+    </message>
-+    <message>
-+        <source>Iris</source>
-+        <translation type="obsolete">虹膜</translation>
-+    </message>
-+    <message>
-+        <source>Face</source>
-+        <translation type="obsolete">人脸</translation>
-+    </message>
-+    <message>
-+        <source>VoicePrint</source>
-+        <translation type="obsolete">声纹</translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+    <message>
-+        <source>QRCode</source>
-+        <translation type="vanished">二维码</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>LoginOptionsWidget</name>
-+    <message>
-+        <source>Login Options</source>
-+        <translation type="vanished">登录选项</translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>MainWindow</name>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="66"/>
-+        <source>Authentication</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
-+        <translation type="vanished">指纹验证失败,您还有%1次尝试机会</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="26"/>
-+        <source>Form</source>
-+        <translation></translation>
-+    </message>
-+    <message>
-+        <source>More</source>
-+        <translation type="obsolete">更多</translation>
-+    </message>
-+    <message>
-+        <source>Restart</source>
-+        <translation type="obsolete">重新开始</translation>
-+    </message>
-+    <message>
-+        <source>Password</source>
-+        <translation type="vanished">密码</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="409"/>
-+        <location filename="../src/mainwindow.cpp" line="1075"/>
-+        <location filename="../src/mainwindow.cpp" line="1143"/>
-+        <source>Biometric</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="480"/>
-+        <source>use password</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>DeviceType:</source>
-+        <translation type="obsolete">设备类型:</translation>
-+    </message>
-+    <message>
-+        <source>Back</source>
-+        <translation type="obsolete">返回</translation>
-+    </message>
-+    <message>
-+        <source>Details</source>
-+        <translation type="vanished">详细</translation>
-+    </message>
-+    <message>
-+        <source>Action Id:</source>
-+        <translation type="obsolete">动作:</translation>
-+    </message>
-+    <message>
-+        <source>Description:</source>
-+        <translation type="vanished">描述:</translation>
-+    </message>
-+    <message>
-+        <source>Polkit.subject-pid:</source>
-+        <translation type="vanished">Polkit.subject-pid:</translation>
-+    </message>
-+    <message>
-+        <source>Retry</source>
-+        <translation type="obsolete">重试</translation>
-+    </message>
-+    <message>
-+        <source>Device types:</source>
-+        <translation type="obsolete">设备类型:</translation>
-+    </message>
-+    <message>
-+        <source>Vendor:</source>
-+        <translation type="vanished">发行商:</translation>
-+    </message>
-+    <message>
-+        <source>Action:</source>
-+        <translation type="vanished">动作:</translation>
-+    </message>
-+    <message>
-+        <source>Polkit.caller-pid:</source>
-+        <translation type="vanished">Polkit.caller-pid:</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="441"/>
-+        <location filename="../src/mainwindow.cpp" line="1077"/>
-+        <source>Cancel</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="460"/>
-+        <location filename="../src/mainwindow.cpp" line="1073"/>
-+        <source>Authenticate</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1079"/>
-+        <location filename="../src/mainwindow.cpp" line="1183"/>
-+        <source>Use password</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>Auth</source>
-+        <translation type="obsolete">授权</translation>
-+    </message>
-+    <message>
-+        <source>Too many unsuccessful attempts,please enter password.</source>
-+        <translation type="vanished">指纹验证失败达最大次数,请使用密码解锁</translation>
-+    </message>
-+    <message>
-+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
-+        <translation type="vanished">%1认证失败,还剩%2次尝试机会</translation>
-+    </message>
-+    <message>
-+        <source>%1 too many unsuccessful attempts,please enter password.</source>
-+        <translation type="vanished">%1验证失败达最大次数,请使用密码登录</translation>
-+    </message>
-+    <message>
-+        <source>in authentication, please wait...</source>
-+        <translation type="vanished">认证中,请稍等...</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1219"/>
-+        <location filename="../src/mainwindow.cpp" line="1292"/>
-+        <location filename="../src/mainwindow.cpp" line="1293"/>
-+        <source>Please try again in %1 minutes.</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1230"/>
-+        <location filename="../src/mainwindow.cpp" line="1302"/>
-+        <location filename="../src/mainwindow.cpp" line="1303"/>
-+        <source>Please try again in %1 seconds.</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1240"/>
-+        <location filename="../src/mainwindow.cpp" line="1241"/>
-+        <location filename="../src/mainwindow.cpp" line="1311"/>
-+        <location filename="../src/mainwindow.cpp" line="1312"/>
-+        <source>Account locked permanently.</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="834"/>
-+        <location filename="../src/mainwindow.cpp" line="835"/>
-+        <source>Password cannot be empty</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>Failed to verify %1, please enter password.</source>
-+        <translation type="vanished">验证%1失败,请输入密码.</translation>
-+    </message>
-+    <message>
-+        <source>Unable to verify %1, please enter password.</source>
-+        <translation type="vanished">无法验证%1,请输入密码.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="242"/>
-+        <location filename="../src/mainwindow.cpp" line="246"/>
-+        <source>Failed to verify %1, you still have %2 verification opportunities</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>An application is attempting to perform an action that requires privileges. Authentication is required to perform this action.</source>
-+        <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="731"/>
-+        <source>Password: </source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="335"/>
-+        <source>Please enter your password or enroll your fingerprint </source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="259"/>
-+        <source>Abnormal network</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="665"/>
-+        <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="733"/>
-+        <source>_Password: </source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="735"/>
-+        <source>_Password:</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="850"/>
-+        <source>Authentication failed, please try again.</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="779"/>
-+        <source>days left</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>Biometric/code scan authentication failed too many times, please enter the password.</source>
-+        <translation type="vanished">生物/扫码验证失败达最大次数,请使用密码解锁.</translation>
-+    </message>
-+    <message>
-+        <source>Bioauth/code scan authentication failed, you still have %1 verification opportunities</source>
-+        <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="226"/>
-+        <location filename="../src/mainwindow.cpp" line="1415"/>
-+        <location filename="../src/mainwindow.cpp" line="1417"/>
-+        <source>Failed to verify %1, please enter password to unlock</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="231"/>
-+        <location filename="../src/mainwindow.cpp" line="233"/>
-+        <location filename="../src/mainwindow.cpp" line="1419"/>
-+        <source>Unable to verify %1, please enter password to unlock</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>NET Exception</source>
-+        <translation type="vanished">网络异常</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="671"/>
-+        <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="108"/>
-+        <location filename="../src/mainwindow.cpp" line="729"/>
-+        <source>Input Password</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="105"/>
-+        <source>Insert the ukey into the USB port</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="107"/>
-+        <source>Enter the ukey password</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="783"/>
-+        <source>hours left</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="787"/>
-+        <source>minutes left</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="791"/>
-+        <source>seconds left</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="880"/>
-+        <location filename="../src/mainwindow.cpp" line="888"/>
-+        <source>Input your password to authentication</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1434"/>
-+        <source>Verify face recognition or enter password to unlock</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1439"/>
-+        <source>Press fingerprint or enter password to unlock</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1444"/>
-+        <source>Verify voiceprint or enter password to unlock</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1449"/>
-+        <source>Verify finger vein or enter password to unlock</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1454"/>
-+        <source>Verify iris or enter password to unlock</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1459"/>
-+        <source>Use the bound wechat scanning code or enter the password to unlock</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>Use the bound wechat scanning code or enter the password to log in</source>
-+        <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="779"/>
-+        <location filename="../src/mainwindow.cpp" line="783"/>
-+        <location filename="../src/mainwindow.cpp" line="787"/>
-+        <location filename="../src/mainwindow.cpp" line="791"/>
-+        <source>Account locked,</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>Authentication failed, please try again</source>
-+        <translation type="obsolete">认证失败,请重试</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>PolkitListener</name>
-+    <message>
-+        <location filename="../src/PolkitListener.cpp" line="88"/>
-+        <source>Another client is already authenticating, please try again later.</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/PolkitListener.cpp" line="265"/>
-+        <source>Authentication failure, please try again.</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/PolkitListener.cpp" line="272"/>
-+        <source>Password input error!</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>Account locked %1 minutes due to %2 fail attempts</source>
-+        <translation type="vanished">账户锁定%1分钟由于%2次错误尝试</translation>
-+    </message>
-+    <message>
-+        <source>Authentication failure,there are still %1 remaining opportunities</source>
-+        <translation type="vanished">认证失败,还剩余%1次尝试机会</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>QObject</name>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="obsolete">指纹</translation>
-+    </message>
-+    <message>
-+        <source>FingerVein</source>
-+        <translation type="obsolete">指静脉</translation>
-+    </message>
-+    <message>
-+        <source>Iris</source>
-+        <translation type="obsolete">虹膜</translation>
-+    </message>
-+    <message>
-+        <source>Face</source>
-+        <translation type="obsolete">人脸</translation>
-+    </message>
-+    <message>
-+        <source>VoicePrint</source>
-+        <translation type="obsolete">声纹</translation>
-+    </message>
-+    <message>
-+        <source>Cancel</source>
-+        <translation type="obsolete">取消</translation>
-+    </message>
-+</context>
-+</TS>
-diff --git a/polkit-agent/i18n_ts/ky.ts b/polkit-agent/i18n_ts/ky.ts
-index 7841ff1..c5cd060 100644
---- a/polkit-agent/i18n_ts/ky.ts
-+++ b/polkit-agent/i18n_ts/ky.ts
-@@ -67,7 +67,7 @@
-     <message>
-         <location filename="../src/mainwindow.cpp" line="66"/>
-         <source>Authentication</source>
--        <translation>Аутентификация</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
-@@ -95,12 +95,12 @@
-         <location filename="../src/mainwindow.cpp" line="1075"/>
-         <location filename="../src/mainwindow.cpp" line="1143"/>
-         <source>Biometric</source>
--        <translation>Биометрия</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.ui" line="480"/>
-         <source>use password</source>
--        <translation>сырсөз колдонуу</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <source>DeviceType:</source>
-@@ -150,19 +150,19 @@
-         <location filename="../src/mainwindow.ui" line="441"/>
-         <location filename="../src/mainwindow.cpp" line="1077"/>
-         <source>Cancel</source>
--        <translation>Жокко чыгаруу</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.ui" line="460"/>
-         <location filename="../src/mainwindow.cpp" line="1073"/>
-         <source>Authenticate</source>
--        <translation>Аутентификация</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="1079"/>
-         <location filename="../src/mainwindow.cpp" line="1183"/>
-         <source>Use password</source>
--        <translation>Сырсөз колдонуу</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <source>Auth</source>
-@@ -189,14 +189,14 @@
-         <location filename="../src/mainwindow.cpp" line="1292"/>
-         <location filename="../src/mainwindow.cpp" line="1293"/>
-         <source>Please try again in %1 minutes.</source>
--        <translation>%1 мүнөттө кайра аракет кылыңыз.</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="1230"/>
-         <location filename="../src/mainwindow.cpp" line="1302"/>
-         <location filename="../src/mainwindow.cpp" line="1303"/>
-         <source>Please try again in %1 seconds.</source>
--        <translation>%1 секунданын ичинде кайра аракет кылыңыз.</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="1240"/>
-@@ -204,13 +204,13 @@
-         <location filename="../src/mainwindow.cpp" line="1311"/>
-         <location filename="../src/mainwindow.cpp" line="1312"/>
-         <source>Account locked permanently.</source>
--        <translation>Эсеп биротоло кулпуланган.</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="834"/>
-         <location filename="../src/mainwindow.cpp" line="835"/>
-         <source>Password cannot be empty</source>
--        <translation>Сырсөз бош болушу мүмкүн эмес</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <source>Failed to verify %1, please enter password.</source>
-@@ -224,7 +224,7 @@
-         <location filename="../src/mainwindow.cpp" line="242"/>
-         <location filename="../src/mainwindow.cpp" line="246"/>
-         <source>Failed to verify %1, you still have %2 verification opportunities</source>
--        <translation>%1 текшерүүгө болбоду, сизде дагы эле %2 текшерүү мүмкүнчүлүктөрү бар</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <source>An application is attempting to perform an action that requires privileges. Authentication is required to perform this action.</source>
-@@ -233,42 +233,42 @@
-     <message>
-         <location filename="../src/mainwindow.cpp" line="731"/>
-         <source>Password: </source>
--        <translation>Сырсөз: </translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="335"/>
-         <source>Please enter your password or enroll your fingerprint </source>
--        <translation>Сырсөзүңөрдү киргизиңиз же манжа изин жазыңыз </translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="259"/>
-         <source>Abnormal network</source>
--        <translation>Аномалдуу тармак</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="665"/>
-         <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
--        <translation>Бул операция администратордун уруксатын талап кылат. Бул операцияга уруксат берүү үчүн сырсөздү киргизиңиз.</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="733"/>
-         <source>_Password: </source>
--        <translation>_Password: </translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="735"/>
-         <source>_Password:</source>
--        <translation>_Password:</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="850"/>
-         <source>Authentication failed, please try again.</source>
--        <translation>Аутентификация ишке ашпады, кайра аракет кылыңыз.</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="779"/>
-         <source>days left</source>
--        <translation>калган күндөр</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <source>Biometric/code scan authentication failed too many times, please enter the password.</source>
-@@ -283,14 +283,14 @@
-         <location filename="../src/mainwindow.cpp" line="1415"/>
-         <location filename="../src/mainwindow.cpp" line="1417"/>
-         <source>Failed to verify %1, please enter password to unlock</source>
--        <translation>%1 текшерүүгө болбоду, кулпусун ачуу үчүн сырсөздү киргизиңиз</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="231"/>
-         <location filename="../src/mainwindow.cpp" line="233"/>
-         <location filename="../src/mainwindow.cpp" line="1419"/>
-         <source>Unable to verify %1, please enter password to unlock</source>
--        <translation>%1 текшерүүгө болбоду, кулпусун ачуу үчүн сырсөздү киргизиңиз</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <source>NET Exception</source>
-@@ -299,13 +299,13 @@
-     <message>
-         <location filename="../src/mainwindow.cpp" line="671"/>
-         <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
--        <translation>Программа артыкчылыктарды талап кылган акцияны аткарууга аракет кылат. Акцияны аткарууга уруксат талап кылынат.</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="108"/>
-         <location filename="../src/mainwindow.cpp" line="729"/>
-         <source>Input Password</source>
--        <translation>Сырсөз киргизүү</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="105"/>
-@@ -320,17 +320,17 @@
-     <message>
-         <location filename="../src/mainwindow.cpp" line="783"/>
-         <source>hours left</source>
--        <translation>саат калды</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="787"/>
-         <source>minutes left</source>
--        <translation>мүнөт калды</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="791"/>
-         <source>seconds left</source>
--        <translation>секуд калды</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="880"/>
-@@ -341,32 +341,32 @@
-     <message>
-         <location filename="../src/mainwindow.cpp" line="1434"/>
-         <source>Verify face recognition or enter password to unlock</source>
--        <translation>Беттин таанылышын текшерүү же кулпуну ачуу үчүн сырсөз киргизүү</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="1439"/>
-         <source>Press fingerprint or enter password to unlock</source>
--        <translation>Манжа изин басуу же кулпуну ачуу үчүн сырсөз киргизүү</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="1444"/>
-         <source>Verify voiceprint or enter password to unlock</source>
--        <translation>Үн изин текшерүү же сырсөз киргизүү</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="1449"/>
-         <source>Verify finger vein or enter password to unlock</source>
--        <translation>Манжа тамырын текшерүү же кулпуну ачуу үчүн сырсөз киргизүү</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="1454"/>
-         <source>Verify iris or enter password to unlock</source>
--        <translation>Ирис текшерүү же кулпусун ачуу үчүн сырсөз киргизүү</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="1459"/>
-         <source>Use the bound wechat scanning code or enter the password to unlock</source>
--        <translation>Чектелген вечат сканерлеу кодын колдонуңуз же сырсөздү ачуу үчүн киргизиңиз</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <source>Use the bound wechat scanning code or enter the password to log in</source>
-@@ -378,7 +378,7 @@
-         <location filename="../src/mainwindow.cpp" line="787"/>
-         <location filename="../src/mainwindow.cpp" line="791"/>
-         <source>Account locked,</source>
--        <translation>Эсеп кулпуланган,</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <source>Authentication failed, please try again</source>
-@@ -390,17 +390,17 @@
-     <message>
-         <location filename="../src/PolkitListener.cpp" line="88"/>
-         <source>Another client is already authenticating, please try again later.</source>
--        <translation>Дагы бир кардар буга чейин аутентификацияланган, кийин кайра аракет кылыңыз.</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/PolkitListener.cpp" line="265"/>
-         <source>Authentication failure, please try again.</source>
--        <translation>Аутентификациянын жетишсиздиги, сураныч, кайрадан аракет кылыңыз.</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/PolkitListener.cpp" line="272"/>
-         <source>Password input error!</source>
--        <translation>Сырсөз киргизүү катасы!</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <source>Account locked %1 minutes due to %2 fail attempts</source>
-diff --git a/polkit-agent/i18n_ts/ug.ts b/polkit-agent/i18n_ts/ug.ts
-new file mode 100644
-index 0000000..6e7e835
---- /dev/null
-+++ b/polkit-agent/i18n_ts/ug.ts
-@@ -0,0 +1,441 @@
-+<?xml version="1.0" encoding="utf-8"?>
-+<!DOCTYPE TS>
-+<TS version="2.1" language="ug">
-+<context>
-+    <name>BioAuthWidget</name>
-+    <message>
-+        <source>Retry</source>
-+        <translation type="obsolete">重试</translation>
-+    </message>
-+    <message>
-+        <source>%1 too many unsuccessful attempts,please enter password.</source>
-+        <translation type="obsolete">%1验证失败达最大次数,请使用密码登录</translation>
-+    </message>
-+    <message>
-+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
-+        <translation type="obsolete">%1认证失败,还剩%2次尝试机会</translation>
-+    </message>
-+    <message>
-+        <source>Please use wechat to scan the code</source>
-+        <translation type="vanished">请使用微信扫码</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>BioDevices</name>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="obsolete">指纹</translation>
-+    </message>
-+    <message>
-+        <source>FingerVein</source>
-+        <translation type="obsolete">指静脉</translation>
-+    </message>
-+    <message>
-+        <source>Iris</source>
-+        <translation type="obsolete">虹膜</translation>
-+    </message>
-+    <message>
-+        <source>Face</source>
-+        <translation type="obsolete">人脸</translation>
-+    </message>
-+    <message>
-+        <source>VoicePrint</source>
-+        <translation type="obsolete">声纹</translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+    <message>
-+        <source>QRCode</source>
-+        <translation type="vanished">二维码</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>LoginOptionsWidget</name>
-+    <message>
-+        <source>Login Options</source>
-+        <translation type="vanished">登录选项</translation>
-+    </message>
-+    <message>
-+        <source>Wechat</source>
-+        <translation type="vanished">微信</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>MainWindow</name>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="66"/>
-+        <source>Authentication</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
-+        <translation type="vanished">指纹验证失败,您还有%1次尝试机会</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="26"/>
-+        <source>Form</source>
-+        <translation></translation>
-+    </message>
-+    <message>
-+        <source>More</source>
-+        <translation type="obsolete">更多</translation>
-+    </message>
-+    <message>
-+        <source>Restart</source>
-+        <translation type="obsolete">重新开始</translation>
-+    </message>
-+    <message>
-+        <source>Password</source>
-+        <translation type="vanished">密码</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="409"/>
-+        <location filename="../src/mainwindow.cpp" line="1075"/>
-+        <location filename="../src/mainwindow.cpp" line="1143"/>
-+        <source>Biometric</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="480"/>
-+        <source>use password</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>DeviceType:</source>
-+        <translation type="obsolete">设备类型:</translation>
-+    </message>
-+    <message>
-+        <source>Back</source>
-+        <translation type="obsolete">返回</translation>
-+    </message>
-+    <message>
-+        <source>Details</source>
-+        <translation type="vanished">详细</translation>
-+    </message>
-+    <message>
-+        <source>Action Id:</source>
-+        <translation type="obsolete">动作:</translation>
-+    </message>
-+    <message>
-+        <source>Description:</source>
-+        <translation type="vanished">描述:</translation>
-+    </message>
-+    <message>
-+        <source>Polkit.subject-pid:</source>
-+        <translation type="vanished">Polkit.subject-pid:</translation>
-+    </message>
-+    <message>
-+        <source>Retry</source>
-+        <translation type="obsolete">重试</translation>
-+    </message>
-+    <message>
-+        <source>Device types:</source>
-+        <translation type="obsolete">设备类型:</translation>
-+    </message>
-+    <message>
-+        <source>Vendor:</source>
-+        <translation type="vanished">发行商:</translation>
-+    </message>
-+    <message>
-+        <source>Action:</source>
-+        <translation type="vanished">动作:</translation>
-+    </message>
-+    <message>
-+        <source>Polkit.caller-pid:</source>
-+        <translation type="vanished">Polkit.caller-pid:</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="441"/>
-+        <location filename="../src/mainwindow.cpp" line="1077"/>
-+        <source>Cancel</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.ui" line="460"/>
-+        <location filename="../src/mainwindow.cpp" line="1073"/>
-+        <source>Authenticate</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1079"/>
-+        <location filename="../src/mainwindow.cpp" line="1183"/>
-+        <source>Use password</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>Auth</source>
-+        <translation type="obsolete">授权</translation>
-+    </message>
-+    <message>
-+        <source>Too many unsuccessful attempts,please enter password.</source>
-+        <translation type="vanished">指纹验证失败达最大次数,请使用密码解锁</translation>
-+    </message>
-+    <message>
-+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
-+        <translation type="vanished">%1认证失败,还剩%2次尝试机会</translation>
-+    </message>
-+    <message>
-+        <source>%1 too many unsuccessful attempts,please enter password.</source>
-+        <translation type="vanished">%1验证失败达最大次数,请使用密码登录</translation>
-+    </message>
-+    <message>
-+        <source>in authentication, please wait...</source>
-+        <translation type="vanished">认证中,请稍等...</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1219"/>
-+        <location filename="../src/mainwindow.cpp" line="1292"/>
-+        <location filename="../src/mainwindow.cpp" line="1293"/>
-+        <source>Please try again in %1 minutes.</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1230"/>
-+        <location filename="../src/mainwindow.cpp" line="1302"/>
-+        <location filename="../src/mainwindow.cpp" line="1303"/>
-+        <source>Please try again in %1 seconds.</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1240"/>
-+        <location filename="../src/mainwindow.cpp" line="1241"/>
-+        <location filename="../src/mainwindow.cpp" line="1311"/>
-+        <location filename="../src/mainwindow.cpp" line="1312"/>
-+        <source>Account locked permanently.</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="834"/>
-+        <location filename="../src/mainwindow.cpp" line="835"/>
-+        <source>Password cannot be empty</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>Failed to verify %1, please enter password.</source>
-+        <translation type="vanished">验证%1失败,请输入密码.</translation>
-+    </message>
-+    <message>
-+        <source>Unable to verify %1, please enter password.</source>
-+        <translation type="vanished">无法验证%1,请输入密码.</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="242"/>
-+        <location filename="../src/mainwindow.cpp" line="246"/>
-+        <source>Failed to verify %1, you still have %2 verification opportunities</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>An application is attempting to perform an action that requires privileges. Authentication is required to perform this action.</source>
-+        <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="731"/>
-+        <source>Password: </source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="335"/>
-+        <source>Please enter your password or enroll your fingerprint </source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="259"/>
-+        <source>Abnormal network</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="665"/>
-+        <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="733"/>
-+        <source>_Password: </source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="735"/>
-+        <source>_Password:</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="850"/>
-+        <source>Authentication failed, please try again.</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="779"/>
-+        <source>days left</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>Biometric/code scan authentication failed too many times, please enter the password.</source>
-+        <translation type="vanished">生物/扫码验证失败达最大次数,请使用密码解锁.</translation>
-+    </message>
-+    <message>
-+        <source>Bioauth/code scan authentication failed, you still have %1 verification opportunities</source>
-+        <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="226"/>
-+        <location filename="../src/mainwindow.cpp" line="1415"/>
-+        <location filename="../src/mainwindow.cpp" line="1417"/>
-+        <source>Failed to verify %1, please enter password to unlock</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="231"/>
-+        <location filename="../src/mainwindow.cpp" line="233"/>
-+        <location filename="../src/mainwindow.cpp" line="1419"/>
-+        <source>Unable to verify %1, please enter password to unlock</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>NET Exception</source>
-+        <translation type="vanished">网络异常</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="671"/>
-+        <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="108"/>
-+        <location filename="../src/mainwindow.cpp" line="729"/>
-+        <source>Input Password</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="105"/>
-+        <source>Insert the ukey into the USB port</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="107"/>
-+        <source>Enter the ukey password</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="783"/>
-+        <source>hours left</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="787"/>
-+        <source>minutes left</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="791"/>
-+        <source>seconds left</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="880"/>
-+        <location filename="../src/mainwindow.cpp" line="888"/>
-+        <source>Input your password to authentication</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1434"/>
-+        <source>Verify face recognition or enter password to unlock</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1439"/>
-+        <source>Press fingerprint or enter password to unlock</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1444"/>
-+        <source>Verify voiceprint or enter password to unlock</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1449"/>
-+        <source>Verify finger vein or enter password to unlock</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1454"/>
-+        <source>Verify iris or enter password to unlock</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="1459"/>
-+        <source>Use the bound wechat scanning code or enter the password to unlock</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>Use the bound wechat scanning code or enter the password to log in</source>
-+        <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
-+    </message>
-+    <message>
-+        <location filename="../src/mainwindow.cpp" line="779"/>
-+        <location filename="../src/mainwindow.cpp" line="783"/>
-+        <location filename="../src/mainwindow.cpp" line="787"/>
-+        <location filename="../src/mainwindow.cpp" line="791"/>
-+        <source>Account locked,</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>Authentication failed, please try again</source>
-+        <translation type="obsolete">认证失败,请重试</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>PolkitListener</name>
-+    <message>
-+        <location filename="../src/PolkitListener.cpp" line="88"/>
-+        <source>Another client is already authenticating, please try again later.</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/PolkitListener.cpp" line="265"/>
-+        <source>Authentication failure, please try again.</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <location filename="../src/PolkitListener.cpp" line="272"/>
-+        <source>Password input error!</source>
-+        <translation type="unfinished"></translation>
-+    </message>
-+    <message>
-+        <source>Account locked %1 minutes due to %2 fail attempts</source>
-+        <translation type="vanished">账户锁定%1分钟由于%2次错误尝试</translation>
-+    </message>
-+    <message>
-+        <source>Authentication failure,there are still %1 remaining opportunities</source>
-+        <translation type="vanished">认证失败,还剩余%1次尝试机会</translation>
-+    </message>
-+</context>
-+<context>
-+    <name>QObject</name>
-+    <message>
-+        <source>FingerPrint</source>
-+        <translation type="obsolete">指纹</translation>
-+    </message>
-+    <message>
-+        <source>FingerVein</source>
-+        <translation type="obsolete">指静脉</translation>
-+    </message>
-+    <message>
-+        <source>Iris</source>
-+        <translation type="obsolete">虹膜</translation>
-+    </message>
-+    <message>
-+        <source>Face</source>
-+        <translation type="obsolete">人脸</translation>
-+    </message>
-+    <message>
-+        <source>VoicePrint</source>
-+        <translation type="obsolete">声纹</translation>
-+    </message>
-+    <message>
-+        <source>Cancel</source>
-+        <translation type="obsolete">取消</translation>
-+    </message>
-+</context>
-+</TS>
diff -Nru ukui-biometric-auth-4.10.0.0/debian/patches/0013-Translated-using-Weblate-Uyghur.patch ukui-biometric-auth-4.20.0.0/debian/patches/0013-Translated-using-Weblate-Uyghur.patch
--- ukui-biometric-auth-4.10.0.0/debian/patches/0013-Translated-using-Weblate-Uyghur.patch	2024-04-23 10:31:46.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/debian/patches/0013-Translated-using-Weblate-Uyghur.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,145 +0,0 @@
-From: KevinDuan <duankaiwen@kylinos.com>
-Date: Tue, 21 May 2024 05:58:27 +0000
-Subject: Translated using Weblate (Uyghur)
-
-Currently translated at 94.7% (18 of 19 strings)
-
-Translation: openkylin-nile-new/ukui-biometric-auth
-Translate-URL: http://weblate.openkylin.top/projects/openkylin-nile-new/ukui-biometric-auth/ug/
----
- bioauth/i18n_ts/ug.ts | 36 ++++++++++++++++++------------------
- 1 file changed, 18 insertions(+), 18 deletions(-)
-
-diff --git a/bioauth/i18n_ts/ug.ts b/bioauth/i18n_ts/ug.ts
-index 8a4c988..a45ce46 100644
---- a/bioauth/i18n_ts/ug.ts
-+++ b/bioauth/i18n_ts/ug.ts
-@@ -6,7 +6,7 @@
-     <message>
-         <location filename="../src/bioauthwidget.ui" line="14"/>
-         <source>Form</source>
--        <translation></translation>
-+        <translation>جەدۋەل</translation>
-     </message>
-     <message>
-         <source>More</source>
-@@ -16,7 +16,7 @@
-         <location filename="../src/bioauthwidget.ui" line="146"/>
-         <location filename="../src/bioauthwidget.cpp" line="41"/>
-         <source>Retry</source>
--        <translation type="unfinished"></translation>
-+        <translation>قايتا قايتا تىرشىش</translation>
-     </message>
-     <message>
-         <source>Too many unsuccessful attempts,please enter password.</source>
-@@ -38,17 +38,17 @@
-         <location filename="../src/bioauthwidget.cpp" line="96"/>
-         <location filename="../src/bioauthwidget.cpp" line="212"/>
-         <source>%1 too many unsuccessful attempts,please enter password.</source>
--        <translation type="unfinished"></translation>
-+        <translation>مەغلۇپ بولۇش قېتىم سانى زىيادە كۆپ بولۇپ كەتتى، مەخپىي نومۇرنى كىرگۈزۈڭ</translation>
-     </message>
-     <message>
-         <location filename="../src/bioauthwidget.cpp" line="102"/>
-         <source>%1 authentication failure,there are still %2 remaining opportunities</source>
--        <translation type="unfinished"></translation>
-+        <translation>سالاھىيىتىنى دەلىللەش مەغلۇپ بولدى، يەنە ئىككى قېتىم پۇرسىتىڭىز قالدى</translation>
-     </message>
-     <message>
-         <location filename="../src/bioauthwidget.cpp" line="226"/>
-         <source>Please use wechat to scan the code</source>
--        <translation type="unfinished"></translation>
-+        <translation>ئۈندىداردا سىكانىرلاڭ</translation>
-     </message>
- </context>
- <context>
-@@ -56,47 +56,47 @@
-     <message>
-         <location filename="../src/biodevices.cpp" line="78"/>
-         <source>Unplugging of %1 device detected</source>
--        <translation type="unfinished"></translation>
-+        <translation>تەكشۈرۈپ بايقىغان 1 ئۈسكۈنىنى تارتىپ چىقارماق</translation>
-     </message>
-     <message>
-         <location filename="../src/biodevices.cpp" line="88"/>
-         <source>%1 device insertion detected</source>
--        <translation type="unfinished"></translation>
-+        <translation>1 ئۈسكۈنىنىڭ كىرگۈزۈلگەنلىكىنى تەكشۈرۈپ چىقماق</translation>
-     </message>
-     <message>
-         <location filename="../src/biodevices.cpp" line="97"/>
-         <source>Biometric Manager</source>
--        <translation type="unfinished"></translation>
-+        <translation>بىئولەگىيەلىك ئالاھىدىلىكنى باشقۇرۇش قورالى</translation>
-     </message>
-     <message>
-         <location filename="../src/biodevices.cpp" line="100"/>
-         <source>biometric</source>
--        <translation type="unfinished"></translation>
-+        <translation>بىئولوگىيەلىك ئالاھىدىلىك</translation>
-     </message>
-     <message>
-         <location filename="../src/biodevices.cpp" line="700"/>
-         <source>FingerPrint</source>
--        <translation type="unfinished"></translation>
-+        <translation>بارماق ئىزى</translation>
-     </message>
-     <message>
-         <location filename="../src/biodevices.cpp" line="702"/>
-         <source>FingerVein</source>
--        <translation type="unfinished"></translation>
-+        <translation>بارماقVein</translation>
-     </message>
-     <message>
-         <location filename="../src/biodevices.cpp" line="704"/>
-         <source>Iris</source>
--        <translation type="unfinished"></translation>
-+        <translation>ئېرسى</translation>
-     </message>
-     <message>
-         <location filename="../src/biodevices.cpp" line="706"/>
-         <source>Face</source>
--        <translation type="unfinished"></translation>
-+        <translation>يۈز</translation>
-     </message>
-     <message>
-         <location filename="../src/biodevices.cpp" line="708"/>
-         <source>VoicePrint</source>
--        <translation type="unfinished"></translation>
-+        <translation>بىخەتەرلىك شىڧىرلىق ئاچقۇچى</translation>
-     </message>
-     <message>
-         <location filename="../src/biodevices.cpp" line="710"/>
-@@ -106,7 +106,7 @@
-     <message>
-         <location filename="../src/biodevices.cpp" line="712"/>
-         <source>QRCode</source>
--        <translation type="unfinished"></translation>
-+        <translation>ئىككىلىك كود</translation>
-     </message>
-     <message>
-         <source>Wechat</source>
-@@ -118,7 +118,7 @@
-     <message>
-         <location filename="../src/biodeviceswidget.ui" line="14"/>
-         <source>Form</source>
--        <translation></translation>
-+        <translation>جەدۋەل</translation>
-     </message>
-     <message>
-         <source>Device types:</source>
-@@ -142,12 +142,12 @@
-     <message>
-         <location filename="../src/loginoptionswidget.cpp" line="79"/>
-         <source>Login Options</source>
--        <translation type="unfinished"></translation>
-+        <translation>كىرىش تاللانمىلىرى</translation>
-     </message>
-     <message>
-         <location filename="../src/loginoptionswidget.cpp" line="320"/>
-         <source>Password</source>
--        <translation type="unfinished"></translation>
-+        <translation>مەخپىي ئاچقۇچ</translation>
-     </message>
-     <message>
-         <source>Wechat</source>
diff -Nru ukui-biometric-auth-4.10.0.0/debian/patches/0014-Translated-using-Weblate-Uyghur.patch ukui-biometric-auth-4.20.0.0/debian/patches/0014-Translated-using-Weblate-Uyghur.patch
--- ukui-biometric-auth-4.10.0.0/debian/patches/0014-Translated-using-Weblate-Uyghur.patch	2024-04-23 10:31:46.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/debian/patches/0014-Translated-using-Weblate-Uyghur.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,43 +0,0 @@
-From: KevinDuan <duankaiwen@kylinos.com>
-Date: Tue, 21 May 2024 05:58:56 +0000
-Subject: Translated using Weblate (Uyghur)
-
-Currently translated at 12.0% (3 of 25 strings)
-
-Translation: openkylin-nile-new/ukui-biometric-auth-bin
-Translate-URL: http://weblate.openkylin.top/projects/openkylin-nile-new/ukui-biometric-auth-bin/ug/
----
- bioauth-bin/i18n_ts/ug.ts | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/bioauth-bin/i18n_ts/ug.ts b/bioauth-bin/i18n_ts/ug.ts
-index b766cfe..30c7d61 100644
---- a/bioauth-bin/i18n_ts/ug.ts
-+++ b/bioauth-bin/i18n_ts/ug.ts
-@@ -169,7 +169,7 @@
-     <message>
-         <location filename="../src/main.cpp" line="153"/>
-         <source>Cancel</source>
--        <translation type="unfinished"></translation>
-+        <translation>ئەمەلدىن قالدۇرۇش</translation>
-     </message>
-     <message>
-         <location filename="../src/main.cpp" line="162"/>
-@@ -221,7 +221,7 @@
-     <message>
-         <location filename="../src/main.cpp" line="262"/>
-         <source>User</source>
--        <translation type="unfinished"></translation>
-+        <translation>ئىشلەتكۈچى</translation>
-     </message>
-     <message>
-         <location filename="../src/main.cpp" line="263"/>
-@@ -266,7 +266,7 @@
-     <message>
-         <location filename="../src/main.cpp" line="348"/>
-         <source>Failed to verify %1, you still have %2 verification opportunities</source>
--        <translation type="unfinished"></translation>
-+        <translation>٪1 نى دەلىللەش مەغلۇپ بولدى، سىزدە يەنىلا ٪2 دەلىللەش پۇرسىتى بار</translation>
-     </message>
-     <message>
-         <location filename="../src/main.cpp" line="350"/>
diff -Nru ukui-biometric-auth-4.10.0.0/debian/patches/0015-Translated-using-Weblate-Uyghur.patch ukui-biometric-auth-4.20.0.0/debian/patches/0015-Translated-using-Weblate-Uyghur.patch
--- ukui-biometric-auth-4.10.0.0/debian/patches/0015-Translated-using-Weblate-Uyghur.patch	2024-04-23 10:31:46.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/debian/patches/0015-Translated-using-Weblate-Uyghur.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,288 +0,0 @@
-From: KevinDuan <duankaiwen@kylinos.com>
-Date: Tue, 21 May 2024 05:59:48 +0000
-Subject: Translated using Weblate (Uyghur)
-
-Currently translated at 92.5% (37 of 40 strings)
-
-Translation: openkylin-nile-new/ukui-biometric-auth-polkit-agent
-Translate-URL: http://weblate.openkylin.top/projects/openkylin-nile-new/ukui-biometric-auth-polkit-agent/ug/
----
- polkit-agent/i18n_ts/ug.ts | 74 +++++++++++++++++++++++-----------------------
- 1 file changed, 37 insertions(+), 37 deletions(-)
-
-diff --git a/polkit-agent/i18n_ts/ug.ts b/polkit-agent/i18n_ts/ug.ts
-index 6e7e835..0daf82d 100644
---- a/polkit-agent/i18n_ts/ug.ts
-+++ b/polkit-agent/i18n_ts/ug.ts
-@@ -67,7 +67,7 @@
-     <message>
-         <location filename="../src/mainwindow.cpp" line="66"/>
-         <source>Authentication</source>
--        <translation type="unfinished"></translation>
-+        <translation>راستىنى دەلىللەش</translation>
-     </message>
-     <message>
-         <source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
-@@ -76,7 +76,7 @@
-     <message>
-         <location filename="../src/mainwindow.ui" line="26"/>
-         <source>Form</source>
--        <translation></translation>
-+        <translation>جەدۋەل</translation>
-     </message>
-     <message>
-         <source>More</source>
-@@ -95,12 +95,12 @@
-         <location filename="../src/mainwindow.cpp" line="1075"/>
-         <location filename="../src/mainwindow.cpp" line="1143"/>
-         <source>Biometric</source>
--        <translation type="unfinished"></translation>
-+        <translation>بىئولەگىيەلىك ئالاھىدىلىكنى ئىشلىتىش</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.ui" line="480"/>
-         <source>use password</source>
--        <translation type="unfinished"></translation>
-+        <translation>مەخپىي نومۇر ئىشلىتىش</translation>
-     </message>
-     <message>
-         <source>DeviceType:</source>
-@@ -150,19 +150,19 @@
-         <location filename="../src/mainwindow.ui" line="441"/>
-         <location filename="../src/mainwindow.cpp" line="1077"/>
-         <source>Cancel</source>
--        <translation type="unfinished"></translation>
-+        <translation>ئەمەلدىن قالدۇرۇش</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.ui" line="460"/>
-         <location filename="../src/mainwindow.cpp" line="1073"/>
-         <source>Authenticate</source>
--        <translation type="unfinished"></translation>
-+        <translation>ھوقۇق بېرىش</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="1079"/>
-         <location filename="../src/mainwindow.cpp" line="1183"/>
-         <source>Use password</source>
--        <translation type="unfinished"></translation>
-+        <translation>مەخپىي نومۇر ئىشلىتىش ئارقىلىق دەلىللەش</translation>
-     </message>
-     <message>
-         <source>Auth</source>
-@@ -189,14 +189,14 @@
-         <location filename="../src/mainwindow.cpp" line="1292"/>
-         <location filename="../src/mainwindow.cpp" line="1293"/>
-         <source>Please try again in %1 minutes.</source>
--        <translation type="unfinished"></translation>
-+        <translation>٪1 مىنۇت ئىچىدە قايتا سىناپ بېقىڭ.</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="1230"/>
-         <location filename="../src/mainwindow.cpp" line="1302"/>
-         <location filename="../src/mainwindow.cpp" line="1303"/>
-         <source>Please try again in %1 seconds.</source>
--        <translation type="unfinished"></translation>
-+        <translation>٪1 سېكۇنت ئىچىدە قايتا سىناپ بېقىڭ.</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="1240"/>
-@@ -204,13 +204,13 @@
-         <location filename="../src/mainwindow.cpp" line="1311"/>
-         <location filename="../src/mainwindow.cpp" line="1312"/>
-         <source>Account locked permanently.</source>
--        <translation type="unfinished"></translation>
-+        <translation>ھېسابات مەڭگۈلۈك قۇلۇپلىنىدۇ.</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="834"/>
-         <location filename="../src/mainwindow.cpp" line="835"/>
-         <source>Password cannot be empty</source>
--        <translation type="unfinished"></translation>
-+        <translation>مەخپىي نومۇرنى بوش قويۇشقا بولمايدۇ</translation>
-     </message>
-     <message>
-         <source>Failed to verify %1, please enter password.</source>
-@@ -224,7 +224,7 @@
-         <location filename="../src/mainwindow.cpp" line="242"/>
-         <location filename="../src/mainwindow.cpp" line="246"/>
-         <source>Failed to verify %1, you still have %2 verification opportunities</source>
--        <translation type="unfinished"></translation>
-+        <translation>٪1 نى دەلىللەش مەغلۇپ بولدى، سىزدە يەنىلا ٪2 دەلىللەش پۇرسىتى بار</translation>
-     </message>
-     <message>
-         <source>An application is attempting to perform an action that requires privileges. Authentication is required to perform this action.</source>
-@@ -233,42 +233,42 @@
-     <message>
-         <location filename="../src/mainwindow.cpp" line="731"/>
-         <source>Password: </source>
--        <translation type="unfinished"></translation>
-+        <translation>مەخپىي نومۇر </translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="335"/>
-         <source>Please enter your password or enroll your fingerprint </source>
--        <translation type="unfinished"></translation>
-+        <translation>مەخپىي نومۇرىڭىزنى كىرگۈزۈڭ ياكى بارماق ئىزىڭىزنى تونۇتۇڭ </translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="259"/>
-         <source>Abnormal network</source>
--        <translation type="unfinished"></translation>
-+        <translation>بىنورمال تور</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="665"/>
-         <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
--        <translation type="unfinished"></translation>
-+        <translation>بۇ مەشغۇلات باشقۇرغۇچىنىڭ ھوقۇق بېرىشىنى تەلەپ قىلىدۇ.مەخپىي نومۇرنى كىرگۈزۈپ بي قېتىمقى مەشغۇلاتنىڭ ئېلىپ بېرىلىشىغا يول قويۇڭ.</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="733"/>
-         <source>_Password: </source>
--        <translation type="unfinished"></translation>
-+        <translation>مەخپىي نومۇر </translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="735"/>
-         <source>_Password:</source>
--        <translation type="unfinished"></translation>
-+        <translation>مەخپىي نومۇر</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="850"/>
-         <source>Authentication failed, please try again.</source>
--        <translation type="unfinished"></translation>
-+        <translation>دەلىللەش مەغلۇپ بولدى، قايتا سىناڭ</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="779"/>
-         <source>days left</source>
--        <translation type="unfinished"></translation>
-+        <translation>1 كۈندىن كېيىن سىناب بېقىڭ</translation>
-     </message>
-     <message>
-         <source>Biometric/code scan authentication failed too many times, please enter the password.</source>
-@@ -283,14 +283,14 @@
-         <location filename="../src/mainwindow.cpp" line="1415"/>
-         <location filename="../src/mainwindow.cpp" line="1417"/>
-         <source>Failed to verify %1, please enter password to unlock</source>
--        <translation type="unfinished"></translation>
-+        <translation>٪1 نى دەلىللەش مەغلۇپ بولدى، مەخپى نۇمۇر كىرگۈزۈڭ</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="231"/>
-         <location filename="../src/mainwindow.cpp" line="233"/>
-         <location filename="../src/mainwindow.cpp" line="1419"/>
-         <source>Unable to verify %1, please enter password to unlock</source>
--        <translation type="unfinished"></translation>
-+        <translation>٪1 نى دەلىللەشكە ئامالسىز، مەخپىي نومۇرنى كىرگۈزۈپ قۇلۇپنى ئېچىڭ</translation>
-     </message>
-     <message>
-         <source>NET Exception</source>
-@@ -299,13 +299,13 @@
-     <message>
-         <location filename="../src/mainwindow.cpp" line="671"/>
-         <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
--        <translation type="unfinished"></translation>
-+        <translation>بىر پروگرامما ئىمتىياز تەلەپ قىلىدىغان ھەرىكەتنى قىلىشقا ئۇرۇنماقتا. بۇ ھەرىكەتنى ئىجرا قىلىش ئۈچۈن ھوقۇق تەلەپ قىلىدۇ.</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="108"/>
-         <location filename="../src/mainwindow.cpp" line="729"/>
-         <source>Input Password</source>
--        <translation type="unfinished"></translation>
-+        <translation>ئىم كىرگۈزۈش</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="105"/>
-@@ -320,17 +320,17 @@
-     <message>
-         <location filename="../src/mainwindow.cpp" line="783"/>
-         <source>hours left</source>
--        <translation type="unfinished"></translation>
-+        <translation>بىر سائەتتىن كېيىن ئېچىلىدۇ</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="787"/>
-         <source>minutes left</source>
--        <translation type="unfinished"></translation>
-+        <translation>بىر مىنۇتتىن كېيىن ئېچىلىدۇ</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="791"/>
-         <source>seconds left</source>
--        <translation type="unfinished"></translation>
-+        <translation>بىر سېكۇنتتىن كېيىن ئېچىلىدۇ</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="880"/>
-@@ -341,32 +341,32 @@
-     <message>
-         <location filename="../src/mainwindow.cpp" line="1434"/>
-         <source>Verify face recognition or enter password to unlock</source>
--        <translation type="unfinished"></translation>
-+        <translation>چىراي تونۇشنى دەلىللەش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="1439"/>
-         <source>Press fingerprint or enter password to unlock</source>
--        <translation type="unfinished"></translation>
-+        <translation>بارماق ئىزىنى بېسىش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="1444"/>
-         <source>Verify voiceprint or enter password to unlock</source>
--        <translation type="unfinished"></translation>
-+        <translation>ئاۋاز ئىزىنى دەلىللەش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="1449"/>
-         <source>Verify finger vein or enter password to unlock</source>
--        <translation type="unfinished"></translation>
-+        <translation>بارماق ئىزى ئارقىلىق ئېنىقلاش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="1454"/>
-         <source>Verify iris or enter password to unlock</source>
--        <translation type="unfinished"></translation>
-+        <translation>Iris نى ئېنىقلاش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
-     </message>
-     <message>
-         <location filename="../src/mainwindow.cpp" line="1459"/>
-         <source>Use the bound wechat scanning code or enter the password to unlock</source>
--        <translation type="unfinished"></translation>
-+        <translation>باغلانغان ئۈندىدارنى سىكاننېرلاش كودى ياكى مەخپىي نومۇرىنى كىرگۈزۈپ قۇلۇپ ئېچىش</translation>
-     </message>
-     <message>
-         <source>Use the bound wechat scanning code or enter the password to log in</source>
-@@ -378,7 +378,7 @@
-         <location filename="../src/mainwindow.cpp" line="787"/>
-         <location filename="../src/mainwindow.cpp" line="791"/>
-         <source>Account locked,</source>
--        <translation type="unfinished"></translation>
-+        <translation>ئىشلىتىش نومۇرىڭىز قۇلۇپلىنىپ قالدى</translation>
-     </message>
-     <message>
-         <source>Authentication failed, please try again</source>
-@@ -390,17 +390,17 @@
-     <message>
-         <location filename="../src/PolkitListener.cpp" line="88"/>
-         <source>Another client is already authenticating, please try again later.</source>
--        <translation type="unfinished"></translation>
-+        <translation>يەنە بىر خېرىدار دەلىللەۋاتىدۇ، سەل تۇرۇپ قايتا سىناڭ.</translation>
-     </message>
-     <message>
-         <location filename="../src/PolkitListener.cpp" line="265"/>
-         <source>Authentication failure, please try again.</source>
--        <translation type="unfinished"></translation>
-+        <translation>دەلىللەش مەغلۇپ بولدى، قايتا سىناڭ.</translation>
-     </message>
-     <message>
-         <location filename="../src/PolkitListener.cpp" line="272"/>
-         <source>Password input error!</source>
--        <translation type="unfinished"></translation>
-+        <translation>كىرگۈزگەن مەخپىي نومۇر خاتا بولدى</translation>
-     </message>
-     <message>
-         <source>Account locked %1 minutes due to %2 fail attempts</source>
diff -Nru ukui-biometric-auth-4.10.0.0/debian/patches/series ukui-biometric-auth-4.20.0.0/debian/patches/series
--- ukui-biometric-auth-4.10.0.0/debian/patches/series	2024-04-23 10:31:46.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/debian/patches/series	2024-11-15 17:01:40.000000000 +0800
@@ -1,15 +1,2 @@
-0001-update-change.patch
+0001-update-changelog.patch
 0002-update-changelog.patch
-0003-update-changelog.patch
-0004-udpate-changelog.patch
-0005-16-task-190787-UKUI-Kylin-biometric-auth-screensaver.patch
-0006-COPYING-LICENSE.patch
-0007-17.patch
-0008-21.patch
-0009-Added-translation-using-Weblate-Uyghur.patch
-0010-Deleted-translation-using-Weblate-Kazakh.patch
-0011-Deleted-translation-using-Weblate-Uyghur.patch
-0012-Added-translation-using-Weblate-Uyghur.patch
-0013-Translated-using-Weblate-Uyghur.patch
-0014-Translated-using-Weblate-Uyghur.patch
-0015-Translated-using-Weblate-Uyghur.patch
diff -Nru ukui-biometric-auth-4.10.0.0/images/ukui-loginopt-finger.svg ukui-biometric-auth-4.20.0.0/images/ukui-loginopt-finger.svg
--- ukui-biometric-auth-4.10.0.0/images/ukui-loginopt-finger.svg	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/images/ukui-loginopt-finger.svg	2024-09-23 19:22:29.000000000 +0800
@@ -1 +1 @@
-<svg id="图层_1" data-name="图层 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 16 16"><defs><clipPath id="clip-path"><circle cx="8" cy="8" r="8" fill="none"/></clipPath></defs><g clip-path="url(#clip-path)"><path d="M8.2,4.33H8A2.3,2.3,0,0,0,5.73,5.91a3.59,3.59,0,0,0-.09,1.5,14.1,14.1,0,0,1-1.3,8.89.45.45,0,0,0,.18.61.54.54,0,0,0,.21.05.46.46,0,0,0,.4-.24,15,15,0,0,0,1.4-9.43,2.83,2.83,0,0,1,.06-1.11c.13-.4.41-.87,1.49-.95H8.2a1.26,1.26,0,0,1,1.24.85A11.83,11.83,0,0,1,10,8.35,8.18,8.18,0,0,1,10,9.58v.57a.85.85,0,0,1,0,.16.44.44,0,0,0,.38.5h.06a.45.45,0,0,0,.45-.39,1.51,1.51,0,0,0,0-.3V9.58a10.42,10.42,0,0,0-.07-1.36,13.39,13.39,0,0,0-.56-2.43A2.16,2.16,0,0,0,8.2,4.33Z" fill="#1a1a1a"/><path d="M8.05,1a6.57,6.57,0,0,0-1.23.12,5.81,5.81,0,0,0-4.6,6.76c.08.52.14,1,.21,1.57l.09.74a.44.44,0,0,0,.45.39H3a.44.44,0,0,0,.38-.5l-.09-.74c-.06-.53-.13-1.06-.21-1.6A4.91,4.91,0,0,1,7,2,5.33,5.33,0,0,1,8,1.9a5.33,5.33,0,0,1,3.8,1.69.43.43,0,0,0,.31.13.42.42,0,0,0,.32-.13.45.45,0,0,0,0-.64A6.15,6.15,0,0,0,8.05,1Z" fill="#1a1a1a"/><path d="M5.54,4.88h0M5.3,3.93a.49.49,0,0,0-.2,0,1.64,1.64,0,0,0-.58.56,4.38,4.38,0,0,0-.6,3.38,13.61,13.61,0,0,1-.11,5,9.55,9.55,0,0,1-1,2.68A.45.45,0,0,0,3,16.2a.42.42,0,0,0,.22.05A.45.45,0,0,0,3.64,16,10.4,10.4,0,0,0,4.69,13.1a14.69,14.69,0,0,0,.12-5.31,3.4,3.4,0,0,1,.44-2.72,1,1,0,0,1,.25-.28.46.46,0,0,0,.2-.61.45.45,0,0,0-.4-.25Z" fill="#1a1a1a"/><path d="M8.15,2.72a5.46,5.46,0,0,0-1.51.22.45.45,0,0,0-.31.56.43.43,0,0,0,.43.32h.12a4.42,4.42,0,0,1,1.25-.19,3.07,3.07,0,0,1,3,2.23,13.82,13.82,0,0,1,.57,4.41,19.75,19.75,0,0,1-.91,5.93,3.74,3.74,0,0,1-.18.48.44.44,0,0,0,.21.6.43.43,0,0,0,.19,0,.45.45,0,0,0,.41-.25c.09-.19.16-.39.23-.58a20.8,20.8,0,0,0,.95-6.22A14.66,14.66,0,0,0,12,5.56,3.93,3.93,0,0,0,8.15,2.72Z" fill="#1a1a1a"/><path d="M3,13.15H3m-.5-.69a.45.45,0,0,0-.4.25,2.37,2.37,0,0,0-.18.53,3,3,0,0,1-.1.32c-.07.16-.15.32-.23.49a6.25,6.25,0,0,0-.31.69.45.45,0,0,0,.26.58.44.44,0,0,0,.16,0,.45.45,0,0,0,.42-.29,4.57,4.57,0,0,1,.28-.6c.09-.18.18-.36.25-.54a2.44,2.44,0,0,0,.14-.44,1.89,1.89,0,0,1,.12-.36.46.46,0,0,0-.21-.61.45.45,0,0,0-.2,0Z" fill="#1a1a1a"/><path d="M13.25,4.89h-.1a.46.46,0,0,0-.34.54,22.64,22.64,0,0,1,.58,5.38,18,18,0,0,1-.66,4.74l0,.14v0a.45.45,0,0,0,.05.57.46.46,0,0,0,.33.13.47.47,0,0,0,.31-.12.81.81,0,0,0,.21-.46.15.15,0,0,1,0-.07,18.82,18.82,0,0,0,.69-5,23.9,23.9,0,0,0-.6-5.59.45.45,0,0,0-.44-.34Z" fill="#1a1a1a"/><path d="M10.35,11.43a.44.44,0,0,0-.45.39,17.13,17.13,0,0,1-1.28,5.06.45.45,0,0,0,.22.6.43.43,0,0,0,.19,0,.45.45,0,0,0,.41-.26,18.25,18.25,0,0,0,1.35-5.33.45.45,0,0,0-.39-.5Z" fill="#1a1a1a"/><path d="M8,15.61H8m-.49-.69a.46.46,0,0,0-.41.26l-.64,1.37a.45.45,0,0,0,.21.6.46.46,0,0,0,.19,0,.44.44,0,0,0,.41-.26l.64-1.37A.44.44,0,0,0,7.71,15a.49.49,0,0,0-.19-.05Z" fill="#1a1a1a"/><path d="M8.06,6.56H8a.46.46,0,0,0-.37.52,17.57,17.57,0,0,1-.07,6.52.45.45,0,0,0,.35.53H8a.44.44,0,0,0,.44-.35A18.12,18.12,0,0,0,8.5,6.93a.43.43,0,0,0-.44-.37Z" fill="#1a1a1a"/></g></svg>
\ No newline at end of file
+<svg id="图层_1" data-name="图层 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><defs><style>.cls-1{fill:#262626;}</style></defs><path class="cls-1" d="M2.79,13.45a2.53,2.53,0,0,1,.12-.36.46.46,0,0,0-.21-.61H2.5v0a.46.46,0,0,0-.4.25,2.19,2.19,0,0,0-.17.49,6.9,6.9,0,0,0,.71.72v0A2.25,2.25,0,0,0,2.79,13.45Z"/><path class="cls-1" d="M10.4,11.39l-.05,0a.44.44,0,0,0-.45.39A16.89,16.89,0,0,1,9,15.93a6.54,6.54,0,0,0,1-.19,18.07,18.07,0,0,0,.81-3.85A.44.44,0,0,0,10.4,11.39Z"/><path class="cls-1" d="M7.71,15A.41.41,0,0,0,7.52,15v0a.46.46,0,0,0-.41.26l-.33.72c.3,0,.61.07.92.08l.22-.46A.43.43,0,0,0,7.71,15Z"/><path class="cls-1" d="M6.53,7.29a3,3,0,0,1,.06-1.11c.13-.4.41-.87,1.49-.95H8.2a1.25,1.25,0,0,1,1.24.85A12,12,0,0,1,10,8.35a8.42,8.42,0,0,1,0,1.23v.57a.43.43,0,0,1,0,.16.44.44,0,0,0,.37.5h.07a.45.45,0,0,0,.45-.39,1.5,1.5,0,0,0,0-.3V9.58a10.33,10.33,0,0,0-.07-1.36,13.39,13.39,0,0,0-.56-2.43A2.15,2.15,0,0,0,8.2,4.33H8A2.31,2.31,0,0,0,5.73,5.91a3.46,3.46,0,0,0-.09,1.5,14.16,14.16,0,0,1-.85,7.91,8.36,8.36,0,0,0,.83.32A15,15,0,0,0,6.53,7.29Z"/><path class="cls-1" d="M12.43,3A6.14,6.14,0,0,0,8.05,1a6.41,6.41,0,0,0-1.23.12,5.81,5.81,0,0,0-4.6,6.76c.08.52.14,1,.21,1.57l.09.74a.44.44,0,0,0,.45.39H3a.44.44,0,0,0,.38-.49h0l-.09-.74c-.06-.53-.13-1.06-.21-1.6A4.92,4.92,0,0,1,7,2H7a5.56,5.56,0,0,1,1-.1,5.38,5.38,0,0,1,3.8,1.69.44.44,0,0,0,.31.13.42.42,0,0,0,.32-.13.45.45,0,0,0,0-.64Z"/><path class="cls-1" d="M4.81,7.79a3.43,3.43,0,0,1,.44-2.72,1,1,0,0,1,.25-.28.46.46,0,0,0,.2-.61.46.46,0,0,0-.4-.25.67.67,0,0,0-.2,0,1.64,1.64,0,0,0-.58.56,4.38,4.38,0,0,0-.6,3.38,13.56,13.56,0,0,1-.11,5,9.89,9.89,0,0,1-.5,1.6A7.11,7.11,0,0,0,4.1,15a10.26,10.26,0,0,0,.59-1.88A14.81,14.81,0,0,0,4.81,7.79Z"/><path class="cls-1" d="M12,5.56A3.93,3.93,0,0,0,8.15,2.72a5.51,5.51,0,0,0-1.51.22.45.45,0,0,0-.31.55h0a.43.43,0,0,0,.43.32h.12a4.46,4.46,0,0,1,1.25-.19,3.07,3.07,0,0,1,3,2.23,13.72,13.72,0,0,1,.57,4.41A19.83,19.83,0,0,1,11,15.41a8.06,8.06,0,0,0,1.06-.53,20.79,20.79,0,0,0,.53-4.65A14.73,14.73,0,0,0,12,5.56Z"/><path class="cls-1" d="M13.72,5.15a.45.45,0,0,0-.44-.34l0,.08h-.1a.46.46,0,0,0-.34.54,22.63,22.63,0,0,1,.58,5.38,18.5,18.5,0,0,1-.35,3.4,7.35,7.35,0,0,0,1.12-1.11,18.59,18.59,0,0,0,.16-2.36A23.88,23.88,0,0,0,13.72,5.15Z"/><path class="cls-1" d="M8.06,6.56H8a.46.46,0,0,0-.37.52,17.65,17.65,0,0,1-.07,6.52.45.45,0,0,0,.35.53H8a.44.44,0,0,0,.44-.35A17.94,17.94,0,0,0,8.5,6.93.43.43,0,0,0,8.06,6.56Z"/></svg>
\ No newline at end of file
diff -Nru ukui-biometric-auth-4.10.0.0/pam-biometric/biotest.c ukui-biometric-auth-4.20.0.0/pam-biometric/biotest.c
--- ukui-biometric-auth-4.10.0.0/pam-biometric/biotest.c	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/pam-biometric/biotest.c	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff -Nru ukui-biometric-auth-4.10.0.0/pam-biometric/data/org.freedesktop.plicykit.pkexec.bioctl-helper.policy.in ukui-biometric-auth-4.20.0.0/pam-biometric/data/org.freedesktop.plicykit.pkexec.bioctl-helper.policy.in
--- ukui-biometric-auth-4.10.0.0/pam-biometric/data/org.freedesktop.plicykit.pkexec.bioctl-helper.policy.in	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/pam-biometric/data/org.freedesktop.plicykit.pkexec.bioctl-helper.policy.in	2024-09-23 19:22:29.000000000 +0800
@@ -6,11 +6,17 @@
 
 	<action id="org.freedesktop.policykit.pkexec.bioctl">
 		<description>Run the biometric authentication control tool</description>
-		<description xml:lang="zh">运行生物识别认证控制工具</description>
+		<description xml:lang="zh_CN">运行生物识别认证控制工具</description>
 		<description xml:lang="bo">འཁོར་སྐྱོད་སྐྱེ་དངོས་ཀྱི་ངོས་འཛིན་ཁས་ལེན་ཚོད་འཛིན་ཡོ་བྱད།།</description>
+		<description xml:lang="mn">ᠠᠵᠢᠯᠯᠠᠭᠠᠨ ᠤ ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ ᠢ ᠢᠯᠭᠠᠨ ᠲᠠᠨᠢᠵᠤ ᠭᠡᠷᠡᠴᠢᠯᠡᠬᠦ ᠡᠵᠡᠮᠳᠡᠯ ᠦᠨ ᠪᠠᠭᠠᠵᠢ ᠶᠢ ᠢᠯᠭᠠᠨ ᠲᠠᠨᠢᠬᠤ ᠬᠡᠷᠡᠭᠲᠡᠶ ᠃</description>
+		<description xml:lang="zh_HK">運行生物識別認證控制工具</description>
+		<description xml:lang="uy">بىئولوگىيەلىك پەرقلەندۈرۈش ئىسپاتلاش كونترول قىلىش قورالى</description>
 		<message>Authentication is required to enable or disable biometric authentication</message>
-		<message xml:lang="zh">开启或关闭生物识别认证需要进行身份验证</message>
+		<message xml:lang="zh_CN">开启或关闭生物识别认证需要进行身份验证</message>
 		<message xml:lang="bo">སྒོ་རྒྱག་པའམ་ཡང་ན་སྒོ་རྒྱག་པའི་སྐྱེ་དངོས་ངོས་འཛིན་བདེན་དཔངར་སྤྲོད་བྱེད་པར་ཐོབ་ཐང་གི་ཚོད་ལྟསར་སྤྲོད་བྱ་དགོས།</message>
+		<message xml:lang="mn">ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ ᠢ ᠢᠯᠭᠠᠨ ᠲᠠᠨᠢᠬᠤ ᠭᠡᠷᠡᠴᠢᠯᠡᠭᠡ ᠶᠢ ᠨᠡᠭᠡᠭᠡᠬᠦ ᠪᠤᠶᠤ ᠬᠠᠭᠠᠬᠤ ᠳᠤ ᠪᠡᠶ᠎ᠡ ᠶᠢᠨ ᠭᠠᠷᠤᠯ ᠤᠨ ᠭᠡᠷᠡᠴᠢᠯᠡᠯ ᠬᠢᠬᠦ ᠴᠢᠬᠤᠯᠠ ᠲᠠᠶ ᠪᠠᠶᠢᠨ᠎ᠠ᠃</message>
+		<message xml:lang="zh_HK">開啟或關閉生物識別認證需要進行身份驗證</message>
+		<message xml:lang="uy">بىئولوگىيەلىك پەرقلەندۈرۈش ئىسپاتىنى ئېچىش ياكى تاقاش ئۈچۈن دەلىللەش كېرەك</message>
 		<icon_name>stock_person</icon_name>
 		<defaults>
 			<allow_any>no</allow_any>
diff -Nru ukui-biometric-auth-4.10.0.0/pam-biometric/data/org.freedesktop.plicykit.pkexec.biodrvctl.policy.in ukui-biometric-auth-4.20.0.0/pam-biometric/data/org.freedesktop.plicykit.pkexec.biodrvctl.policy.in
--- ukui-biometric-auth-4.10.0.0/pam-biometric/data/org.freedesktop.plicykit.pkexec.biodrvctl.policy.in	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/pam-biometric/data/org.freedesktop.plicykit.pkexec.biodrvctl.policy.in	2024-09-23 19:22:29.000000000 +0800
@@ -6,11 +6,17 @@
 
 	<action id="org.freedesktop.policykit.pkexec.biodrvctl">
 		<description>Run the biometric device driver control tool</description>
-		<description xml:lang="zh">运行生物识别设备驱动控制工具</description>
+		<description xml:lang="zh_CN">运行生物识别设备驱动控制工具</description>
 		<description xml:lang="bo">སྐྱ་དངོས་དབྱེ་འབྱེད་སྒྲག་ཆས་ཀྱི་ཁ་ལོ་བའི་ཚོད་འཛིན་ཡོ་བྱད་</description>
+		<description xml:lang="mn">ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ ᠢ ᠢᠯᠭᠠᠨ ᠲᠠᠨᠢᠬᠤ ᠲᠥᠬᠥᠭᠡᠷᠦᠮᠵᠢ ᠪᠡᠷ ᠬᠥᠳᠡᠯᠭᠡᠭᠦᠷ ᠪᠣᠯᠭᠠᠬᠤ ᠡᠵᠡᠮᠳᠡᠯ ᠦᠨ ᠪᠠᠭᠠᠵᠢ ᠶᠢ ᠠᠵᠢᠯᠯᠠᠭᠤᠯᠤᠨ᠎ᠠ ᠃</description>
+		<description xml:lang="zh_HK">運行生物識別設備驅動控制工具</description>
+		<description xml:lang="uy">بىئولوگىيەلىك پەرقلەندۈرۈش ئۈسكۈنىسىنى قوزغىتىش كونترول قىلىش ئەسۋابىنى يۈرگۈزۈش</description>
                 <message>Authentication is required to change the status of biometric device's driver</message>
-                <message xml:lang="zh">改变生物识别设备驱动状态需要进行身份验证</message>
-                <message xml:lang="bo">སྐྱ་དངོས་དབྱེ་འབྱེད་སྒྲག་ཆས་ཀྱི་ཁ་ལོ་བའི་གནས་ཚུལ་ལ་འགྱུར་ལྡོག་གཏོང་བར་བདེན་དཔང་ར་སྤྲད་བྱ་དགོས།</message>
+                <message xml:lang="zh_CN">改变生物识别设备驱动状态需要进行身份验证</message>
+		<message xml:lang="bo">སྐྱ་དངོས་དབྱེ་འབྱེད་སྒྲག་ཆས་ཀྱི་ཁ་ལོ་བའི་གནས་ཚུལ་ལ་འགྱུར་ལྡོག་གཏོང་བར་བདེན་དཔང་ར་སྤྲད་བྱ་དགོས།</message>
+		<message xml:lang="mn">ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ ᠢ ᠢᠯᠭᠠᠨ ᠲᠠᠨᠢᠬᠤ ᠲᠥᠬᠥᠭᠡᠷᠦᠮᠵᠢ ᠶᠢᠨ ᠬᠥᠳᠡᠯᠭᠡᠭᠦᠷ ᠪᠣᠯᠭᠠᠬᠤ ᠪᠠᠶᠢᠳᠠᠯ ᠢ ᠬᠤᠪᠢᠷᠠᠭᠤᠯᠬᠤ ᠳᠤ ᠪᠡᠶ᠎ᠡ ᠶᠢᠨ ᠭᠠᠷᠤᠯ ᠤᠨ ᠭᠡᠷᠡᠴᠢᠯᠡᠯ ᠬᠢᠬᠦ ᠴᠢᠬᠤᠯᠠ ᠲᠠᠶ ᠪᠠᠶᠢᠬᠤ ᠬᠡᠷᠡᠭᠲᠡᠶ᠃</message>
+		<message xml:lang="zh_HK">改變生物識別設備驅動狀態需要進行身份驗證</message>
+		<message xml:lang="uy">بىئولوگىيەلىك پەرقلەندۈرۈش ئۈسكۈنىسىنىڭ قوزغىتىش ھالىتىنى ئۆزگەرتىشتە دەلىللەش كېرەك</message>
 		<icon_name>stock_person</icon_name>
 		<defaults>
 			<allow_any>auth_admin</allow_any>
@@ -21,3 +27,4 @@
 	</action>
 
 </policyconfig>
+
diff -Nru ukui-biometric-auth-4.10.0.0/pam-biometric/data/org.freedesktop.plicykit.pkexec.biorestart.policy.in ukui-biometric-auth-4.20.0.0/pam-biometric/data/org.freedesktop.plicykit.pkexec.biorestart.policy.in
--- ukui-biometric-auth-4.10.0.0/pam-biometric/data/org.freedesktop.plicykit.pkexec.biorestart.policy.in	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/pam-biometric/data/org.freedesktop.plicykit.pkexec.biorestart.policy.in	2024-09-23 19:22:29.000000000 +0800
@@ -6,11 +6,17 @@
 
 	<action id="org.freedesktop.policykit.pkexec.biorestart">
 		<description>Restart Service</description>
-		<description xml:lang="zh">重启生物特征服务</description>
+		<description xml:lang="zh_CN">重启生物特征服务</description>
 		<description xml:lang="bo">བསྐྱར་དུ་ཞབས་འདེགས་ཞུ་བ</description>
+		<description xml:lang="mn">ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ ᠤᠨ ᠣᠨᠴᠠᠯᠢᠭ ᠤᠨ ᠦᠢᠯᠡᠴᠢᠯᠡᠭᠡ ᠶᠢ ᠳᠠᠬᠢᠨ ᠡᠭᠢᠯᠡᠭᠦᠯᠪᠡ᠃</description>
                 <message>Authentication is required to restart biometric service</message>
-                <message xml:lang="zh">重启生物特征服务需要身份验证</message>
-                <message xml:lang="bo">སྐྱ་དངོས་དབྱེ་འབྱེད་ཞབས་ཞུ་སླར་གསོ་བྱེད་པར་བདེན་དཔང་ར་སྤྲད་བྱ་དགོས།</message>
+		<description xml:lang="zh_HK">重啟生物特徵服務</description>
+		<description xml:lang="uy">بىئولوگىيەلىك ئالاھىدىلىك مۇلازىمىتىنى قايتىدىن قوزغىتىش</description>
+                <message xml:lang="zh_CN">重启生物特征服务需要身份验证</message>
+		<message xml:lang="bo">སྐྱ་དངོས་དབྱེ་འབྱེད་ཞབས་ཞུ་སླར་གསོ་བྱེད་པར་བདེན་དཔང་ར་སྤྲད་བྱ་དགོས།</message>
+		<message xml:lang="mn">ᠠᠮᠢᠳᠤ ᠪᠣᠳᠠᠰ ᠤᠨ ᠣᠨᠴᠠᠯᠢᠭ ᠰᠢᠨᠵᠢ ᠲᠡᠮᠳᠡᠭ ᠦᠨ ᠦᠢᠯᠡᠴᠢᠯᠡᠭᠡ ᠶᠢ ᠳᠠᠬᠢᠨ ᠰᠡᠩᠬᠡᠷᠡᠭᠦᠯᠬᠦ ᠳᠦ ᠪᠡᠶ᠎ᠡ ᠶᠢᠨ ᠭᠠᠷᠤᠯ ᠢ ᠰᠢᠯᠭᠠᠨ ᠭᠡᠷᠡᠴᠢᠯᠡᠬᠦ ᠴᠢᠬᠤᠯᠠ ᠲᠠᠶ ᠪᠠᠶᠢᠨ᠎ᠠ ᠃</message>
+        	<message xml:lang="uy">بىئولوگىيەلىك ئالاھىدىلىك مۇلازىمىتىنى قايتىدىن قوزغىتىش ئۈچۈن دەلىللەش كېرەك </message>
+        	<message xml:lang="zh_HK">重啟生物特徵服務需要身份驗證</message>
 		<icon_name>stock_person</icon_name>
 		<defaults>
 			<allow_any>auth_admin</allow_any>
@@ -21,3 +27,4 @@
 	</action>
 
 </policyconfig>
+
diff -Nru ukui-biometric-auth-4.10.0.0/pam-biometric/data/ukui-biometric.conf ukui-biometric-auth-4.20.0.0/pam-biometric/data/ukui-biometric.conf
--- ukui-biometric-auth-4.10.0.0/pam-biometric/data/ukui-biometric.conf	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/pam-biometric/data/ukui-biometric.conf	2024-09-23 19:22:29.000000000 +0800
@@ -8,6 +8,7 @@
 UseFirstDevice=true
 MaxFailedTimes=5
 HiddenSwitchButton=false
+FaceTimeoutTimes=1
 
 [Functions]
 EnableQRCode=true
diff -Nru ukui-biometric-auth-4.10.0.0/pam-biometric/logger.c ukui-biometric-auth-4.20.0.0/pam-biometric/logger.c
--- ukui-biometric-auth-4.10.0.0/pam-biometric/logger.c	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/pam-biometric/logger.c	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff -Nru ukui-biometric-auth-4.10.0.0/pam-biometric/pam_biometric.c ukui-biometric-auth-4.20.0.0/pam-biometric/pam_biometric.c
--- ukui-biometric-auth-4.10.0.0/pam-biometric/pam_biometric.c	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/pam-biometric/pam_biometric.c	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -463,6 +463,28 @@
             if (stdout_pidof)
                 g_free(stdout_pidof);
             g_ptr_array_free (args_pidof, TRUE);
+
+		//如果ukui-greeter进程不存在,进而判断ukui-screensaver-backend进程
+	    args_pidof = g_ptr_array_new ();
+            g_ptr_array_add(args_pidof, (gpointer)"/usr/bin/pidof");
+            g_ptr_array_add(args_pidof, (gpointer)"ukui-screensaver-backend");
+            g_ptr_array_add(args_pidof, NULL);
+
+	    if (!g_spawn_sync(NULL, (char**)args_pidof->pdata, NULL, G_SPAWN_STDERR_TO_DEV_NULL, NULL, NULL, &stdout_pidof, NULL, NULL, NULL)) {
+                if (stdout_pidof)
+                    g_free(stdout_pidof);
+                g_ptr_array_free (args_pidof, TRUE);
+	    }
+	    
+            if (stdout_pidof) {
+                if (strlen(stdout_pidof) > 0 && atoi(stdout_pidof) > 0) {
+                    g_strlcpy(buf, "ukui-screensaver-backend", len);
+                }
+                g_free(stdout_pidof);
+            }
+
+	    g_ptr_array_free (args_pidof, TRUE);
+
             return ;
         }
         if (stdout_pidof) {
@@ -668,7 +690,7 @@
         get_greeter_session(buf, sizeof(buf));
         pam_logger("current greeter: %s\n", buf);
 
-        if(strcmp(buf, "ukui-greeter") == 0 || strcmp(buf, "ukui-greeter-wayland") == 0)
+        if(strcmp(buf, "ukui-greeter") == 0 || strcmp(buf, "ukui-greeter-wayland") == 0 || strcmp(buf, "ukui-session") == 0 || strcmp(buf,"ukui-screensaver-backend"))
             return biometric_auth_embeded(pamh);
 //        else
 //            return biometric_auth_independent(pamh, "lightdm", 1);
diff -Nru ukui-biometric-auth-4.10.0.0/polkit-agent/CMakeLists.txt ukui-biometric-auth-4.20.0.0/polkit-agent/CMakeLists.txt
--- ukui-biometric-auth-4.10.0.0/polkit-agent/CMakeLists.txt	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/polkit-agent/CMakeLists.txt	2024-09-23 19:22:29.000000000 +0800
@@ -3,9 +3,12 @@
 
 pkg_check_modules(QGS REQUIRED gsettings-qt)
 pkg_check_modules(KDKINFO REQUIRED kysdk-sysinfo)
+pkg_check_modules(KYSDKWAYLANDHELPER_PKG REQUIRED kysdk-waylandhelper)
 
 find_package(PolkitQt5-1 REQUIRED 0.103.0)
 find_package(Qt5 COMPONENTS Core Widgets DBus X11Extras Xml Network Svg)
+find_package(KF5WindowSystem)
+find_package(X11 REQUIRED)
 set(CMAKE_AUTOMOC ON)
 set(CMAKE_AUTOUIC ON)
 set(CMAKE_AUTORCC ON)
@@ -58,10 +61,14 @@
     )
 
 add_executable(polkit-ukui-authentication-agent-1 ${polkit_SRCS})
+target_include_directories(polkit-ukui-authentication-agent-1 PRIVATE ${KYSDKWAYLANDHELPER_PKG_INCLUDE_DIRS})
+target_link_directories(polkit-ukui-authentication-agent-1 PRIVATE ${KYSDKWAYLANDHELPER_PKG_LIBRARY_DIRS})
 target_link_libraries(polkit-ukui-authentication-agent-1
     Qt5::Core Qt5::Widgets Qt5::DBus ${EXTRA_LIBS}
     ${POLKITQT-1_LIBRARIES}
+    ${KYSDKWAYLANDHELPER_PKG_LIBRARIES}
     BioAuthWidgets
+    KF5::WindowSystem
     -lrt
     -lukui-log4qt
     )
diff -Nru ukui-biometric-auth-4.10.0.0/polkit-agent/data/polkit-ukui-authentication-agent-1.desktop.in ukui-biometric-auth-4.20.0.0/polkit-agent/data/polkit-ukui-authentication-agent-1.desktop.in
--- ukui-biometric-auth-4.10.0.0/polkit-agent/data/polkit-ukui-authentication-agent-1.desktop.in	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/polkit-agent/data/polkit-ukui-authentication-agent-1.desktop.in	2024-09-23 19:22:29.000000000 +0800
@@ -36,6 +36,9 @@
 Name[x-test]=xxPolicyKit Authentication Agentxx
 Name[zh_CN]=PolicyKit 认证代理
 Name[zh_TW]=PolicyKit 認證代理程式
+Name[ug_CN]=PolicyKit ئىسپات ۋاكالەتچىلىكى
+Name[kk_KZ]=PolicyKit دالەل ۆاكىلى
+Name[ky_KG]=PolicyKit ىسپات ۋاكالەتچىلىكى
 Comment=PolicyKit Authentication Agent
 Comment[ca]=Agent d'autenticació del PolicyKit
 Comment[ca@valencia]=Agent d'autenticació del PolicyKit
diff -Nru ukui-biometric-auth-4.10.0.0/polkit-agent/i18n_ts/bo.ts ukui-biometric-auth-4.20.0.0/polkit-agent/i18n_ts/bo.ts
--- ukui-biometric-auth-4.10.0.0/polkit-agent/i18n_ts/bo.ts	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/polkit-agent/i18n_ts/bo.ts	2024-09-23 19:22:29.000000000 +0800
@@ -9,185 +9,205 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.ui" line="302"/>
-        <location filename="../src/mainwindow.cpp" line="882"/>
-        <location filename="../src/mainwindow.cpp" line="948"/>
+        <location filename="../src/mainwindow.ui" line="409"/>
+        <location filename="../src/mainwindow.cpp" line="1075"/>
+        <location filename="../src/mainwindow.cpp" line="1143"/>
         <source>Biometric</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.ui" line="373"/>
+        <location filename="../src/mainwindow.ui" line="480"/>
         <source>use password</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.ui" line="334"/>
-        <location filename="../src/mainwindow.cpp" line="884"/>
+        <location filename="../src/mainwindow.ui" line="441"/>
+        <location filename="../src/mainwindow.cpp" line="1077"/>
         <source>Cancel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.ui" line="353"/>
-        <location filename="../src/mainwindow.cpp" line="880"/>
+        <location filename="../src/mainwindow.ui" line="460"/>
+        <location filename="../src/mainwindow.cpp" line="1073"/>
         <source>Authenticate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="65"/>
+        <location filename="../src/mainwindow.cpp" line="66"/>
         <source>Authentication</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="164"/>
-        <location filename="../src/mainwindow.cpp" line="1176"/>
+        <location filename="../src/mainwindow.cpp" line="105"/>
+        <source>Insert the ukey into the USB port</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="107"/>
+        <source>Enter the ukey password</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="226"/>
+        <location filename="../src/mainwindow.cpp" line="1415"/>
+        <location filename="../src/mainwindow.cpp" line="1417"/>
         <source>Failed to verify %1, please enter password to unlock</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="168"/>
-        <location filename="../src/mainwindow.cpp" line="1178"/>
+        <location filename="../src/mainwindow.cpp" line="231"/>
+        <location filename="../src/mainwindow.cpp" line="233"/>
+        <location filename="../src/mainwindow.cpp" line="1419"/>
         <source>Unable to verify %1, please enter password to unlock</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="175"/>
+        <location filename="../src/mainwindow.cpp" line="242"/>
+        <location filename="../src/mainwindow.cpp" line="246"/>
         <source>Failed to verify %1, you still have %2 verification opportunities</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="261"/>
+        <location filename="../src/mainwindow.cpp" line="335"/>
         <source>Please enter your password or enroll your fingerprint </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="511"/>
+        <location filename="../src/mainwindow.cpp" line="665"/>
         <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="517"/>
+        <location filename="../src/mainwindow.cpp" line="671"/>
         <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="578"/>
+        <location filename="../src/mainwindow.cpp" line="731"/>
         <source>Password: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="580"/>
+        <location filename="../src/mainwindow.cpp" line="733"/>
         <source>_Password: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="582"/>
+        <location filename="../src/mainwindow.cpp" line="735"/>
         <source>_Password:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="623"/>
-        <location filename="../src/mainwindow.cpp" line="627"/>
-        <location filename="../src/mainwindow.cpp" line="631"/>
-        <location filename="../src/mainwindow.cpp" line="635"/>
+        <location filename="../src/mainwindow.cpp" line="779"/>
+        <location filename="../src/mainwindow.cpp" line="783"/>
+        <location filename="../src/mainwindow.cpp" line="787"/>
+        <location filename="../src/mainwindow.cpp" line="791"/>
         <source>Account locked,</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="623"/>
+        <location filename="../src/mainwindow.cpp" line="779"/>
         <source>days left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="627"/>
+        <location filename="../src/mainwindow.cpp" line="783"/>
         <source>hours left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="631"/>
+        <location filename="../src/mainwindow.cpp" line="787"/>
         <source>minutes left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="635"/>
+        <location filename="../src/mainwindow.cpp" line="791"/>
         <source>seconds left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="675"/>
-        <location filename="../src/mainwindow.cpp" line="676"/>
+        <location filename="../src/mainwindow.cpp" line="834"/>
+        <location filename="../src/mainwindow.cpp" line="835"/>
         <source>Password cannot be empty</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="886"/>
-        <location filename="../src/mainwindow.cpp" line="991"/>
+        <location filename="../src/mainwindow.cpp" line="880"/>
+        <location filename="../src/mainwindow.cpp" line="888"/>
+        <source>Input your password to authentication</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1079"/>
+        <location filename="../src/mainwindow.cpp" line="1183"/>
         <source>Use password</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="1026"/>
-        <location filename="../src/mainwindow.cpp" line="1093"/>
-        <location filename="../src/mainwindow.cpp" line="1094"/>
+        <location filename="../src/mainwindow.cpp" line="1219"/>
+        <location filename="../src/mainwindow.cpp" line="1292"/>
+        <location filename="../src/mainwindow.cpp" line="1293"/>
         <source>Please try again in %1 minutes.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="1036"/>
-        <location filename="../src/mainwindow.cpp" line="1103"/>
-        <location filename="../src/mainwindow.cpp" line="1104"/>
+        <location filename="../src/mainwindow.cpp" line="1230"/>
+        <location filename="../src/mainwindow.cpp" line="1302"/>
+        <location filename="../src/mainwindow.cpp" line="1303"/>
         <source>Please try again in %1 seconds.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="1045"/>
-        <location filename="../src/mainwindow.cpp" line="1046"/>
-        <location filename="../src/mainwindow.cpp" line="1112"/>
-        <location filename="../src/mainwindow.cpp" line="1113"/>
+        <location filename="../src/mainwindow.cpp" line="1240"/>
+        <location filename="../src/mainwindow.cpp" line="1241"/>
+        <location filename="../src/mainwindow.cpp" line="1311"/>
+        <location filename="../src/mainwindow.cpp" line="1312"/>
         <source>Account locked permanently.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="1193"/>
+        <location filename="../src/mainwindow.cpp" line="1434"/>
         <source>Verify face recognition or enter password to unlock</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="1198"/>
+        <location filename="../src/mainwindow.cpp" line="1439"/>
         <source>Press fingerprint or enter password to unlock</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="1203"/>
+        <location filename="../src/mainwindow.cpp" line="1444"/>
         <source>Verify voiceprint or enter password to unlock</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="1208"/>
+        <location filename="../src/mainwindow.cpp" line="1449"/>
         <source>Verify finger vein or enter password to unlock</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="1213"/>
+        <location filename="../src/mainwindow.cpp" line="1454"/>
         <source>Verify iris or enter password to unlock</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="1218"/>
+        <location filename="../src/mainwindow.cpp" line="1459"/>
         <source>Use the bound wechat scanning code or enter the password to unlock</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="576"/>
+        <location filename="../src/mainwindow.cpp" line="108"/>
+        <location filename="../src/mainwindow.cpp" line="729"/>
         <source>Input Password</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="187"/>
+        <location filename="../src/mainwindow.cpp" line="259"/>
         <source>Abnormal network</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="691"/>
+        <location filename="../src/mainwindow.cpp" line="850"/>
         <source>Authentication failed, please try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -200,12 +220,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/PolkitListener.cpp" line="257"/>
+        <location filename="../src/PolkitListener.cpp" line="265"/>
         <source>Authentication failure, please try again.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/PolkitListener.cpp" line="264"/>
+        <location filename="../src/PolkitListener.cpp" line="272"/>
         <source>Password input error!</source>
         <translation type="unfinished"></translation>
     </message>
diff -Nru ukui-biometric-auth-4.10.0.0/polkit-agent/i18n_ts/bo_CN.ts ukui-biometric-auth-4.20.0.0/polkit-agent/i18n_ts/bo_CN.ts
--- ukui-biometric-auth-4.10.0.0/polkit-agent/i18n_ts/bo_CN.ts	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/polkit-agent/i18n_ts/bo_CN.ts	2024-09-23 19:22:29.000000000 +0800
@@ -65,9 +65,9 @@
 <context>
     <name>MainWindow</name>
     <message>
-        <location filename="../src/mainwindow.cpp" line="65"/>
+        <location filename="../src/mainwindow.cpp" line="66"/>
         <source>Authentication</source>
-        <translation>བདེན་དཔང་ར་སྤྲོད་</translation>
+        <translation>དབང་བསྐུར།</translation>
     </message>
     <message>
         <source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
@@ -91,16 +91,16 @@
         <translation type="vanished">密码</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.ui" line="302"/>
-        <location filename="../src/mainwindow.cpp" line="882"/>
-        <location filename="../src/mainwindow.cpp" line="948"/>
+        <location filename="../src/mainwindow.ui" line="409"/>
+        <location filename="../src/mainwindow.cpp" line="1075"/>
+        <location filename="../src/mainwindow.cpp" line="1143"/>
         <source>Biometric</source>
-        <translation>སྐྱེ་དངོས་རིག་པ།</translation>
+        <translation>སྐྱེ་དངོས་དབྱེ་འབྱེད་བཀོལ་བ།</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.ui" line="373"/>
+        <location filename="../src/mainwindow.ui" line="480"/>
         <source>use password</source>
-        <translation>གསང་གྲངས་བེད་སྤྱོད་བྱ་དགོས</translation>
+        <translation>གསང་གྲངས་བེད་སྤྱོད་བྱ་དགོས།</translation>
     </message>
     <message>
         <source>DeviceType:</source>
@@ -147,22 +147,22 @@
         <translation type="vanished">Polkit.caller-pid:</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.ui" line="334"/>
-        <location filename="../src/mainwindow.cpp" line="884"/>
+        <location filename="../src/mainwindow.ui" line="441"/>
+        <location filename="../src/mainwindow.cpp" line="1077"/>
         <source>Cancel</source>
         <translation>ཕྱིར་འཐེན།</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.ui" line="353"/>
-        <location filename="../src/mainwindow.cpp" line="880"/>
+        <location filename="../src/mainwindow.ui" line="460"/>
+        <location filename="../src/mainwindow.cpp" line="1073"/>
         <source>Authenticate</source>
-        <translation>བདེན་དཔང་ར་སྤྲོད་བྱ་དགོས</translation>
+        <translation>དབང་བསྐུར་བ།</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="886"/>
-        <location filename="../src/mainwindow.cpp" line="991"/>
+        <location filename="../src/mainwindow.cpp" line="1079"/>
+        <location filename="../src/mainwindow.cpp" line="1183"/>
         <source>Use password</source>
-        <translation>གསང་གྲངས་བེད་སྤྱོད་བྱ་དགོས</translation>
+        <translation>གསང་གྲངས་བེད་སྤྱོད་བྱ་དགོས།</translation>
     </message>
     <message>
         <source>Auth</source>
@@ -185,30 +185,30 @@
         <translation type="vanished">认证中,请稍等...</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="1026"/>
-        <location filename="../src/mainwindow.cpp" line="1093"/>
-        <location filename="../src/mainwindow.cpp" line="1094"/>
+        <location filename="../src/mainwindow.cpp" line="1219"/>
+        <location filename="../src/mainwindow.cpp" line="1292"/>
+        <location filename="../src/mainwindow.cpp" line="1293"/>
         <source>Please try again in %1 minutes.</source>
-        <translation>ཁྱོད་ཀྱིས་ཡང་བསྐྱར་ཐེངས་གཅིག་ལ་ཚོད་ལྟ་ཞིག་བྱེད་རོགས།</translation>
+        <translation>%1ཡང་བསྐྱར་ཚོད་ལྟ་ཞིག་བྱེད་རོགས།</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="1036"/>
-        <location filename="../src/mainwindow.cpp" line="1103"/>
-        <location filename="../src/mainwindow.cpp" line="1104"/>
+        <location filename="../src/mainwindow.cpp" line="1230"/>
+        <location filename="../src/mainwindow.cpp" line="1302"/>
+        <location filename="../src/mainwindow.cpp" line="1303"/>
         <source>Please try again in %1 seconds.</source>
         <translation>ཁྱོད་ཀྱིས་དུས་ཚོད་སྐར་ཆ་གཅིག་གི་ནང་དུ་ཡང་བསྐྱར་ཚོད་ལྟ་ཞིག་བྱེད་རོགས།</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="1045"/>
-        <location filename="../src/mainwindow.cpp" line="1046"/>
-        <location filename="../src/mainwindow.cpp" line="1112"/>
-        <location filename="../src/mainwindow.cpp" line="1113"/>
+        <location filename="../src/mainwindow.cpp" line="1240"/>
+        <location filename="../src/mainwindow.cpp" line="1241"/>
+        <location filename="../src/mainwindow.cpp" line="1311"/>
+        <location filename="../src/mainwindow.cpp" line="1312"/>
         <source>Account locked permanently.</source>
         <translation>དུས་གཏན་དུ་ཟྭ་བརྒྱབ་པའི་རྩིས་ཐོ།</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="675"/>
-        <location filename="../src/mainwindow.cpp" line="676"/>
+        <location filename="../src/mainwindow.cpp" line="834"/>
+        <location filename="../src/mainwindow.cpp" line="835"/>
         <source>Password cannot be empty</source>
         <translation>གསང་གྲངས་སྟོང་པ་ཡིན་མི་སྲིད།</translation>
     </message>
@@ -221,7 +221,8 @@
         <translation type="vanished">无法验证%1,请输入密码.</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="175"/>
+        <location filename="../src/mainwindow.cpp" line="242"/>
+        <location filename="../src/mainwindow.cpp" line="246"/>
         <source>Failed to verify %1, you still have %2 verification opportunities</source>
         <translation>%1ལ་ཞིབ་བཤེར་བྱེད་མ་ཐུབ་ན། ཁྱེད་ཚོར་ད་དུང་%2ལ་ཞིབ་བཤེར་བྱེད་པའི་གོ་སྐབས་ཡོད།</translation>
     </message>
@@ -230,44 +231,44 @@
         <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="578"/>
+        <location filename="../src/mainwindow.cpp" line="731"/>
         <source>Password: </source>
         <translation>གསང་གྲངས་ནི། </translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="261"/>
+        <location filename="../src/mainwindow.cpp" line="335"/>
         <source>Please enter your password or enroll your fingerprint </source>
-        <translation>ཁྱེད་ཀྱི་གསང་གྲངས་ནང་འཇུག་བྱེད་པའམ་ཡང་ན་ཁྱེད་ཀྱི་མཛུབ་རིས </translation>
+        <translation>ཁྱེད་ཀྱི་གསང་གྲངས་ནང་འཇུག་བྱེད་པའམ་ཡང་ན་ཁྱེད་ཀྱི་མཛུབ་རིས་ནང་འཇུག་བྱེད་པ། </translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="187"/>
+        <location filename="../src/mainwindow.cpp" line="259"/>
         <source>Abnormal network</source>
-        <translation>རྒྱུན་ལྡན་མིན་པའི་དྲ་</translation>
+        <translation>རྒྱུན་ལྡན་མིན་པའི་དྲ་བ།</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="511"/>
+        <location filename="../src/mainwindow.cpp" line="665"/>
         <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
-        <translation>བྱ་སྤྱོད་འདི་ལ་དོ་དམ་པས་དབང་ཆ་སྤྲོད་དགོས། ཁྱེད་ཀྱི་གསང་གྲངས་ནང་དུ་བཅུག་ནས་གཤག་བཅོས་འདི་བྱེད་དུ་འཇུག་རོགས།</translation>
+        <translation>ཐེངས་འདིའི་བཀོལ་སྤྱོད་ལ་དོ་དམ་པའི་དབང་ཆ་ཐོབ་ན་ད་གཟོད་མུ་མཐུད་དུ་ལག་བསྟར་བྱེད་ཐུབ།གསང་གྲངས་ནང་འཇུག་བྱས་ནས་ཐེངས་འདིའི་བཀོལ་སྤྱོད་བྱེད་ཆོག</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="580"/>
+        <location filename="../src/mainwindow.cpp" line="733"/>
         <source>_Password: </source>
-        <translation>_Password་ནི། </translation>
+        <translation>གསང་གྲངས། </translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="582"/>
+        <location filename="../src/mainwindow.cpp" line="735"/>
         <source>_Password:</source>
-        <translation>_Password་ནི།</translation>
+        <translation>གསང་གྲངས།:</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="691"/>
+        <location filename="../src/mainwindow.cpp" line="850"/>
         <source>Authentication failed, please try again.</source>
-        <translation>བདེན་དཔང་ར་སྤྲོད་བྱེད་མ་ཐུབ་པས་ཁྱེད་ཀྱིས་ཡང་བསྐྱར་ཚོད་ལྟ་ཞིག་བྱེད་</translation>
+        <translation>བདེན་དཔང་ར་སྤྲོད་ལ་ཕམ་ཁ་བྱུང་བས་ཡང་བསྐྱར་ཚོད་ལྟ་བྱོས།</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="623"/>
+        <location filename="../src/mainwindow.cpp" line="779"/>
         <source>days left</source>
-        <translation>ཉིན་ཁ་ཤས་ལས་ལྷག་མེད</translation>
+        <translation>གནམ་རྒྱབ་ཟྭ་འབྱེད།</translation>
     </message>
     <message>
         <source>Biometric/code scan authentication failed too many times, please enter the password.</source>
@@ -278,14 +279,16 @@
         <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="164"/>
-        <location filename="../src/mainwindow.cpp" line="1176"/>
+        <location filename="../src/mainwindow.cpp" line="226"/>
+        <location filename="../src/mainwindow.cpp" line="1415"/>
+        <location filename="../src/mainwindow.cpp" line="1417"/>
         <source>Failed to verify %1, please enter password to unlock</source>
         <translation>%1ལ་ཞིབ་བཤེར་བྱེད་མ་ཐུབ་ན། གསང་གྲངས་ནང་འཇུག་བྱས་ནས་ཟྭ་རྒྱག་རོགས།</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="168"/>
-        <location filename="../src/mainwindow.cpp" line="1178"/>
+        <location filename="../src/mainwindow.cpp" line="231"/>
+        <location filename="../src/mainwindow.cpp" line="233"/>
+        <location filename="../src/mainwindow.cpp" line="1419"/>
         <source>Unable to verify %1, please enter password to unlock</source>
         <translation>%1ལ་ཞིབ་བཤེར་བྱེད་ཐབས་བྲལ་བ་དང་། གསང་གྲངས་ནང་འཇུག་བྱས་ནས་ཟྭ་རྒྱག་རོགས།</translation>
     </message>
@@ -294,79 +297,86 @@
         <translation type="vanished">网络异常</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="517"/>
+        <location filename="../src/mainwindow.cpp" line="671"/>
         <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
-        <translation>གོ་རིམ་ཞིག་གིས་དམིགས་བསལ་དབང་ཆ་དགོས་པའི་བྱ་སྤྱོད་ཅིག་སྤེལ་རྩིས་བྱེད་བཞིན་ཡོད། དེས་བྱ་སྤྱོད་སྤེལ་བའི་དབང་ཆ་སྤྲོད་དགོས།</translation>
+        <translation>གོ་རིམ་ཞིག་གིས་ཁྱད་དབང་དགོས་པའི་འགུལ་སྟངས་ཤིག་ལག་བསྟར་བྱེད་པར་ཚོད་ལྟ་བྱེད་བཞིན་ཡོད་པ་དང་།་འགུལ་སྟངས་འདི་ལག་བསྟར་བྱེད་པའི་དབང་ཆ་སྤྲོད་དགོས་པའི་རེ་བ་བཏོན།</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="576"/>
+        <location filename="../src/mainwindow.cpp" line="108"/>
+        <location filename="../src/mainwindow.cpp" line="729"/>
         <source>Input Password</source>
         <translation>ནང་འཇུག་གི་གསང་གྲངས།</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="104"/>
+        <location filename="../src/mainwindow.cpp" line="105"/>
         <source>Insert the ukey into the USB port</source>
         <translation>བདེ་འཇགས་ཀྱི་གསང་བའི་ལྡེ་མིག་དེ་USBཡི་སྣེ་འདྲེན་དུ་འཇུག་རོགས།</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="106"/>
+        <location filename="../src/mainwindow.cpp" line="107"/>
         <source>Enter the ukey password</source>
         <translation>གསང་བའི་ཨང་གྲངས་ནང་འཇུག་བྱེད་པ།</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="764"/>
+        <location filename="../src/mainwindow.cpp" line="783"/>
         <source>hours left</source>
         <translation>དུས་ཚོད་འགའ་ལས་ལྷག་མེད</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="631"/>
+        <location filename="../src/mainwindow.cpp" line="787"/>
         <source>minutes left</source>
-        <translation>སྐར་མ་འགའ་ལས་ལྷག་མེད</translation>
+        <translation>སྐར་མ་རྗེས་ནས་ཟྭ་ཕྱེ།</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="635"/>
+        <location filename="../src/mainwindow.cpp" line="791"/>
         <source>seconds left</source>
-        <translation>གཡོན་ཕྱོགས་ཀྱི་དུས་ཚོད་སྐར་ཆ</translation>
+        <translation>སྐར་ཆའི་རྗེས་ནས་ཟྭ་ཕྱེ་བ།</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="880"/>
+        <location filename="../src/mainwindow.cpp" line="888"/>
+        <source>Input your password to authentication</source>
+        <translation>གསང་བའི་ཨང་གྲངས་ནང་འཇུག་བྱེད་དབང་ཡོད།</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="1193"/>
+        <location filename="../src/mainwindow.cpp" line="1434"/>
         <source>Verify face recognition or enter password to unlock</source>
-        <translation>ངོ་གདོང་ངོས་འཛིན་ལ་ཞིབ་བཤེར་བྱེད་པའམ་ཡང་ན་གསང་གྲངས་ནང་</translation>
+        <translation>དཔང་མིའི་གདོང་ལ་ཞིབ་བཤེར་བྱེད་པའམ་ཡང་ན་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་པ།</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="1198"/>
+        <location filename="../src/mainwindow.cpp" line="1439"/>
         <source>Press fingerprint or enter password to unlock</source>
-        <translation>མཛུབ་རིས་མནན་པའམ་ཡང་ན་གསང་གྲངས་ནང་འཇུག་བྱས་ནས་</translation>
+        <translation>མཛུབ་རིས་མནན་པའམ་ཡང་ན་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་པ།</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="1203"/>
+        <location filename="../src/mainwindow.cpp" line="1444"/>
         <source>Verify voiceprint or enter password to unlock</source>
-        <translation>སྒྲ་པར་ཞིབ་བཤེར་བྱེད་པའམ་ཡང་ན་གསང་གྲངས་ནང་འཇུག་བྱས་ནས་ཟྭ་རྒྱག</translation>
+        <translation>སྒྲ་རིས་ར་སྤྲོད་བྱེད་པའམ་ཡང་ན་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་པ།</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="1208"/>
+        <location filename="../src/mainwindow.cpp" line="1449"/>
         <source>Verify finger vein or enter password to unlock</source>
-        <translation>མཛུབ་མོའི་ནང་དུ་ཞིབ་བཤེར་བྱེད་པའམ་ཡང་ན་གསང་གྲངས་ནང་འཇུག་བྱས་</translation>
+        <translation>ཚོད་ལྟས་ར་སྤྲོད་བྱེད་པ་ནི་སྡོད་རྩ་དང་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་པ་དེ་ཡིན།</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="1213"/>
+        <location filename="../src/mainwindow.cpp" line="1454"/>
         <source>Verify iris or enter password to unlock</source>
-        <translation>iris ཞིབ་བཤེར་བྱེད་པའམ་ཡང་ན་གསང་གྲངས་ནང་འཇུག་བྱས་ནས་ཟྭ་</translation>
+        <translation>འཇའ་སྐྱི་ར་སྤྲོད་བྱེད་པའམ་ཡང་ན་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་པ།</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="1218"/>
+        <location filename="../src/mainwindow.cpp" line="1459"/>
         <source>Use the bound wechat scanning code or enter the password to unlock</source>
-        <translation>འབྲེལ་མཐུད་ཀྱི་འཕྲིན་ཕྲན་ཞིབ་བཤེར་ཨང་གྲངས་སམ་ཡང་ན་གསང་གྲངས་ནང་འཇུག་བྱས་ནས་ཟྭ་རྒྱག་པ།</translation>
+        <translation>སྦྲེལ་ཡོད་པའི་སྐད་འཕྲིན་གྱི་ཨང་གྲངས་སམ་གསང་གྲངས་བསྣན་ནས་ཟྭ་འབྱེད་དགོས།</translation>
     </message>
     <message>
         <source>Use the bound wechat scanning code or enter the password to log in</source>
         <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="623"/>
-        <location filename="../src/mainwindow.cpp" line="627"/>
-        <location filename="../src/mainwindow.cpp" line="631"/>
-        <location filename="../src/mainwindow.cpp" line="635"/>
+        <location filename="../src/mainwindow.cpp" line="779"/>
+        <location filename="../src/mainwindow.cpp" line="783"/>
+        <location filename="../src/mainwindow.cpp" line="787"/>
+        <location filename="../src/mainwindow.cpp" line="791"/>
         <source>Account locked,</source>
         <translation>རྩིས་ཐོ་ཟྭ་བརྒྱབ་པ།</translation>
     </message>
@@ -380,17 +390,17 @@
     <message>
         <location filename="../src/PolkitListener.cpp" line="88"/>
         <source>Another client is already authenticating, please try again later.</source>
-        <translation>མངགས་བཅོལ་བྱེད་མཁན་གཞན་ཞིག་གིས་བདེན་དཔང་ར་སྤྲོད་བྱེད་བཞིན་ཡོད། ཅུང་ཙམ་འགོར་རྗེས་ཡང་བསྐྱར་ཚོད་ལྟ</translation>
+        <translation>མཁོ་མཁན་གཞན་པ་ཞིག་གིས་བདེན་དཔང་ར་སྤྲོད་བྱེད་བཞིན་ཡོད།ཅུང་ཙམ་འགོར་རྗེས་ཡང་བསྐྱར་ཚོད་ལྟ་བྱོས།</translation>
     </message>
     <message>
-        <location filename="../src/PolkitListener.cpp" line="257"/>
+        <location filename="../src/PolkitListener.cpp" line="265"/>
         <source>Authentication failure, please try again.</source>
-        <translation>བདེན་དཔང་ར་སྤྲོད་བྱེད་མ་ཐུབ་ན་ཁྱེད་ཀྱིས་ཡང་བསྐྱར་ཚོད་ལྟ་</translation>
+        <translation>བདེན་དཔང་ར་སྤྲོད་བྱེད་མ་ཐུབ་ན་ཁྱེད་ཀྱིས་ཡང་བསྐྱར་ཚོད་ལྟ་བྱེད།</translation>
     </message>
     <message>
-        <location filename="../src/PolkitListener.cpp" line="264"/>
+        <location filename="../src/PolkitListener.cpp" line="272"/>
         <source>Password input error!</source>
-        <translation>གསང་གྲངས་ནང་འཇུག་ནོར་འཁྲུལ་བྱུང་བ་རེད</translation>
+        <translation>གསང་གྲངས་ནང་འཇུག་ནོར་འཁྲུལ་བྱུང་བ་རེད།</translation>
     </message>
     <message>
         <source>Account locked %1 minutes due to %2 fail attempts</source>
diff -Nru ukui-biometric-auth-4.10.0.0/polkit-agent/i18n_ts/de.ts ukui-biometric-auth-4.20.0.0/polkit-agent/i18n_ts/de.ts
--- ukui-biometric-auth-4.10.0.0/polkit-agent/i18n_ts/de.ts	1970-01-01 08:00:00.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/polkit-agent/i18n_ts/de.ts	2024-09-23 19:22:29.000000000 +0800
@@ -0,0 +1,441 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="de">
+<context>
+    <name>BioAuthWidget</name>
+    <message>
+        <source>Retry</source>
+        <translation type="obsolete">重试</translation>
+    </message>
+    <message>
+        <source>%1 too many unsuccessful attempts,please enter password.</source>
+        <translation type="obsolete">%1验证失败达最大次数,请使用密码登录</translation>
+    </message>
+    <message>
+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
+        <translation type="obsolete">%1认证失败,还剩%2次尝试机会</translation>
+    </message>
+    <message>
+        <source>Please use wechat to scan the code</source>
+        <translation type="vanished">请使用微信扫码</translation>
+    </message>
+</context>
+<context>
+    <name>BioDevices</name>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="obsolete">指纹</translation>
+    </message>
+    <message>
+        <source>FingerVein</source>
+        <translation type="obsolete">指静脉</translation>
+    </message>
+    <message>
+        <source>Iris</source>
+        <translation type="obsolete">虹膜</translation>
+    </message>
+    <message>
+        <source>Face</source>
+        <translation type="obsolete">人脸</translation>
+    </message>
+    <message>
+        <source>VoicePrint</source>
+        <translation type="obsolete">声纹</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+    <message>
+        <source>QRCode</source>
+        <translation type="vanished">二维码</translation>
+    </message>
+</context>
+<context>
+    <name>LoginOptionsWidget</name>
+    <message>
+        <source>Login Options</source>
+        <translation type="vanished">登录选项</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+</context>
+<context>
+    <name>MainWindow</name>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="66"/>
+        <source>Authentication</source>
+        <translation>Authentifizierung</translation>
+    </message>
+    <message>
+        <source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
+        <translation type="vanished">指纹验证失败,您还有%1次尝试机会</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.ui" line="26"/>
+        <source>Form</source>
+        <translation></translation>
+    </message>
+    <message>
+        <source>More</source>
+        <translation type="obsolete">更多</translation>
+    </message>
+    <message>
+        <source>Restart</source>
+        <translation type="obsolete">重新开始</translation>
+    </message>
+    <message>
+        <source>Password</source>
+        <translation type="vanished">密码</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.ui" line="409"/>
+        <location filename="../src/mainwindow.cpp" line="1075"/>
+        <location filename="../src/mainwindow.cpp" line="1143"/>
+        <source>Biometric</source>
+        <translation>Biometrisch</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.ui" line="480"/>
+        <source>use password</source>
+        <translation>Passwort verwenden</translation>
+    </message>
+    <message>
+        <source>DeviceType:</source>
+        <translation type="obsolete">设备类型:</translation>
+    </message>
+    <message>
+        <source>Back</source>
+        <translation type="obsolete">返回</translation>
+    </message>
+    <message>
+        <source>Details</source>
+        <translation type="vanished">详细</translation>
+    </message>
+    <message>
+        <source>Action Id:</source>
+        <translation type="obsolete">动作:</translation>
+    </message>
+    <message>
+        <source>Description:</source>
+        <translation type="vanished">描述:</translation>
+    </message>
+    <message>
+        <source>Polkit.subject-pid:</source>
+        <translation type="vanished">Polkit.subject-pid:</translation>
+    </message>
+    <message>
+        <source>Retry</source>
+        <translation type="obsolete">重试</translation>
+    </message>
+    <message>
+        <source>Device types:</source>
+        <translation type="obsolete">设备类型:</translation>
+    </message>
+    <message>
+        <source>Vendor:</source>
+        <translation type="vanished">发行商:</translation>
+    </message>
+    <message>
+        <source>Action:</source>
+        <translation type="vanished">动作:</translation>
+    </message>
+    <message>
+        <source>Polkit.caller-pid:</source>
+        <translation type="vanished">Polkit.caller-pid:</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.ui" line="441"/>
+        <location filename="../src/mainwindow.cpp" line="1077"/>
+        <source>Cancel</source>
+        <translation>Abbrechen</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.ui" line="460"/>
+        <location filename="../src/mainwindow.cpp" line="1073"/>
+        <source>Authenticate</source>
+        <translation>Beglaubigen</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1079"/>
+        <location filename="../src/mainwindow.cpp" line="1183"/>
+        <source>Use password</source>
+        <translation>Passwort verwenden</translation>
+    </message>
+    <message>
+        <source>Auth</source>
+        <translation type="obsolete">授权</translation>
+    </message>
+    <message>
+        <source>Too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">指纹验证失败达最大次数,请使用密码解锁</translation>
+    </message>
+    <message>
+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
+        <translation type="vanished">%1认证失败,还剩%2次尝试机会</translation>
+    </message>
+    <message>
+        <source>%1 too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">%1验证失败达最大次数,请使用密码登录</translation>
+    </message>
+    <message>
+        <source>in authentication, please wait...</source>
+        <translation type="vanished">认证中,请稍等...</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1219"/>
+        <location filename="../src/mainwindow.cpp" line="1292"/>
+        <location filename="../src/mainwindow.cpp" line="1293"/>
+        <source>Please try again in %1 minutes.</source>
+        <translation>Versuchen Sie es in %1 Minuten erneut.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1230"/>
+        <location filename="../src/mainwindow.cpp" line="1302"/>
+        <location filename="../src/mainwindow.cpp" line="1303"/>
+        <source>Please try again in %1 seconds.</source>
+        <translation>Bitte versuchen Sie es in %1 Sekunden erneut.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1240"/>
+        <location filename="../src/mainwindow.cpp" line="1241"/>
+        <location filename="../src/mainwindow.cpp" line="1311"/>
+        <location filename="../src/mainwindow.cpp" line="1312"/>
+        <source>Account locked permanently.</source>
+        <translation>Das Konto wurde dauerhaft gesperrt.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="834"/>
+        <location filename="../src/mainwindow.cpp" line="835"/>
+        <source>Password cannot be empty</source>
+        <translation>Das Kennwort darf nicht leer sein.</translation>
+    </message>
+    <message>
+        <source>Failed to verify %1, please enter password.</source>
+        <translation type="vanished">验证%1失败,请输入密码.</translation>
+    </message>
+    <message>
+        <source>Unable to verify %1, please enter password.</source>
+        <translation type="vanished">无法验证%1,请输入密码.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="242"/>
+        <location filename="../src/mainwindow.cpp" line="246"/>
+        <source>Failed to verify %1, you still have %2 verification opportunities</source>
+        <translation>%1 konnte nicht verifiziert werden, Sie haben immer noch %2 Überprüfungsmöglichkeiten</translation>
+    </message>
+    <message>
+        <source>An application is attempting to perform an action that requires privileges. Authentication is required to perform this action.</source>
+        <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="731"/>
+        <source>Password: </source>
+        <translation>Passwort: </translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="335"/>
+        <source>Please enter your password or enroll your fingerprint </source>
+        <translation>Bitte geben Sie Ihr Passwort ein oder registrieren Sie Ihren Fingerabdruck </translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="259"/>
+        <source>Abnormal network</source>
+        <translation>Ungewöhnliches Netzwerk</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="665"/>
+        <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
+        <translation>Für diesen Vorgang ist die Autorisierung des Administrators erforderlich. Bitte geben Sie Ihr Passwort ein, um diesen Vorgang zuzulassen.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="733"/>
+        <source>_Password: </source>
+        <translation>_Passwort: </translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="735"/>
+        <source>_Password:</source>
+        <translation>_Passwort:</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="850"/>
+        <source>Authentication failed, please try again.</source>
+        <translation>Authentifizierung fehlgeschlagen, bitte versuchen Sie es erneut.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="779"/>
+        <source>days left</source>
+        <translation>Verbleibende Tage</translation>
+    </message>
+    <message>
+        <source>Biometric/code scan authentication failed too many times, please enter the password.</source>
+        <translation type="vanished">生物/扫码验证失败达最大次数,请使用密码解锁.</translation>
+    </message>
+    <message>
+        <source>Bioauth/code scan authentication failed, you still have %1 verification opportunities</source>
+        <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="226"/>
+        <location filename="../src/mainwindow.cpp" line="1415"/>
+        <location filename="../src/mainwindow.cpp" line="1417"/>
+        <source>Failed to verify %1, please enter password to unlock</source>
+        <translation>%1 konnte nicht verifiziert werden, bitte geben Sie das Kennwort zum Entsperren ein</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="231"/>
+        <location filename="../src/mainwindow.cpp" line="233"/>
+        <location filename="../src/mainwindow.cpp" line="1419"/>
+        <source>Unable to verify %1, please enter password to unlock</source>
+        <translation>%1 kann nicht verifiziert werden, bitte geben Sie das Kennwort zum Entsperren ein</translation>
+    </message>
+    <message>
+        <source>NET Exception</source>
+        <translation type="vanished">网络异常</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="671"/>
+        <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
+        <translation>Ein Programm versucht, eine Aktion auszuführen, für die Berechtigungen erforderlich sind. Zum Ausführen der Aktion ist eine Autorisierung erforderlich.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="108"/>
+        <location filename="../src/mainwindow.cpp" line="729"/>
+        <source>Input Password</source>
+        <translation>Passwort eingeben</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="105"/>
+        <source>Insert the ukey into the USB port</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="107"/>
+        <source>Enter the ukey password</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="783"/>
+        <source>hours left</source>
+        <translation>Verbleibende Stunden</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="787"/>
+        <source>minutes left</source>
+        <translation>Noch Minuten</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="791"/>
+        <source>seconds left</source>
+        <translation>Verbleibende Sekunden</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="880"/>
+        <location filename="../src/mainwindow.cpp" line="888"/>
+        <source>Input your password to authentication</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1434"/>
+        <source>Verify face recognition or enter password to unlock</source>
+        <translation>Überprüfen Sie die Gesichtserkennung oder geben Sie das Passwort ein, um zu entsperren</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1439"/>
+        <source>Press fingerprint or enter password to unlock</source>
+        <translation>Drücken Sie den Fingerabdruck oder geben Sie das Passwort ein, um zu entsperren</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1444"/>
+        <source>Verify voiceprint or enter password to unlock</source>
+        <translation>Überprüfen Sie den Stimmabdruck oder geben Sie das Passwort ein, um zu entsperren</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1449"/>
+        <source>Verify finger vein or enter password to unlock</source>
+        <translation>Überprüfen Sie die Fingervene oder geben Sie das Passwort ein, um zu entsperren</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1454"/>
+        <source>Verify iris or enter password to unlock</source>
+        <translation>Überprüfen Sie die Iris oder geben Sie das Passwort ein, um zu entsperren</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1459"/>
+        <source>Use the bound wechat scanning code or enter the password to unlock</source>
+        <translation>Verwenden Sie den gebundenen Wechat-Scan-Code oder geben Sie das Passwort zum Entsperren ein</translation>
+    </message>
+    <message>
+        <source>Use the bound wechat scanning code or enter the password to log in</source>
+        <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="779"/>
+        <location filename="../src/mainwindow.cpp" line="783"/>
+        <location filename="../src/mainwindow.cpp" line="787"/>
+        <location filename="../src/mainwindow.cpp" line="791"/>
+        <source>Account locked,</source>
+        <translation>Konto gesperrt,</translation>
+    </message>
+    <message>
+        <source>Authentication failed, please try again</source>
+        <translation type="obsolete">认证失败,请重试</translation>
+    </message>
+</context>
+<context>
+    <name>PolkitListener</name>
+    <message>
+        <location filename="../src/PolkitListener.cpp" line="88"/>
+        <source>Another client is already authenticating, please try again later.</source>
+        <translation>Ein anderer Client authentifiziert sich bereits, bitte versuchen Sie es später noch einmal.</translation>
+    </message>
+    <message>
+        <location filename="../src/PolkitListener.cpp" line="265"/>
+        <source>Authentication failure, please try again.</source>
+        <translation>Authentifizierungsfehler, bitte versuchen Sie es erneut.</translation>
+    </message>
+    <message>
+        <location filename="../src/PolkitListener.cpp" line="272"/>
+        <source>Password input error!</source>
+        <translation>Fehler bei der Passworteingabe!</translation>
+    </message>
+    <message>
+        <source>Account locked %1 minutes due to %2 fail attempts</source>
+        <translation type="vanished">账户锁定%1分钟由于%2次错误尝试</translation>
+    </message>
+    <message>
+        <source>Authentication failure,there are still %1 remaining opportunities</source>
+        <translation type="vanished">认证失败,还剩余%1次尝试机会</translation>
+    </message>
+</context>
+<context>
+    <name>QObject</name>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="obsolete">指纹</translation>
+    </message>
+    <message>
+        <source>FingerVein</source>
+        <translation type="obsolete">指静脉</translation>
+    </message>
+    <message>
+        <source>Iris</source>
+        <translation type="obsolete">虹膜</translation>
+    </message>
+    <message>
+        <source>Face</source>
+        <translation type="obsolete">人脸</translation>
+    </message>
+    <message>
+        <source>VoicePrint</source>
+        <translation type="obsolete">声纹</translation>
+    </message>
+    <message>
+        <source>Cancel</source>
+        <translation type="obsolete">取消</translation>
+    </message>
+</context>
+</TS>
diff -Nru ukui-biometric-auth-4.10.0.0/polkit-agent/i18n_ts/es.ts ukui-biometric-auth-4.20.0.0/polkit-agent/i18n_ts/es.ts
--- ukui-biometric-auth-4.10.0.0/polkit-agent/i18n_ts/es.ts	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/polkit-agent/i18n_ts/es.ts	2024-09-23 19:22:29.000000000 +0800
@@ -4,208 +4,438 @@
 <context>
     <name>BioAuthWidget</name>
     <message>
-        <source>Form</source>
-        <translation type="obsolete">Formar</translation>
+        <source>Retry</source>
+        <translation type="obsolete">重试</translation>
+    </message>
+    <message>
+        <source>%1 too many unsuccessful attempts,please enter password.</source>
+        <translation type="obsolete">%1验证失败达最大次数,请使用密码登录</translation>
+    </message>
+    <message>
+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
+        <translation type="obsolete">%1认证失败,还剩%2次尝试机会</translation>
+    </message>
+    <message>
+        <source>Please use wechat to scan the code</source>
+        <translation type="vanished">请使用微信扫码</translation>
     </message>
 </context>
 <context>
-    <name>BioDevicesWidget</name>
+    <name>BioDevices</name>
     <message>
-        <source>Form</source>
-        <translation type="obsolete">Formar</translation>
+        <source>FingerPrint</source>
+        <translation type="obsolete">指纹</translation>
+    </message>
+    <message>
+        <source>FingerVein</source>
+        <translation type="obsolete">指静脉</translation>
+    </message>
+    <message>
+        <source>Iris</source>
+        <translation type="obsolete">虹膜</translation>
+    </message>
+    <message>
+        <source>Face</source>
+        <translation type="obsolete">人脸</translation>
+    </message>
+    <message>
+        <source>VoicePrint</source>
+        <translation type="obsolete">声纹</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+    <message>
+        <source>QRCode</source>
+        <translation type="vanished">二维码</translation>
+    </message>
+</context>
+<context>
+    <name>LoginOptionsWidget</name>
+    <message>
+        <source>Login Options</source>
+        <translation type="vanished">登录选项</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
     </message>
 </context>
 <context>
     <name>MainWindow</name>
     <message>
+        <location filename="../src/mainwindow.cpp" line="66"/>
+        <source>Authentication</source>
+        <translation>Autenticación</translation>
+    </message>
+    <message>
+        <source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
+        <translation type="vanished">指纹验证失败,您还有%1次尝试机会</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.ui" line="26"/>
         <source>Form</source>
-        <translation>Formar</translation>
+        <translation>Forma</translation>
+    </message>
+    <message>
+        <source>More</source>
+        <translation type="obsolete">更多</translation>
     </message>
     <message>
+        <source>Restart</source>
+        <translation type="obsolete">重新开始</translation>
+    </message>
+    <message>
+        <source>Password</source>
+        <translation type="vanished">密码</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.ui" line="409"/>
+        <location filename="../src/mainwindow.cpp" line="1075"/>
+        <location filename="../src/mainwindow.cpp" line="1143"/>
         <source>Biometric</source>
-        <translation>Biometrico</translation>
+        <translation>Biométrico</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.ui" line="480"/>
+        <source>use password</source>
+        <translation>Usar contraseña</translation>
+    </message>
+    <message>
+        <source>DeviceType:</source>
+        <translation type="obsolete">设备类型:</translation>
+    </message>
+    <message>
+        <source>Back</source>
+        <translation type="obsolete">返回</translation>
     </message>
     <message>
         <source>Details</source>
-        <translation type="vanished">Detalles</translation>
+        <translation type="vanished">详细</translation>
+    </message>
+    <message>
+        <source>Action Id:</source>
+        <translation type="obsolete">动作:</translation>
+    </message>
+    <message>
+        <source>Description:</source>
+        <translation type="vanished">描述:</translation>
     </message>
     <message>
         <source>Polkit.subject-pid:</source>
-        <translation type="vanished">Polkit.subject-pid:</translation>
+        <translation type="vanished">Polkit.subject-pid:</translation>
     </message>
     <message>
-        <source>Vendor:</source>
-        <translation type="vanished">Vendedor:</translation>
+        <source>Retry</source>
+        <translation type="obsolete">重试</translation>
     </message>
     <message>
-        <source>Description:</source>
-        <translation type="vanished">Descripción:</translation>
+        <source>Device types:</source>
+        <translation type="obsolete">设备类型:</translation>
     </message>
     <message>
-        <source>Polkit.caller-pid:</source>
-        <translation type="vanished">Polkit.caller-pid:</translation>
+        <source>Vendor:</source>
+        <translation type="vanished">发行商:</translation>
     </message>
     <message>
         <source>Action:</source>
-        <translation type="vanished">Acción:</translation>
+        <translation type="vanished">动作:</translation>
+    </message>
+    <message>
+        <source>Polkit.caller-pid:</source>
+        <translation type="vanished">Polkit.caller-pid:</translation>
     </message>
     <message>
+        <location filename="../src/mainwindow.ui" line="441"/>
+        <location filename="../src/mainwindow.cpp" line="1077"/>
         <source>Cancel</source>
         <translation>Cancelar</translation>
     </message>
     <message>
+        <location filename="../src/mainwindow.ui" line="460"/>
+        <location filename="../src/mainwindow.cpp" line="1073"/>
         <source>Authenticate</source>
-        <translation>Autenticar</translation>
+        <translation>Autentificar</translation>
     </message>
     <message>
-        <source>Authentication</source>
-        <translation>Autenticación</translation>
+        <location filename="../src/mainwindow.cpp" line="1079"/>
+        <location filename="../src/mainwindow.cpp" line="1183"/>
+        <source>Use password</source>
+        <translation>Usar contraseña</translation>
+    </message>
+    <message>
+        <source>Auth</source>
+        <translation type="obsolete">授权</translation>
+    </message>
+    <message>
+        <source>Too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">指纹验证失败达最大次数,请使用密码解锁</translation>
+    </message>
+    <message>
+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
+        <translation type="vanished">%1认证失败,还剩%2次尝试机会</translation>
+    </message>
+    <message>
+        <source>%1 too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">%1验证失败达最大次数,请使用密码登录</translation>
     </message>
     <message>
         <source>in authentication, please wait...</source>
-        <translation type="vanished">En autenticación, por favor espere ...</translation>
+        <translation type="vanished">认证中,请稍等...</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1219"/>
+        <location filename="../src/mainwindow.cpp" line="1292"/>
+        <location filename="../src/mainwindow.cpp" line="1293"/>
+        <source>Please try again in %1 minutes.</source>
+        <translation>Inténtelo de nuevo en %1 minutos.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1230"/>
+        <location filename="../src/mainwindow.cpp" line="1302"/>
+        <location filename="../src/mainwindow.cpp" line="1303"/>
+        <source>Please try again in %1 seconds.</source>
+        <translation>Inténtelo de nuevo en %1 segundos.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1240"/>
+        <location filename="../src/mainwindow.cpp" line="1241"/>
+        <location filename="../src/mainwindow.cpp" line="1311"/>
+        <location filename="../src/mainwindow.cpp" line="1312"/>
+        <source>Account locked permanently.</source>
+        <translation>Cuenta bloqueada permanentemente.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="834"/>
+        <location filename="../src/mainwindow.cpp" line="835"/>
+        <source>Password cannot be empty</source>
+        <translation>La contraseña no puede estar vacía</translation>
+    </message>
+    <message>
+        <source>Failed to verify %1, please enter password.</source>
+        <translation type="vanished">验证%1失败,请输入密码.</translation>
+    </message>
+    <message>
+        <source>Unable to verify %1, please enter password.</source>
+        <translation type="vanished">无法验证%1,请输入密码.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="242"/>
+        <location filename="../src/mainwindow.cpp" line="246"/>
+        <source>Failed to verify %1, you still have %2 verification opportunities</source>
+        <translation>No se pudo verificar %1, todavía tiene %2 oportunidades de verificación</translation>
     </message>
     <message>
         <source>An application is attempting to perform an action that requires privileges. Authentication is required to perform this action.</source>
-        <translation type="vanished">Una aplicación está intentando realizar una acción que requiere privilegios. Se requiere autenticación para realizar esta acción.</translation>
+        <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
     </message>
     <message>
+        <location filename="../src/mainwindow.cpp" line="731"/>
         <source>Password: </source>
         <translation>Contraseña: </translation>
     </message>
     <message>
-        <source>Authentication failed, please try again.</source>
-        <translation>Autenticación fallida. Por favor intente de nuevo.</translation>
+        <location filename="../src/mainwindow.cpp" line="335"/>
+        <source>Please enter your password or enroll your fingerprint </source>
+        <translation>Ingrese su contraseña o registre su huella dactilar </translation>
     </message>
     <message>
-        <source>Please enter your password or enroll your fingerprint </source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="259"/>
+        <source>Abnormal network</source>
+        <translation>Red anormal</translation>
     </message>
     <message>
-        <source>use password</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="665"/>
+        <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
+        <translation>Esta operación requiere la autorización del administrador. Introduzca su contraseña para permitir esta operación.</translation>
     </message>
     <message>
-        <source>Account locked,</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="733"/>
+        <source>_Password: </source>
+        <translation>_Contraseña: </translation>
     </message>
     <message>
-        <source>days left</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="735"/>
+        <source>_Password:</source>
+        <translation>_Contraseña:</translation>
     </message>
     <message>
-        <source>hours left</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="850"/>
+        <source>Authentication failed, please try again.</source>
+        <translation>Error de autenticación, inténtelo de nuevo.</translation>
     </message>
     <message>
-        <source>minutes left</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="779"/>
+        <source>days left</source>
+        <translation>Días restantes</translation>
     </message>
     <message>
-        <source>seconds left</source>
-        <translation type="unfinished"></translation>
+        <source>Biometric/code scan authentication failed too many times, please enter the password.</source>
+        <translation type="vanished">生物/扫码验证失败达最大次数,请使用密码解锁.</translation>
     </message>
     <message>
-        <source>Password cannot be empty</source>
-        <translation type="unfinished"></translation>
+        <source>Bioauth/code scan authentication failed, you still have %1 verification opportunities</source>
+        <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
     </message>
     <message>
-        <source>Use password</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="226"/>
+        <location filename="../src/mainwindow.cpp" line="1415"/>
+        <location filename="../src/mainwindow.cpp" line="1417"/>
+        <source>Failed to verify %1, please enter password to unlock</source>
+        <translation>No se pudo verificar %1, ingrese la contraseña para desbloquear</translation>
     </message>
     <message>
-        <source>Please try again in %1 minutes.</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="231"/>
+        <location filename="../src/mainwindow.cpp" line="233"/>
+        <location filename="../src/mainwindow.cpp" line="1419"/>
+        <source>Unable to verify %1, please enter password to unlock</source>
+        <translation>No se puede verificar %1, ingrese la contraseña para desbloquear</translation>
     </message>
     <message>
-        <source>Please try again in %1 seconds.</source>
-        <translation type="unfinished"></translation>
+        <source>NET Exception</source>
+        <translation type="vanished">网络异常</translation>
     </message>
     <message>
-        <source>Account locked permanently.</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="671"/>
+        <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
+        <translation>Un programa está intentando realizar una acción que requiere privilegios. Requiere autorización para realizar la acción.</translation>
     </message>
     <message>
-        <source>Verify face recognition or enter password to unlock</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="108"/>
+        <location filename="../src/mainwindow.cpp" line="729"/>
+        <source>Input Password</source>
+        <translation>Contraseña de entrada</translation>
     </message>
     <message>
-        <source>Press fingerprint or enter password to unlock</source>
+        <location filename="../src/mainwindow.cpp" line="105"/>
+        <source>Insert the ukey into the USB port</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Verify voiceprint or enter password to unlock</source>
+        <location filename="../src/mainwindow.cpp" line="107"/>
+        <source>Enter the ukey password</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Verify finger vein or enter password to unlock</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="783"/>
+        <source>hours left</source>
+        <translation>horas restantes</translation>
     </message>
     <message>
-        <source>Verify iris or enter password to unlock</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="787"/>
+        <source>minutes left</source>
+        <translation>Quedan minutos</translation>
     </message>
     <message>
-        <source>Failed to verify %1, you still have %2 verification opportunities</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="791"/>
+        <source>seconds left</source>
+        <translation>segundos restantes</translation>
     </message>
     <message>
-        <source>Input Password</source>
+        <location filename="../src/mainwindow.cpp" line="880"/>
+        <location filename="../src/mainwindow.cpp" line="888"/>
+        <source>Input your password to authentication</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Use the bound wechat scanning code or enter the password to unlock</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="1434"/>
+        <source>Verify face recognition or enter password to unlock</source>
+        <translation>Verifique el reconocimiento facial o ingrese la contraseña para desbloquear</translation>
     </message>
     <message>
-        <source>Failed to verify %1, please enter password to unlock</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="1439"/>
+        <source>Press fingerprint or enter password to unlock</source>
+        <translation>Presione la huella dactilar o ingrese la contraseña para desbloquear</translation>
     </message>
     <message>
-        <source>Unable to verify %1, please enter password to unlock</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="1444"/>
+        <source>Verify voiceprint or enter password to unlock</source>
+        <translation>Verifica la huella de voz o ingresa la contraseña para desbloquear</translation>
     </message>
     <message>
-        <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="1449"/>
+        <source>Verify finger vein or enter password to unlock</source>
+        <translation>Verifique la vena del dedo o ingrese la contraseña para desbloquear</translation>
     </message>
     <message>
-        <source>_Password:</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="1454"/>
+        <source>Verify iris or enter password to unlock</source>
+        <translation>Verifique el iris o ingrese la contraseña para desbloquear</translation>
     </message>
     <message>
-        <source>_Password: </source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="1459"/>
+        <source>Use the bound wechat scanning code or enter the password to unlock</source>
+        <translation>Use el código de escaneo de wechat vinculado o ingrese la contraseña para desbloquear</translation>
     </message>
     <message>
-        <source>Abnormal network</source>
-        <translation type="unfinished"></translation>
+        <source>Use the bound wechat scanning code or enter the password to log in</source>
+        <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
     </message>
     <message>
-        <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="779"/>
+        <location filename="../src/mainwindow.cpp" line="783"/>
+        <location filename="../src/mainwindow.cpp" line="787"/>
+        <location filename="../src/mainwindow.cpp" line="791"/>
+        <source>Account locked,</source>
+        <translation>Cuenta bloqueada,</translation>
+    </message>
+    <message>
+        <source>Authentication failed, please try again</source>
+        <translation type="obsolete">认证失败,请重试</translation>
     </message>
 </context>
 <context>
     <name>PolkitListener</name>
     <message>
+        <location filename="../src/PolkitListener.cpp" line="88"/>
         <source>Another client is already authenticating, please try again later.</source>
-        <translation>Otro cliente ya se está autenticando, inténtalo de nuevo más tarde.</translation>
+        <translation>Otro cliente ya se está autenticando, inténtelo de nuevo más tarde.</translation>
     </message>
     <message>
+        <location filename="../src/PolkitListener.cpp" line="265"/>
         <source>Authentication failure, please try again.</source>
-        <translation>Fallo de autenticación, por favor intente de nuevo.</translation>
+        <translation>Error de autenticación, inténtelo de nuevo.</translation>
     </message>
     <message>
+        <location filename="../src/PolkitListener.cpp" line="272"/>
         <source>Password input error!</source>
-        <translation type="unfinished"></translation>
+        <translation>¡Error de entrada de contraseña!</translation>
+    </message>
+    <message>
+        <source>Account locked %1 minutes due to %2 fail attempts</source>
+        <translation type="vanished">账户锁定%1分钟由于%2次错误尝试</translation>
+    </message>
+    <message>
+        <source>Authentication failure,there are still %1 remaining opportunities</source>
+        <translation type="vanished">认证失败,还剩余%1次尝试机会</translation>
     </message>
 </context>
 <context>
     <name>QObject</name>
     <message>
+        <source>FingerPrint</source>
+        <translation type="obsolete">指纹</translation>
+    </message>
+    <message>
+        <source>FingerVein</source>
+        <translation type="obsolete">指静脉</translation>
+    </message>
+    <message>
+        <source>Iris</source>
+        <translation type="obsolete">虹膜</translation>
+    </message>
+    <message>
+        <source>Face</source>
+        <translation type="obsolete">人脸</translation>
+    </message>
+    <message>
+        <source>VoicePrint</source>
+        <translation type="obsolete">声纹</translation>
+    </message>
+    <message>
         <source>Cancel</source>
-        <translation type="obsolete">Cancelar</translation>
+        <translation type="obsolete">取消</translation>
     </message>
 </context>
 </TS>
diff -Nru ukui-biometric-auth-4.10.0.0/polkit-agent/i18n_ts/fr.ts ukui-biometric-auth-4.20.0.0/polkit-agent/i18n_ts/fr.ts
--- ukui-biometric-auth-4.10.0.0/polkit-agent/i18n_ts/fr.ts	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/polkit-agent/i18n_ts/fr.ts	2024-09-23 19:22:29.000000000 +0800
@@ -4,208 +4,438 @@
 <context>
     <name>BioAuthWidget</name>
     <message>
-        <source>Form</source>
-        <translation type="obsolete">Forme</translation>
+        <source>Retry</source>
+        <translation type="obsolete">重试</translation>
+    </message>
+    <message>
+        <source>%1 too many unsuccessful attempts,please enter password.</source>
+        <translation type="obsolete">%1验证失败达最大次数,请使用密码登录</translation>
+    </message>
+    <message>
+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
+        <translation type="obsolete">%1认证失败,还剩%2次尝试机会</translation>
+    </message>
+    <message>
+        <source>Please use wechat to scan the code</source>
+        <translation type="vanished">请使用微信扫码</translation>
     </message>
 </context>
 <context>
-    <name>BioDevicesWidget</name>
+    <name>BioDevices</name>
     <message>
-        <source>Form</source>
-        <translation type="obsolete">Forme</translation>
+        <source>FingerPrint</source>
+        <translation type="obsolete">指纹</translation>
+    </message>
+    <message>
+        <source>FingerVein</source>
+        <translation type="obsolete">指静脉</translation>
+    </message>
+    <message>
+        <source>Iris</source>
+        <translation type="obsolete">虹膜</translation>
+    </message>
+    <message>
+        <source>Face</source>
+        <translation type="obsolete">人脸</translation>
+    </message>
+    <message>
+        <source>VoicePrint</source>
+        <translation type="obsolete">声纹</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+    <message>
+        <source>QRCode</source>
+        <translation type="vanished">二维码</translation>
+    </message>
+</context>
+<context>
+    <name>LoginOptionsWidget</name>
+    <message>
+        <source>Login Options</source>
+        <translation type="vanished">登录选项</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
     </message>
 </context>
 <context>
     <name>MainWindow</name>
     <message>
+        <location filename="../src/mainwindow.cpp" line="66"/>
+        <source>Authentication</source>
+        <translation>Authentification</translation>
+    </message>
+    <message>
+        <source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
+        <translation type="vanished">指纹验证失败,您还有%1次尝试机会</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.ui" line="26"/>
         <source>Form</source>
-        <translation>Forme</translation>
+        <translation></translation>
+    </message>
+    <message>
+        <source>More</source>
+        <translation type="obsolete">更多</translation>
     </message>
     <message>
+        <source>Restart</source>
+        <translation type="obsolete">重新开始</translation>
+    </message>
+    <message>
+        <source>Password</source>
+        <translation type="vanished">密码</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.ui" line="409"/>
+        <location filename="../src/mainwindow.cpp" line="1075"/>
+        <location filename="../src/mainwindow.cpp" line="1143"/>
         <source>Biometric</source>
         <translation>Biométrique</translation>
     </message>
     <message>
+        <location filename="../src/mainwindow.ui" line="480"/>
+        <source>use password</source>
+        <translation>Utiliser le mot de passe</translation>
+    </message>
+    <message>
+        <source>DeviceType:</source>
+        <translation type="obsolete">设备类型:</translation>
+    </message>
+    <message>
+        <source>Back</source>
+        <translation type="obsolete">返回</translation>
+    </message>
+    <message>
         <source>Details</source>
-        <translation type="vanished">Détails</translation>
+        <translation type="vanished">详细</translation>
+    </message>
+    <message>
+        <source>Action Id:</source>
+        <translation type="obsolete">动作:</translation>
+    </message>
+    <message>
+        <source>Description:</source>
+        <translation type="vanished">描述:</translation>
     </message>
     <message>
         <source>Polkit.subject-pid:</source>
-        <translation type="vanished">Polkit.subject-pid:</translation>
+        <translation type="vanished">Polkit.subject-pid:</translation>
     </message>
     <message>
-        <source>Vendor:</source>
-        <translation type="vanished">Vendeur:</translation>
+        <source>Retry</source>
+        <translation type="obsolete">重试</translation>
     </message>
     <message>
-        <source>Description:</source>
-        <translation type="vanished">La description:</translation>
+        <source>Device types:</source>
+        <translation type="obsolete">设备类型:</translation>
     </message>
     <message>
-        <source>Polkit.caller-pid:</source>
-        <translation type="vanished">Polkit.caller-pid:</translation>
+        <source>Vendor:</source>
+        <translation type="vanished">发行商:</translation>
     </message>
     <message>
         <source>Action:</source>
-        <translation type="vanished">Action:</translation>
+        <translation type="vanished">动作:</translation>
+    </message>
+    <message>
+        <source>Polkit.caller-pid:</source>
+        <translation type="vanished">Polkit.caller-pid:</translation>
     </message>
     <message>
+        <location filename="../src/mainwindow.ui" line="441"/>
+        <location filename="../src/mainwindow.cpp" line="1077"/>
         <source>Cancel</source>
         <translation>Annuler</translation>
     </message>
     <message>
+        <location filename="../src/mainwindow.ui" line="460"/>
+        <location filename="../src/mainwindow.cpp" line="1073"/>
         <source>Authenticate</source>
         <translation>Authentifier</translation>
     </message>
     <message>
-        <source>Authentication</source>
-        <translation>Authentification</translation>
+        <location filename="../src/mainwindow.cpp" line="1079"/>
+        <location filename="../src/mainwindow.cpp" line="1183"/>
+        <source>Use password</source>
+        <translation>Utiliser le mot de passe</translation>
+    </message>
+    <message>
+        <source>Auth</source>
+        <translation type="obsolete">授权</translation>
+    </message>
+    <message>
+        <source>Too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">指纹验证失败达最大次数,请使用密码解锁</translation>
+    </message>
+    <message>
+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
+        <translation type="vanished">%1认证失败,还剩%2次尝试机会</translation>
+    </message>
+    <message>
+        <source>%1 too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">%1验证失败达最大次数,请使用密码登录</translation>
     </message>
     <message>
         <source>in authentication, please wait...</source>
-        <translation type="vanished">en cours d&apos;authentification, veuillez patienter ...</translation>
+        <translation type="vanished">认证中,请稍等...</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1219"/>
+        <location filename="../src/mainwindow.cpp" line="1292"/>
+        <location filename="../src/mainwindow.cpp" line="1293"/>
+        <source>Please try again in %1 minutes.</source>
+        <translation>Veuillez réessayer dans %1 minutes.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1230"/>
+        <location filename="../src/mainwindow.cpp" line="1302"/>
+        <location filename="../src/mainwindow.cpp" line="1303"/>
+        <source>Please try again in %1 seconds.</source>
+        <translation>Veuillez réessayer dans %1 secondes.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1240"/>
+        <location filename="../src/mainwindow.cpp" line="1241"/>
+        <location filename="../src/mainwindow.cpp" line="1311"/>
+        <location filename="../src/mainwindow.cpp" line="1312"/>
+        <source>Account locked permanently.</source>
+        <translation>Compte verrouillé définitivement.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="834"/>
+        <location filename="../src/mainwindow.cpp" line="835"/>
+        <source>Password cannot be empty</source>
+        <translation>Le mot de passe ne peut pas être vide</translation>
+    </message>
+    <message>
+        <source>Failed to verify %1, please enter password.</source>
+        <translation type="vanished">验证%1失败,请输入密码.</translation>
+    </message>
+    <message>
+        <source>Unable to verify %1, please enter password.</source>
+        <translation type="vanished">无法验证%1,请输入密码.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="242"/>
+        <location filename="../src/mainwindow.cpp" line="246"/>
+        <source>Failed to verify %1, you still have %2 verification opportunities</source>
+        <translation>Échec de la vérification %1, vous avez encore %2 possibilités de vérification</translation>
     </message>
     <message>
         <source>An application is attempting to perform an action that requires privileges. Authentication is required to perform this action.</source>
-        <translation type="vanished">Une application tente d&apos;exécuter une action nécessitant des privilèges. Une authentification est requise pour effectuer cette action.</translation>
+        <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
     </message>
     <message>
+        <location filename="../src/mainwindow.cpp" line="731"/>
         <source>Password: </source>
         <translation>Mot de passe: </translation>
     </message>
     <message>
-        <source>Authentication failed, please try again.</source>
-        <translation>Authentification échouée. Veuillez réessayer.</translation>
+        <location filename="../src/mainwindow.cpp" line="335"/>
+        <source>Please enter your password or enroll your fingerprint </source>
+        <translation>Veuillez saisir votre mot de passe ou enregistrer votre empreinte digitale </translation>
     </message>
     <message>
-        <source>Please enter your password or enroll your fingerprint </source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="259"/>
+        <source>Abnormal network</source>
+        <translation>Réseau anormal</translation>
     </message>
     <message>
-        <source>use password</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="665"/>
+        <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
+        <translation>Cette opération nécessite l’autorisation de l’administrateur. Veuillez saisir votre mot de passe pour autoriser cette opération.</translation>
     </message>
     <message>
-        <source>Account locked,</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="733"/>
+        <source>_Password: </source>
+        <translation>_Mot de passe: </translation>
     </message>
     <message>
-        <source>days left</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="735"/>
+        <source>_Password:</source>
+        <translation>_Mot de passe:</translation>
     </message>
     <message>
-        <source>hours left</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="850"/>
+        <source>Authentication failed, please try again.</source>
+        <translation>L’authentification a échoué, veuillez réessayer.</translation>
     </message>
     <message>
-        <source>minutes left</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="779"/>
+        <source>days left</source>
+        <translation>jours restants</translation>
     </message>
     <message>
-        <source>seconds left</source>
-        <translation type="unfinished"></translation>
+        <source>Biometric/code scan authentication failed too many times, please enter the password.</source>
+        <translation type="vanished">生物/扫码验证失败达最大次数,请使用密码解锁.</translation>
     </message>
     <message>
-        <source>Password cannot be empty</source>
-        <translation type="unfinished"></translation>
+        <source>Bioauth/code scan authentication failed, you still have %1 verification opportunities</source>
+        <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
     </message>
     <message>
-        <source>Use password</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="226"/>
+        <location filename="../src/mainwindow.cpp" line="1415"/>
+        <location filename="../src/mainwindow.cpp" line="1417"/>
+        <source>Failed to verify %1, please enter password to unlock</source>
+        <translation>Impossible de vérifier %1, veuillez entrer le mot de passe pour déverrouiller</translation>
     </message>
     <message>
-        <source>Please try again in %1 minutes.</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="231"/>
+        <location filename="../src/mainwindow.cpp" line="233"/>
+        <location filename="../src/mainwindow.cpp" line="1419"/>
+        <source>Unable to verify %1, please enter password to unlock</source>
+        <translation>Impossible de vérifier %1, veuillez entrer le mot de passe pour déverrouiller</translation>
     </message>
     <message>
-        <source>Please try again in %1 seconds.</source>
-        <translation type="unfinished"></translation>
+        <source>NET Exception</source>
+        <translation type="vanished">网络异常</translation>
     </message>
     <message>
-        <source>Account locked permanently.</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="671"/>
+        <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
+        <translation>Un programme tente d’effectuer une action qui nécessite des privilèges. Il nécessite une autorisation pour effectuer l’action.</translation>
     </message>
     <message>
-        <source>Verify face recognition or enter password to unlock</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="108"/>
+        <location filename="../src/mainwindow.cpp" line="729"/>
+        <source>Input Password</source>
+        <translation>Mot de passe d’entrée</translation>
     </message>
     <message>
-        <source>Press fingerprint or enter password to unlock</source>
+        <location filename="../src/mainwindow.cpp" line="105"/>
+        <source>Insert the ukey into the USB port</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Verify voiceprint or enter password to unlock</source>
+        <location filename="../src/mainwindow.cpp" line="107"/>
+        <source>Enter the ukey password</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Verify finger vein or enter password to unlock</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="783"/>
+        <source>hours left</source>
+        <translation>Heures restantes</translation>
     </message>
     <message>
-        <source>Verify iris or enter password to unlock</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="787"/>
+        <source>minutes left</source>
+        <translation>minutes restantes</translation>
     </message>
     <message>
-        <source>Failed to verify %1, you still have %2 verification opportunities</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="791"/>
+        <source>seconds left</source>
+        <translation>secondes restantes</translation>
     </message>
     <message>
-        <source>Input Password</source>
+        <location filename="../src/mainwindow.cpp" line="880"/>
+        <location filename="../src/mainwindow.cpp" line="888"/>
+        <source>Input your password to authentication</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Use the bound wechat scanning code or enter the password to unlock</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="1434"/>
+        <source>Verify face recognition or enter password to unlock</source>
+        <translation>Vérifier la reconnaissance faciale ou saisir le mot de passe pour déverrouiller</translation>
     </message>
     <message>
-        <source>Failed to verify %1, please enter password to unlock</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="1439"/>
+        <source>Press fingerprint or enter password to unlock</source>
+        <translation>Appuyez sur l’empreinte digitale ou entrez le mot de passe pour déverrouiller</translation>
     </message>
     <message>
-        <source>Unable to verify %1, please enter password to unlock</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="1444"/>
+        <source>Verify voiceprint or enter password to unlock</source>
+        <translation>Vérifier l’empreinte vocale ou saisir le mot de passe pour déverrouiller</translation>
     </message>
     <message>
-        <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="1449"/>
+        <source>Verify finger vein or enter password to unlock</source>
+        <translation>Vérifiez la veine du doigt ou entrez le mot de passe pour déverrouiller</translation>
     </message>
     <message>
-        <source>_Password:</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="1454"/>
+        <source>Verify iris or enter password to unlock</source>
+        <translation>Vérifiez l’iris ou entrez le mot de passe pour déverrouiller</translation>
     </message>
     <message>
-        <source>_Password: </source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="1459"/>
+        <source>Use the bound wechat scanning code or enter the password to unlock</source>
+        <translation>Utilisez le code d’analyse wechat lié ou entrez le mot de passe pour déverrouiller</translation>
     </message>
     <message>
-        <source>Abnormal network</source>
-        <translation type="unfinished"></translation>
+        <source>Use the bound wechat scanning code or enter the password to log in</source>
+        <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
     </message>
     <message>
-        <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
-        <translation type="unfinished"></translation>
+        <location filename="../src/mainwindow.cpp" line="779"/>
+        <location filename="../src/mainwindow.cpp" line="783"/>
+        <location filename="../src/mainwindow.cpp" line="787"/>
+        <location filename="../src/mainwindow.cpp" line="791"/>
+        <source>Account locked,</source>
+        <translation>Compte verrouillé,</translation>
+    </message>
+    <message>
+        <source>Authentication failed, please try again</source>
+        <translation type="obsolete">认证失败,请重试</translation>
     </message>
 </context>
 <context>
     <name>PolkitListener</name>
     <message>
+        <location filename="../src/PolkitListener.cpp" line="88"/>
         <source>Another client is already authenticating, please try again later.</source>
-        <translation>Un autre client s&apos;authentifie déjà. Veuillez réessayer ultérieurement.</translation>
+        <translation>Un autre client est déjà en train de s’authentifier, veuillez réessayer plus tard.</translation>
     </message>
     <message>
+        <location filename="../src/PolkitListener.cpp" line="265"/>
         <source>Authentication failure, please try again.</source>
-        <translation>Échec de l&apos;authentification, veuillez réessayer.</translation>
+        <translation>Échec de l’authentification, veuillez réessayer.</translation>
     </message>
     <message>
+        <location filename="../src/PolkitListener.cpp" line="272"/>
         <source>Password input error!</source>
-        <translation type="unfinished"></translation>
+        <translation>Erreur de saisie du mot de passe !</translation>
+    </message>
+    <message>
+        <source>Account locked %1 minutes due to %2 fail attempts</source>
+        <translation type="vanished">账户锁定%1分钟由于%2次错误尝试</translation>
+    </message>
+    <message>
+        <source>Authentication failure,there are still %1 remaining opportunities</source>
+        <translation type="vanished">认证失败,还剩余%1次尝试机会</translation>
     </message>
 </context>
 <context>
     <name>QObject</name>
     <message>
+        <source>FingerPrint</source>
+        <translation type="obsolete">指纹</translation>
+    </message>
+    <message>
+        <source>FingerVein</source>
+        <translation type="obsolete">指静脉</translation>
+    </message>
+    <message>
+        <source>Iris</source>
+        <translation type="obsolete">虹膜</translation>
+    </message>
+    <message>
+        <source>Face</source>
+        <translation type="obsolete">人脸</translation>
+    </message>
+    <message>
+        <source>VoicePrint</source>
+        <translation type="obsolete">声纹</translation>
+    </message>
+    <message>
         <source>Cancel</source>
-        <translation type="obsolete">Annuler</translation>
+        <translation type="obsolete">取消</translation>
     </message>
 </context>
 </TS>
diff -Nru ukui-biometric-auth-4.10.0.0/polkit-agent/i18n_ts/kk.ts ukui-biometric-auth-4.20.0.0/polkit-agent/i18n_ts/kk.ts
--- ukui-biometric-auth-4.10.0.0/polkit-agent/i18n_ts/kk.ts	1970-01-01 08:00:00.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/polkit-agent/i18n_ts/kk.ts	2024-09-23 19:22:29.000000000 +0800
@@ -0,0 +1,441 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="kk">
+<context>
+    <name>BioAuthWidget</name>
+    <message>
+        <source>Retry</source>
+        <translation type="obsolete">重试</translation>
+    </message>
+    <message>
+        <source>%1 too many unsuccessful attempts,please enter password.</source>
+        <translation type="obsolete">%1验证失败达最大次数,请使用密码登录</translation>
+    </message>
+    <message>
+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
+        <translation type="obsolete">%1认证失败,还剩%2次尝试机会</translation>
+    </message>
+    <message>
+        <source>Please use wechat to scan the code</source>
+        <translation type="vanished">请使用微信扫码</translation>
+    </message>
+</context>
+<context>
+    <name>BioDevices</name>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="obsolete">指纹</translation>
+    </message>
+    <message>
+        <source>FingerVein</source>
+        <translation type="obsolete">指静脉</translation>
+    </message>
+    <message>
+        <source>Iris</source>
+        <translation type="obsolete">虹膜</translation>
+    </message>
+    <message>
+        <source>Face</source>
+        <translation type="obsolete">人脸</translation>
+    </message>
+    <message>
+        <source>VoicePrint</source>
+        <translation type="obsolete">声纹</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+    <message>
+        <source>QRCode</source>
+        <translation type="vanished">二维码</translation>
+    </message>
+</context>
+<context>
+    <name>LoginOptionsWidget</name>
+    <message>
+        <source>Login Options</source>
+        <translation type="vanished">登录选项</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+</context>
+<context>
+    <name>MainWindow</name>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="66"/>
+        <source>Authentication</source>
+        <translation>شىندىقتى دالەلدەۋ</translation>
+    </message>
+    <message>
+        <source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
+        <translation type="vanished">指纹验证失败,您还有%1次尝试机会</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.ui" line="26"/>
+        <source>Form</source>
+        <translation>كەستە</translation>
+    </message>
+    <message>
+        <source>More</source>
+        <translation type="obsolete">更多</translation>
+    </message>
+    <message>
+        <source>Restart</source>
+        <translation type="obsolete">重新开始</translation>
+    </message>
+    <message>
+        <source>Password</source>
+        <translation type="vanished">密码</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.ui" line="409"/>
+        <location filename="../src/mainwindow.cpp" line="1075"/>
+        <location filename="../src/mainwindow.cpp" line="1143"/>
+        <source>Biometric</source>
+        <translation>بىئولەگىيەلىك ەرەكشەلىكتى ٸستەتۋ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.ui" line="480"/>
+        <source>use password</source>
+        <translation>قۇپيا نومەر ٸستەتۋ</translation>
+    </message>
+    <message>
+        <source>DeviceType:</source>
+        <translation type="obsolete">设备类型:</translation>
+    </message>
+    <message>
+        <source>Back</source>
+        <translation type="obsolete">返回</translation>
+    </message>
+    <message>
+        <source>Details</source>
+        <translation type="vanished">详细</translation>
+    </message>
+    <message>
+        <source>Action Id:</source>
+        <translation type="obsolete">动作:</translation>
+    </message>
+    <message>
+        <source>Description:</source>
+        <translation type="vanished">描述:</translation>
+    </message>
+    <message>
+        <source>Polkit.subject-pid:</source>
+        <translation type="vanished">Polkit.subject-pid:</translation>
+    </message>
+    <message>
+        <source>Retry</source>
+        <translation type="obsolete">重试</translation>
+    </message>
+    <message>
+        <source>Device types:</source>
+        <translation type="obsolete">设备类型:</translation>
+    </message>
+    <message>
+        <source>Vendor:</source>
+        <translation type="vanished">发行商:</translation>
+    </message>
+    <message>
+        <source>Action:</source>
+        <translation type="vanished">动作:</translation>
+    </message>
+    <message>
+        <source>Polkit.caller-pid:</source>
+        <translation type="vanished">Polkit.caller-pid:</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.ui" line="441"/>
+        <location filename="../src/mainwindow.cpp" line="1077"/>
+        <source>Cancel</source>
+        <translation>كۇشىنەن قالدىرۋ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.ui" line="460"/>
+        <location filename="../src/mainwindow.cpp" line="1073"/>
+        <source>Authenticate</source>
+        <translation>ۇقىق بەرۋ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1079"/>
+        <location filename="../src/mainwindow.cpp" line="1183"/>
+        <source>Use password</source>
+        <translation>قۇپيا نومەر ٸستەتۋ ارقىلى دالەلدەۋ</translation>
+    </message>
+    <message>
+        <source>Auth</source>
+        <translation type="obsolete">授权</translation>
+    </message>
+    <message>
+        <source>Too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">指纹验证失败达最大次数,请使用密码解锁</translation>
+    </message>
+    <message>
+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
+        <translation type="vanished">%1认证失败,还剩%2次尝试机会</translation>
+    </message>
+    <message>
+        <source>%1 too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">%1验证失败达最大次数,请使用密码登录</translation>
+    </message>
+    <message>
+        <source>in authentication, please wait...</source>
+        <translation type="vanished">认证中,请稍等...</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1219"/>
+        <location filename="../src/mainwindow.cpp" line="1292"/>
+        <location filename="../src/mainwindow.cpp" line="1293"/>
+        <source>Please try again in %1 minutes.</source>
+        <translation>٪1 مينۋت ٸشٸندە قاتە سىناپ كور.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1230"/>
+        <location filename="../src/mainwindow.cpp" line="1302"/>
+        <location filename="../src/mainwindow.cpp" line="1303"/>
+        <source>Please try again in %1 seconds.</source>
+        <translation>٪1 سەكونت ٸشٸندە قاتە سىناپ كور.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1240"/>
+        <location filename="../src/mainwindow.cpp" line="1241"/>
+        <location filename="../src/mainwindow.cpp" line="1311"/>
+        <location filename="../src/mainwindow.cpp" line="1312"/>
+        <source>Account locked permanently.</source>
+        <translation>ەسەپات ماڭگىلىك قۇلىپتالادى.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="834"/>
+        <location filename="../src/mainwindow.cpp" line="835"/>
+        <source>Password cannot be empty</source>
+        <translation>قۇپيا نۇمىردى بوس قويۋعا بولمايدى</translation>
+    </message>
+    <message>
+        <source>Failed to verify %1, please enter password.</source>
+        <translation type="vanished">验证%1失败,请输入密码.</translation>
+    </message>
+    <message>
+        <source>Unable to verify %1, please enter password.</source>
+        <translation type="vanished">无法验证%1,请输入密码.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="242"/>
+        <location filename="../src/mainwindow.cpp" line="246"/>
+        <source>Failed to verify %1, you still have %2 verification opportunities</source>
+        <translation>٪1 نى دالەلدەۋ جەڭىلىپ قالدى، سىزدە جانەدە ٪2 دالەلدەۋ ورايى بار</translation>
+    </message>
+    <message>
+        <source>An application is attempting to perform an action that requires privileges. Authentication is required to perform this action.</source>
+        <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="731"/>
+        <source>Password: </source>
+        <translation>قۇپيا نومەر </translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="335"/>
+        <source>Please enter your password or enroll your fingerprint </source>
+        <translation>قۇپيا نۇمىرىڭىزدى كىرگىزىڭىز ياكي بارماقشى ئىزىڭىزنى تونۇتۇڭ </translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="259"/>
+        <source>Abnormal network</source>
+        <translation>بينورمال تور</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="665"/>
+        <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
+        <translation>نۇ جوبالاۋ باسقارعٸشتٸڭ ۇقىق بىرىستى تالاپ ىستەيدى.قۇپيا نۇمىردى كىرەۈزۈپ بي رەتكى جوبالاۋنىڭ الىپ بېرىلىشىغا جول قويىڭىز.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="733"/>
+        <source>_Password: </source>
+        <translation>قۇپيا نومەر </translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="735"/>
+        <source>_Password:</source>
+        <translation>قۇپيا نومەر</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="850"/>
+        <source>Authentication failed, please try again.</source>
+        <translation>دالەلدەۋ جەڭىلىپ قالدى، قاتە سىناڭ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="779"/>
+        <source>days left</source>
+        <translation>1 كۇننەن كەيىن سناپ كور</translation>
+    </message>
+    <message>
+        <source>Biometric/code scan authentication failed too many times, please enter the password.</source>
+        <translation type="vanished">生物/扫码验证失败达最大次数,请使用密码解锁.</translation>
+    </message>
+    <message>
+        <source>Bioauth/code scan authentication failed, you still have %1 verification opportunities</source>
+        <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="226"/>
+        <location filename="../src/mainwindow.cpp" line="1415"/>
+        <location filename="../src/mainwindow.cpp" line="1417"/>
+        <source>Failed to verify %1, please enter password to unlock</source>
+        <translation>٪1 نى دالەلدەۋ جەڭىلىپ قالدى، قۇپيا نومەر كىرگىزىڭىز</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="231"/>
+        <location filename="../src/mainwindow.cpp" line="233"/>
+        <location filename="../src/mainwindow.cpp" line="1419"/>
+        <source>Unable to verify %1, please enter password to unlock</source>
+        <translation>٪1 نى دالەلدەۋگە امالسٸز، قۇپيا نۇمىردى كىرەۈزۈپ قۇلىبىن ٴٸشڭٸز</translation>
+    </message>
+    <message>
+        <source>NET Exception</source>
+        <translation type="vanished">网络异常</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="671"/>
+        <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
+        <translation>بٸر پٸروگٸرامما ۇقىق تالاپ ىستەيتىن ارەكەتتى ىستەۋگە ئۇرۇنماقتا. نۇ ارەكەتتى اتقار ەتۋ ٷشٸن ۇقىق تالاپ ىستەيدى.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="108"/>
+        <location filename="../src/mainwindow.cpp" line="729"/>
+        <source>Input Password</source>
+        <translation>قۇپيا نومەر كىرگىزۋ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="105"/>
+        <source>Insert the ukey into the USB port</source>
+        <translation>ukey نى USB اۋزىنا چېتىپ قويىڭىز</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="107"/>
+        <source>Enter the ukey password</source>
+        <translation>ukey قۇپيا نۇمىردى كىرگىزىڭىز</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="783"/>
+        <source>hours left</source>
+        <translation>بٸر ساعاتتان كەيىن اشٸلدٸ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="787"/>
+        <source>minutes left</source>
+        <translation>بٸر مينوتتىن كەيىن اشٸلدٸ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="791"/>
+        <source>seconds left</source>
+        <translation>بٸر سەكونتىن كەيىن اشٸلدٸ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="880"/>
+        <location filename="../src/mainwindow.cpp" line="888"/>
+        <source>Input your password to authentication</source>
+        <translation>قۇپيا نۇمىردى كىرەۈزۈپ ازاماتتىق كۋالىك دالەلدەۋ.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1434"/>
+        <source>Verify face recognition or enter password to unlock</source>
+        <translation>چىراي تانىسن دالەلدەۋ ياكي قۇپيا نومەر كىرگىزۋ ارقىلى قۇلىپ ٸشٸۋ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1439"/>
+        <source>Press fingerprint or enter password to unlock</source>
+        <translation>بارماقشى ٴٸزدٸ باسٸۋ ياكي قۇپيا نومەر كىرگىزۋ ارقىلى قۇلىپ ٸشٸۋ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1444"/>
+        <source>Verify voiceprint or enter password to unlock</source>
+        <translation>اۋا ٴٸزدٸ دالەلدەۋ ياكي قۇپيا نومەر كىرگىزۋ ارقىلى قۇلىپ ٸشٸۋ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1449"/>
+        <source>Verify finger vein or enter password to unlock</source>
+        <translation>بارماقشى ٴٸزٸ ارقىلى انىقتاۋ ياكي قۇپيا نومەر كىرگىزۋ ارقىلى قۇلىپ ٸشٸۋ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1454"/>
+        <source>Verify iris or enter password to unlock</source>
+        <translation>Iris نى انىقتاۋ ياكي قۇپيا نومەر كىرگىزۋ ارقىلى قۇلىپ ٸشٸۋ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1459"/>
+        <source>Use the bound wechat scanning code or enter the password to unlock</source>
+        <translation>بايلانعان ئۈندىدارنى كەسكىندەۋ بەلگىسى ياكي قۇپيا نۇمىردى كىرەۈزۈپ قۇلىپ ٸشٸۋ</translation>
+    </message>
+    <message>
+        <source>Use the bound wechat scanning code or enter the password to log in</source>
+        <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="779"/>
+        <location filename="../src/mainwindow.cpp" line="783"/>
+        <location filename="../src/mainwindow.cpp" line="787"/>
+        <location filename="../src/mainwindow.cpp" line="791"/>
+        <source>Account locked,</source>
+        <translation>ٸستەتۋ نومەرىڭىز قۇلىپتانىپ قالدى</translation>
+    </message>
+    <message>
+        <source>Authentication failed, please try again</source>
+        <translation type="obsolete">认证失败,请重试</translation>
+    </message>
+</context>
+<context>
+    <name>PolkitListener</name>
+    <message>
+        <location filename="../src/PolkitListener.cpp" line="88"/>
+        <source>Another client is already authenticating, please try again later.</source>
+        <translation>جانە بٸر قاريدار دالەلدەپ جاتىر، سەل تۇرٸپ قاتە سىناڭ.</translation>
+    </message>
+    <message>
+        <location filename="../src/PolkitListener.cpp" line="265"/>
+        <source>Authentication failure, please try again.</source>
+        <translation>دالەلدەۋ جەڭىلىپ قالدى، قاتە سىناڭ.</translation>
+    </message>
+    <message>
+        <location filename="../src/PolkitListener.cpp" line="272"/>
+        <source>Password input error!</source>
+        <translation>كىرگىزگەن قۇپيا نومەر قاتە قالدى</translation>
+    </message>
+    <message>
+        <source>Account locked %1 minutes due to %2 fail attempts</source>
+        <translation type="vanished">账户锁定%1分钟由于%2次错误尝试</translation>
+    </message>
+    <message>
+        <source>Authentication failure,there are still %1 remaining opportunities</source>
+        <translation type="vanished">认证失败,还剩余%1次尝试机会</translation>
+    </message>
+</context>
+<context>
+    <name>QObject</name>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="obsolete">指纹</translation>
+    </message>
+    <message>
+        <source>FingerVein</source>
+        <translation type="obsolete">指静脉</translation>
+    </message>
+    <message>
+        <source>Iris</source>
+        <translation type="obsolete">虹膜</translation>
+    </message>
+    <message>
+        <source>Face</source>
+        <translation type="obsolete">人脸</translation>
+    </message>
+    <message>
+        <source>VoicePrint</source>
+        <translation type="obsolete">声纹</translation>
+    </message>
+    <message>
+        <source>Cancel</source>
+        <translation type="obsolete">取消</translation>
+    </message>
+</context>
+</TS>
diff -Nru ukui-biometric-auth-4.10.0.0/polkit-agent/i18n_ts/ky.ts ukui-biometric-auth-4.20.0.0/polkit-agent/i18n_ts/ky.ts
--- ukui-biometric-auth-4.10.0.0/polkit-agent/i18n_ts/ky.ts	1970-01-01 08:00:00.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/polkit-agent/i18n_ts/ky.ts	2024-09-23 19:22:29.000000000 +0800
@@ -0,0 +1,441 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="ky">
+<context>
+    <name>BioAuthWidget</name>
+    <message>
+        <source>Retry</source>
+        <translation type="obsolete">重试</translation>
+    </message>
+    <message>
+        <source>%1 too many unsuccessful attempts,please enter password.</source>
+        <translation type="obsolete">%1验证失败达最大次数,请使用密码登录</translation>
+    </message>
+    <message>
+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
+        <translation type="obsolete">%1认证失败,还剩%2次尝试机会</translation>
+    </message>
+    <message>
+        <source>Please use wechat to scan the code</source>
+        <translation type="vanished">请使用微信扫码</translation>
+    </message>
+</context>
+<context>
+    <name>BioDevices</name>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="obsolete">指纹</translation>
+    </message>
+    <message>
+        <source>FingerVein</source>
+        <translation type="obsolete">指静脉</translation>
+    </message>
+    <message>
+        <source>Iris</source>
+        <translation type="obsolete">虹膜</translation>
+    </message>
+    <message>
+        <source>Face</source>
+        <translation type="obsolete">人脸</translation>
+    </message>
+    <message>
+        <source>VoicePrint</source>
+        <translation type="obsolete">声纹</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+    <message>
+        <source>QRCode</source>
+        <translation type="vanished">二维码</translation>
+    </message>
+</context>
+<context>
+    <name>LoginOptionsWidget</name>
+    <message>
+        <source>Login Options</source>
+        <translation type="vanished">登录选项</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+</context>
+<context>
+    <name>MainWindow</name>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="66"/>
+        <source>Authentication</source>
+        <translation>راستىنى دالىلدۅ</translation>
+    </message>
+    <message>
+        <source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
+        <translation type="vanished">指纹验证失败,您还有%1次尝试机会</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.ui" line="26"/>
+        <source>Form</source>
+        <translation>جادىبال</translation>
+    </message>
+    <message>
+        <source>More</source>
+        <translation type="obsolete">更多</translation>
+    </message>
+    <message>
+        <source>Restart</source>
+        <translation type="obsolete">重新开始</translation>
+    </message>
+    <message>
+        <source>Password</source>
+        <translation type="vanished">密码</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.ui" line="409"/>
+        <location filename="../src/mainwindow.cpp" line="1075"/>
+        <location filename="../src/mainwindow.cpp" line="1143"/>
+        <source>Biometric</source>
+        <translation>بىئولەگىيەلىك ۅزگۅچۅلۉگۉ ىشتەتىش</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.ui" line="480"/>
+        <source>use password</source>
+        <translation>جاشىرۇۇن  نومۇر ىشتەتىش</translation>
+    </message>
+    <message>
+        <source>DeviceType:</source>
+        <translation type="obsolete">设备类型:</translation>
+    </message>
+    <message>
+        <source>Back</source>
+        <translation type="obsolete">返回</translation>
+    </message>
+    <message>
+        <source>Details</source>
+        <translation type="vanished">详细</translation>
+    </message>
+    <message>
+        <source>Action Id:</source>
+        <translation type="obsolete">动作:</translation>
+    </message>
+    <message>
+        <source>Description:</source>
+        <translation type="vanished">描述:</translation>
+    </message>
+    <message>
+        <source>Polkit.subject-pid:</source>
+        <translation type="vanished">Polkit.subject-pid:</translation>
+    </message>
+    <message>
+        <source>Retry</source>
+        <translation type="obsolete">重试</translation>
+    </message>
+    <message>
+        <source>Device types:</source>
+        <translation type="obsolete">设备类型:</translation>
+    </message>
+    <message>
+        <source>Vendor:</source>
+        <translation type="vanished">发行商:</translation>
+    </message>
+    <message>
+        <source>Action:</source>
+        <translation type="vanished">动作:</translation>
+    </message>
+    <message>
+        <source>Polkit.caller-pid:</source>
+        <translation type="vanished">Polkit.caller-pid:</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.ui" line="441"/>
+        <location filename="../src/mainwindow.cpp" line="1077"/>
+        <source>Cancel</source>
+        <translation>ارعادان  قالتىرىش</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.ui" line="460"/>
+        <location filename="../src/mainwindow.cpp" line="1073"/>
+        <source>Authenticate</source>
+        <translation>ۇقۇق بەرۉۉ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1079"/>
+        <location filename="../src/mainwindow.cpp" line="1183"/>
+        <source>Use password</source>
+        <translation>جاشىرۇۇن  نومۇر ىشتەتىش  ارقىلۇۇ دالىلدۅ</translation>
+    </message>
+    <message>
+        <source>Auth</source>
+        <translation type="obsolete">授权</translation>
+    </message>
+    <message>
+        <source>Too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">指纹验证失败达最大次数,请使用密码解锁</translation>
+    </message>
+    <message>
+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
+        <translation type="vanished">%1认证失败,还剩%2次尝试机会</translation>
+    </message>
+    <message>
+        <source>%1 too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">%1验证失败达最大次数,请使用密码登录</translation>
+    </message>
+    <message>
+        <source>in authentication, please wait...</source>
+        <translation type="vanished">认证中,请稍等...</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1219"/>
+        <location filename="../src/mainwindow.cpp" line="1292"/>
+        <location filename="../src/mainwindow.cpp" line="1293"/>
+        <source>Please try again in %1 minutes.</source>
+        <translation>٪1 مىنۇت ىچىندە  قايرا سىناپ باعىڭ.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1230"/>
+        <location filename="../src/mainwindow.cpp" line="1302"/>
+        <location filename="../src/mainwindow.cpp" line="1303"/>
+        <source>Please try again in %1 seconds.</source>
+        <translation>٪1 سىكونت ىچىندە  قايرا سىناپ باعىڭ.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1240"/>
+        <location filename="../src/mainwindow.cpp" line="1241"/>
+        <location filename="../src/mainwindow.cpp" line="1311"/>
+        <location filename="../src/mainwindow.cpp" line="1312"/>
+        <source>Account locked permanently.</source>
+        <translation>ەسابات تۉبۅلۉك قۇلۇپلىنىدۇ.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="834"/>
+        <location filename="../src/mainwindow.cpp" line="835"/>
+        <source>Password cannot be empty</source>
+        <translation>جاشىرۇۇن  نومۇردۇ  بوش ،بەكەر  قويۇشقا  بولبويت</translation>
+    </message>
+    <message>
+        <source>Failed to verify %1, please enter password.</source>
+        <translation type="vanished">验证%1失败,请输入密码.</translation>
+    </message>
+    <message>
+        <source>Unable to verify %1, please enter password.</source>
+        <translation type="vanished">无法验证%1,请输入密码.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="242"/>
+        <location filename="../src/mainwindow.cpp" line="246"/>
+        <source>Failed to verify %1, you still have %2 verification opportunities</source>
+        <translation>٪1 نى دالىلدۅ جەڭىلۉۉ بولدۇ ، سىزدە  داعى ەلە ٪2 دالىلدۅ مۅۅرتۉ بار</translation>
+    </message>
+    <message>
+        <source>An application is attempting to perform an action that requires privileges. Authentication is required to perform this action.</source>
+        <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="731"/>
+        <source>Password: </source>
+        <translation>جاشىرۇۇن  نومۇر </translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="335"/>
+        <source>Please enter your password or enroll your fingerprint </source>
+        <translation>جاشىرۇۇن  نومۇرۇڭۇزدۇ  كىرگىزىڭ كۅرۉنۉشتۅرۉ بارماق ئىزىڭىزنى تونۇتۇڭ </translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="259"/>
+        <source>Abnormal network</source>
+        <translation>بۅتۅنچۅ تور</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="665"/>
+        <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
+        <translation>بۇل ماشقۇلدانۇۇ  باشقارۇۇچۇنۇن ۇقۇق بەرۉۉنۉ تالاپ جاسايت .جاشىرۇۇن  نومۇردۇ  كىيىرىپ بي قاتىمقى ماشقۇلدانۇۇ نىڭ الىپ بېرىلىشىغا جول قويۇڭ.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="733"/>
+        <source>_Password: </source>
+        <translation>جاشىرۇۇن  نومۇر </translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="735"/>
+        <source>_Password:</source>
+        <translation>جاشىرۇۇن  نومۇر</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="850"/>
+        <source>Authentication failed, please try again.</source>
+        <translation>دالىلدۅ جەڭىلۉۉ بولدۇ ، قايرا سىناڭ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="779"/>
+        <source>days left</source>
+        <translation>1 كۉندۅن كىيىن سىناپ باعىڭ</translation>
+    </message>
+    <message>
+        <source>Biometric/code scan authentication failed too many times, please enter the password.</source>
+        <translation type="vanished">生物/扫码验证失败达最大次数,请使用密码解锁.</translation>
+    </message>
+    <message>
+        <source>Bioauth/code scan authentication failed, you still have %1 verification opportunities</source>
+        <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="226"/>
+        <location filename="../src/mainwindow.cpp" line="1415"/>
+        <location filename="../src/mainwindow.cpp" line="1417"/>
+        <source>Failed to verify %1, please enter password to unlock</source>
+        <translation>٪1 نى دالىلدۅ جەڭىلۉۉ بولدۇ ، سىرلۇۇ نومۇر كىرگىزىڭ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="231"/>
+        <location filename="../src/mainwindow.cpp" line="233"/>
+        <location filename="../src/mainwindow.cpp" line="1419"/>
+        <source>Unable to verify %1, please enter password to unlock</source>
+        <translation>٪1 نى دالىلدۅۅگۅ ايلاسىز، جاشىرۇۇن  نومۇردۇ  كىيىرىپ قۇلۇپنى اچىڭ</translation>
+    </message>
+    <message>
+        <source>NET Exception</source>
+        <translation type="vanished">网络异常</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="671"/>
+        <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
+        <translation>بىر  پراگرامما ۇقۇق تالاپ جاسايتۇرعان قىيمىلدى جاسووعو ئۇرۇنماقتا. بۇل قىيمىلدى اتقارماق  جاسوو ،اتقارۇۇ  ۉچۉن  ۇقۇق تالاپ جاسايت .</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="108"/>
+        <location filename="../src/mainwindow.cpp" line="729"/>
+        <source>Input Password</source>
+        <translation>جاشىرۇۇن  نومۇر كىرگىزۉۉ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="105"/>
+        <source>Insert the ukey into the USB port</source>
+        <translation>ukey نى USB ووزۇنا چېتىپ قويۇڭ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="107"/>
+        <source>Enter the ukey password</source>
+        <translation>ukey جاشىرۇۇن  نومۇرۇن كىرگىزىڭ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="783"/>
+        <source>hours left</source>
+        <translation>بىر  سائەتتىن كىيىن اچىلات</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="787"/>
+        <source>minutes left</source>
+        <translation>بىر  مىنۇتتان كىيىن اچىلات</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="791"/>
+        <source>seconds left</source>
+        <translation>بىر  سەكۇنتتان كىيىن اچىلات</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="880"/>
+        <location filename="../src/mainwindow.cpp" line="888"/>
+        <source>Input your password to authentication</source>
+        <translation>جاشىرۇۇن  نومۇردۇ  كىيىرىپ كۉبۅلۉك  دالىلدۅ.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1434"/>
+        <source>Verify face recognition or enter password to unlock</source>
+        <translation>چىراي تاانىشتى  دالىلدۅ كۅرۉنۉشتۅرۉ جاشىرۇۇن  نومۇر كىرگىزۉۉ ارقىلۇۇ قۇلپ اچۇۇ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1439"/>
+        <source>Press fingerprint or enter password to unlock</source>
+        <translation>بارماق ىزىن باسۇۇدا كۅرۉنۉشتۅرۉ جاشىرۇۇن  نومۇر كىرگىزۉۉ ارقىلۇۇ قۇلپ اچۇۇ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1444"/>
+        <source>Verify voiceprint or enter password to unlock</source>
+        <translation>دووش ىزىن دالىلدۅ كۅرۉنۉشتۅرۉ جاشىرۇۇن  نومۇر كىرگىزۉۉ ارقىلۇۇ قۇلپ اچۇۇ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1449"/>
+        <source>Verify finger vein or enter password to unlock</source>
+        <translation>بارماق ئزى ارقىلۇۇ انىقتاش  كۅرۉنۉشتۅرۉ جاشىرۇۇن  نومۇر كىرگىزۉۉ ارقىلۇۇ قۇلپ اچۇۇ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1454"/>
+        <source>Verify iris or enter password to unlock</source>
+        <translation>Iris نى انىقتاش  كۅرۉنۉشتۅرۉ جاشىرۇۇن  نومۇر كىرگىزۉۉ ارقىلۇۇ قۇلپ اچۇۇ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1459"/>
+        <source>Use the bound wechat scanning code or enter the password to unlock</source>
+        <translation>بايلانعان  ئۈندىدارنى ىسكاننىردوو قۇپۇيا نومۇرۇ  كۅرۉنۉشتۅرۉ جاشىرۇۇن  نومۇرۇن كىيىرىپ قۇلپ اچۇۇ</translation>
+    </message>
+    <message>
+        <source>Use the bound wechat scanning code or enter the password to log in</source>
+        <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="779"/>
+        <location filename="../src/mainwindow.cpp" line="783"/>
+        <location filename="../src/mainwindow.cpp" line="787"/>
+        <location filename="../src/mainwindow.cpp" line="791"/>
+        <source>Account locked,</source>
+        <translation>ىشتەتىش  نومۇرۇڭۇز قۇلۇپتالىپ قالدى</translation>
+    </message>
+    <message>
+        <source>Authentication failed, please try again</source>
+        <translation type="obsolete">认证失败,请重试</translation>
+    </message>
+</context>
+<context>
+    <name>PolkitListener</name>
+    <message>
+        <location filename="../src/PolkitListener.cpp" line="88"/>
+        <source>Another client is already authenticating, please try again later.</source>
+        <translation>داعى بىر  سووداگەر ، جولووچۇ  دالىلدەپ جاتات، سەل تۇرۇپ قايرا سىناڭ.</translation>
+    </message>
+    <message>
+        <location filename="../src/PolkitListener.cpp" line="265"/>
+        <source>Authentication failure, please try again.</source>
+        <translation>دالىلدۅ جەڭىلۉۉ بولدۇ ، قايرا سىناڭ.</translation>
+    </message>
+    <message>
+        <location filename="../src/PolkitListener.cpp" line="272"/>
+        <source>Password input error!</source>
+        <translation>كىيىرگەن  جاشىرۇۇن  نومۇر قاتاا بولدۇ</translation>
+    </message>
+    <message>
+        <source>Account locked %1 minutes due to %2 fail attempts</source>
+        <translation type="vanished">账户锁定%1分钟由于%2次错误尝试</translation>
+    </message>
+    <message>
+        <source>Authentication failure,there are still %1 remaining opportunities</source>
+        <translation type="vanished">认证失败,还剩余%1次尝试机会</translation>
+    </message>
+</context>
+<context>
+    <name>QObject</name>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="obsolete">指纹</translation>
+    </message>
+    <message>
+        <source>FingerVein</source>
+        <translation type="obsolete">指静脉</translation>
+    </message>
+    <message>
+        <source>Iris</source>
+        <translation type="obsolete">虹膜</translation>
+    </message>
+    <message>
+        <source>Face</source>
+        <translation type="obsolete">人脸</translation>
+    </message>
+    <message>
+        <source>VoicePrint</source>
+        <translation type="obsolete">声纹</translation>
+    </message>
+    <message>
+        <source>Cancel</source>
+        <translation type="obsolete">取消</translation>
+    </message>
+</context>
+</TS>
diff -Nru ukui-biometric-auth-4.10.0.0/polkit-agent/i18n_ts/mn.ts ukui-biometric-auth-4.20.0.0/polkit-agent/i18n_ts/mn.ts
--- ukui-biometric-auth-4.10.0.0/polkit-agent/i18n_ts/mn.ts	1970-01-01 08:00:00.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/polkit-agent/i18n_ts/mn.ts	2024-09-23 19:22:29.000000000 +0800
@@ -0,0 +1,441 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="mn">
+<context>
+    <name>BioAuthWidget</name>
+    <message>
+        <source>Retry</source>
+        <translation type="obsolete">重试</translation>
+    </message>
+    <message>
+        <source>%1 too many unsuccessful attempts,please enter password.</source>
+        <translation type="obsolete">%1验证失败达最大次数,请使用密码登录</translation>
+    </message>
+    <message>
+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
+        <translation type="obsolete">%1认证失败,还剩%2次尝试机会</translation>
+    </message>
+    <message>
+        <source>Please use wechat to scan the code</source>
+        <translation type="vanished">请使用微信扫码</translation>
+    </message>
+</context>
+<context>
+    <name>BioDevices</name>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="obsolete">指纹</translation>
+    </message>
+    <message>
+        <source>FingerVein</source>
+        <translation type="obsolete">指静脉</translation>
+    </message>
+    <message>
+        <source>Iris</source>
+        <translation type="obsolete">虹膜</translation>
+    </message>
+    <message>
+        <source>Face</source>
+        <translation type="obsolete">人脸</translation>
+    </message>
+    <message>
+        <source>VoicePrint</source>
+        <translation type="obsolete">声纹</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+    <message>
+        <source>QRCode</source>
+        <translation type="vanished">二维码</translation>
+    </message>
+</context>
+<context>
+    <name>LoginOptionsWidget</name>
+    <message>
+        <source>Login Options</source>
+        <translation type="vanished">登录选项</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+</context>
+<context>
+    <name>MainWindow</name>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="66"/>
+        <source>Authentication</source>
+        <translation>ᠡᠷᠬᠡ ᠤᠯᠭᠤᠬᠤ</translation>
+    </message>
+    <message>
+        <source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
+        <translation type="vanished">指纹验证失败,您还有%1次尝试机会</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.ui" line="26"/>
+        <source>Form</source>
+        <translation></translation>
+    </message>
+    <message>
+        <source>More</source>
+        <translation type="obsolete">更多</translation>
+    </message>
+    <message>
+        <source>Restart</source>
+        <translation type="obsolete">重新开始</translation>
+    </message>
+    <message>
+        <source>Password</source>
+        <translation type="vanished">密码</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.ui" line="409"/>
+        <location filename="../src/mainwindow.cpp" line="1075"/>
+        <location filename="../src/mainwindow.cpp" line="1143"/>
+        <source>Biometric</source>
+        <translation>ᠠᠮᠢᠳᠤ ᠪᠤᠳᠠᠰ ᠢ᠋ ᠬᠡᠷᠡᠭᠯᠡᠵᠤ ᠢᠯᠭᠠᠨ ᠳᠠᠨᠢᠬᠤ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.ui" line="480"/>
+        <source>use password</source>
+        <translation>ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠭᠰᠠᠨ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠢ᠋ ᠬᠡᠷᠡᠭᠯᠡᠬᠦ</translation>
+    </message>
+    <message>
+        <source>DeviceType:</source>
+        <translation type="obsolete">设备类型:</translation>
+    </message>
+    <message>
+        <source>Back</source>
+        <translation type="obsolete">返回</translation>
+    </message>
+    <message>
+        <source>Details</source>
+        <translation type="vanished">详细</translation>
+    </message>
+    <message>
+        <source>Action Id:</source>
+        <translation type="obsolete">动作:</translation>
+    </message>
+    <message>
+        <source>Description:</source>
+        <translation type="vanished">描述:</translation>
+    </message>
+    <message>
+        <source>Polkit.subject-pid:</source>
+        <translation type="vanished">Polkit.subject-pid:</translation>
+    </message>
+    <message>
+        <source>Retry</source>
+        <translation type="obsolete">重试</translation>
+    </message>
+    <message>
+        <source>Device types:</source>
+        <translation type="obsolete">设备类型:</translation>
+    </message>
+    <message>
+        <source>Vendor:</source>
+        <translation type="vanished">发行商:</translation>
+    </message>
+    <message>
+        <source>Action:</source>
+        <translation type="vanished">动作:</translation>
+    </message>
+    <message>
+        <source>Polkit.caller-pid:</source>
+        <translation type="vanished">Polkit.caller-pid:</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.ui" line="441"/>
+        <location filename="../src/mainwindow.cpp" line="1077"/>
+        <source>Cancel</source>
+        <translation>ᠦᠬᠡᠢᠰᠭᠡᠬᠦ᠌</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.ui" line="460"/>
+        <location filename="../src/mainwindow.cpp" line="1073"/>
+        <source>Authenticate</source>
+        <translation>ᠡᠷᠬᠡ ᠤᠯᠭᠤᠬᠤ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1079"/>
+        <location filename="../src/mainwindow.cpp" line="1183"/>
+        <source>Use password</source>
+        <translation>ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠭᠰᠠᠨ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠢ᠋ ᠬᠡᠷᠡᠭᠯᠡᠬᠦ</translation>
+    </message>
+    <message>
+        <source>Auth</source>
+        <translation type="obsolete">授权</translation>
+    </message>
+    <message>
+        <source>Too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">指纹验证失败达最大次数,请使用密码解锁</translation>
+    </message>
+    <message>
+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
+        <translation type="vanished">%1认证失败,还剩%2次尝试机会</translation>
+    </message>
+    <message>
+        <source>%1 too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">%1验证失败达最大次数,请使用密码登录</translation>
+    </message>
+    <message>
+        <source>in authentication, please wait...</source>
+        <translation type="vanished">认证中,请稍等...</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1219"/>
+        <location filename="../src/mainwindow.cpp" line="1292"/>
+        <location filename="../src/mainwindow.cpp" line="1293"/>
+        <source>Please try again in %1 minutes.</source>
+        <translation>%1 ᠮᠢᠨᠦ᠋ᠲ᠎ᠦᠨ ᠳᠠᠷᠠᠭ᠎ᠠ ᠳᠠᠬᠢᠵᠤ ᠳᠤᠷᠱᠢᠭᠠᠷᠠᠢ.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1230"/>
+        <location filename="../src/mainwindow.cpp" line="1302"/>
+        <location filename="../src/mainwindow.cpp" line="1303"/>
+        <source>Please try again in %1 seconds.</source>
+        <translation>%1 ᠮᠢᠨᠦ᠋ᠲ᠎ᠦᠨ ᠳᠠᠷᠠᠭ᠎ᠠ ᠳᠠᠬᠢᠵᠤ ᠳᠤᠷᠱᠢᠭᠠᠷᠠᠢ.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1240"/>
+        <location filename="../src/mainwindow.cpp" line="1241"/>
+        <location filename="../src/mainwindow.cpp" line="1311"/>
+        <location filename="../src/mainwindow.cpp" line="1312"/>
+        <source>Account locked permanently.</source>
+        <translation>ᠳᠠᠩᠰᠠ ᠨᠢᠭᠡᠨᠳᠡ ᠦᠨᠢᠳᠡ ᠤᠨᠢᠰᠤᠯᠠᠭᠳᠠᠪᠠ.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="834"/>
+        <location filename="../src/mainwindow.cpp" line="835"/>
+        <source>Password cannot be empty</source>
+        <translation>ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠬᠤᠭᠤᠰᠤᠨ ᠪᠠᠢᠵᠤ ᠪᠤᠯᠬᠤ ᠦᠬᠡᠢ</translation>
+    </message>
+    <message>
+        <source>Failed to verify %1, please enter password.</source>
+        <translation type="vanished">验证%1失败,请输入密码.</translation>
+    </message>
+    <message>
+        <source>Unable to verify %1, please enter password.</source>
+        <translation type="vanished">无法验证%1,请输入密码.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="242"/>
+        <location filename="../src/mainwindow.cpp" line="246"/>
+        <source>Failed to verify %1, you still have %2 verification opportunities</source>
+        <translation>%1᠎ᠶᠢᠨ/᠎ᠦᠨ ᠰᠢᠯᠭᠠᠨ ᠪᠠᠢᠴᠠᠭᠠᠯᠳᠠ ᠢᠯᠠᠭᠳᠠᠪᠠ ᠂ ᠲᠠ ᠪᠠᠰᠠ%2 ᠤᠳᠠᠭᠠᠨ᠎ᠤ ᠳᠤᠷᠱᠢᠬᠤ ᠵᠠᠪᠱᠢᠶᠠᠨ ᠲᠠᠢ</translation>
+    </message>
+    <message>
+        <source>An application is attempting to perform an action that requires privileges. Authentication is required to perform this action.</source>
+        <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="731"/>
+        <source>Password: </source>
+        <translation>ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋᠄ </translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="335"/>
+        <source>Please enter your password or enroll your fingerprint </source>
+        <translation>ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠪᠤᠶᠤ ᠬᠤᠷᠤᠭᠤᠨ ᠤ᠋ ᠤᠷᠤᠮ ᠵᠢᠨᠨ ᠤᠷᠤᠭᠤᠯᠤᠭᠠᠷᠠᠢ </translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="259"/>
+        <source>Abnormal network</source>
+        <translation>ᠲᠤᠷ ᠰᠦᠯᠵᠢᠶ᠎ᠡ ᠬᠡᠪ ᠤ᠋ᠨ ᠪᠤᠰᠤ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="665"/>
+        <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
+        <translation>ᠳᠤᠰ ᠤᠳᠠᠭᠠᠨ ᠤ᠋ ᠠᠵᠢᠯᠯᠠᠬᠤᠢ ᠵᠢᠨ ᠬᠠᠮᠢᠶᠠᠷᠤᠭᠴᠢ ᠵᠢᠨ ᠡᠷᠬᠡ ᠤᠯᠭᠤᠯᠳᠠ ᠪᠡᠷ ᠰᠠᠶᠢ ᠦᠷᠬᠦᠯᠵᠢᠯᠡᠨ ᠬᠡᠷᠡᠭᠵᠢᠬᠦᠯᠦᠨ᠎ᠡ᠂ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠵᠢᠨᠨ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠳᠤᠰ ᠠᠵᠢᠯᠯᠠᠬᠤᠢ ᠵᠢ ᠵᠦᠪᠰᠢᠶᠡᠷᠡᠭᠡᠷᠡᠢ.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="733"/>
+        <source>_Password: </source>
+        <translation>ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋: </translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="735"/>
+        <source>_Password:</source>
+        <translation>ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋:</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="850"/>
+        <source>Authentication failed, please try again.</source>
+        <translation>ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠵᠤ ᠴᠢᠳᠠᠭᠰᠠᠨ ᠦᠬᠡᠢ᠂ ᠳᠠᠬᠢᠵᠤ ᠳᠤᠷᠰᠢᠭᠠᠷᠠᠢ.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="779"/>
+        <source>days left</source>
+        <translation>ᠡᠳᠦᠷ ᠤ᠋ᠨ ᠳᠠᠷᠠᠭ᠎ᠠ ᠤᠨᠢᠰᠤ ᠳᠠᠢᠯᠤᠨ᠎ᠠ</translation>
+    </message>
+    <message>
+        <source>Biometric/code scan authentication failed too many times, please enter the password.</source>
+        <translation type="vanished">生物/扫码验证失败达最大次数,请使用密码解锁.</translation>
+    </message>
+    <message>
+        <source>Bioauth/code scan authentication failed, you still have %1 verification opportunities</source>
+        <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="226"/>
+        <location filename="../src/mainwindow.cpp" line="1415"/>
+        <location filename="../src/mainwindow.cpp" line="1417"/>
+        <source>Failed to verify %1, please enter password to unlock</source>
+        <translation>%1᠎ᠶᠢ/᠎ᠢ ᠪᠠᠳᠤᠯᠭᠠᠵᠢᠭᠤᠯᠬᠤ ᠠᠷᠭ᠎ᠠ ᠦᠬᠡᠢ ᠂ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="231"/>
+        <location filename="../src/mainwindow.cpp" line="233"/>
+        <location filename="../src/mainwindow.cpp" line="1419"/>
+        <source>Unable to verify %1, please enter password to unlock</source>
+        <translation>%1᠎ᠶᠢ/᠎ᠢ ᠪᠠᠳᠤᠯᠭᠠᠵᠢᠭᠤᠯᠬᠤ ᠠᠷᠭ᠎ᠠ ᠦᠬᠡᠢ ᠂ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
+    </message>
+    <message>
+        <source>NET Exception</source>
+        <translation type="vanished">网络异常</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="671"/>
+        <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
+        <translation>ᠨᠢᠭᠡ ᠫᠡᠷᠦᠭᠷᠡᠮ ᠶᠠᠭ ᠨᠢᠭᠡ ᠤᠨᠠᠴᠠ ᠡᠷᠬᠡ ᠬᠡᠷᠡᠭᠰᠡᠬᠦ ᠬᠦᠳᠡᠯᠬᠡᠬᠡᠨ ᠢ᠋ ᠬᠡᠷᠡᠭᠵᠢᠬᠦᠯᠬᠦ ᠪᠡᠷ ᠳᠤᠷᠰᠢᠵᠤ ᠪᠠᠢᠨ᠎ᠠ᠂ ᠳᠤᠰ ᠬᠦᠳᠡᠯᠬᠡᠬᠡᠨ ᠢ᠋ ᠬᠦᠢᠴᠡᠳᠬᠡᠬᠦ ᠡᠷᠬᠡ ᠤᠯᠭᠤᠬᠤ ᠵᠢ ᠱᠠᠭᠠᠷᠳᠠᠵᠤ ᠪᠠᠢᠨ᠎ᠠ.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="108"/>
+        <location filename="../src/mainwindow.cpp" line="729"/>
+        <source>Input Password</source>
+        <translation>ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠬᠤ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="105"/>
+        <source>Insert the ukey into the USB port</source>
+        <translation>ᠠᠮᠤᠷ ᠲᠦᠪᠰᠢᠨ ᠦ ᠨᠢᠭᠤᠴᠠ ᠶᠢ USB ᠦᠵᠦᠭᠦᠷ ᠲᠦ ᠬᠠᠳᠬᠤᠵᠤ ᠣᠷᠣᠭᠠᠷᠠᠢ ᠃</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="107"/>
+        <source>Enter the ukey password</source>
+        <translation>ᠠᠮᠤᠷ ᠲᠦᠪᠰᠢᠨ ᠨᠢᠭᠤᠴᠠ ᠨᠣᠮᠧᠷ ᠢ ᠣᠷᠣᠭᠤᠯᠤᠨ᠎ᠠ ᠃</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="783"/>
+        <source>hours left</source>
+        <translation>ᠨᠢᠭᠡ ᠴᠠᠭ ᠤ᠋ᠨ ᠳᠠᠷᠠᠭ᠎ᠠ ᠤᠨᠢᠰᠤ ᠳᠠᠢᠯᠤᠨ᠎ᠠ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="787"/>
+        <source>minutes left</source>
+        <translation>ᠮᠢᠨᠦ᠋ᠲ ᠤ᠋ᠨ ᠳᠠᠷᠠᠭ᠎ᠠ ᠤᠨᠢᠰᠤ ᠳᠠᠢᠯᠤᠨ᠎ᠠ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="791"/>
+        <source>seconds left</source>
+        <translation>ᠰᠸᠺᠦᠨ᠋ᠲ ᠤ᠋ᠨ ᠳᠠᠷᠠᠭ᠎ᠠ ᠤᠨᠢᠰᠤ ᠳᠠᠢᠯᠤᠨ᠎ᠠ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="880"/>
+        <location filename="../src/mainwindow.cpp" line="888"/>
+        <source>Input your password to authentication</source>
+        <translation>ᠨᠢᠭᠤᠴᠠ ᠨᠣᠮᠧᠷ ᠣᠷᠣᠭᠤᠯᠬᠤ ᠳᠤ ᠡᠷᠬᠡ ᠣᠯᠭᠣᠨ᠎ᠠ ᠃</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1434"/>
+        <source>Verify face recognition or enter password to unlock</source>
+        <translation>ᠨᠢᠭᠤᠷ ᠱᠢᠷᠪᠢᠵᠤ ᠪᠠᠳᠤᠯᠭᠠᠵᠢᠭᠤᠯᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1439"/>
+        <source>Press fingerprint or enter password to unlock</source>
+        <translation>ᠬᠤᠷᠤᠭᠤᠨ᠎ᠤ ᠤᠷᠤᠮ ᠳᠠᠷᠤᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1444"/>
+        <source>Verify voiceprint or enter password to unlock</source>
+        <translation>ᠳᠠᠭᠤ᠎ᠪᠠᠷ ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1449"/>
+        <source>Verify finger vein or enter password to unlock</source>
+        <translation>ᠬᠤᠷᠤᠭᠤᠨ᠎ᠤ ᠨᠠᠮᠵᠢᠭᠤᠨ ᠰᠤᠳᠠᠯ᠎ᠢᠶᠠᠷ ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1454"/>
+        <source>Verify iris or enter password to unlock</source>
+        <translation>ᠰᠤᠯᠤᠩᠭ᠎ᠠ ᠪᠦᠷᠬᠦᠪᠴᠢ᠎ᠶᠢ ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1459"/>
+        <source>Use the bound wechat scanning code or enter the password to unlock</source>
+        <translation>ᠤᠶᠠᠭᠰᠠᠨ ᠸᠢᠴᠠᠲ᠎ᠢᠶᠠᠷ ᠺᠤᠳ᠋ ᠱᠢᠷᠪᠢᠬᠦ᠌ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
+    </message>
+    <message>
+        <source>Use the bound wechat scanning code or enter the password to log in</source>
+        <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="779"/>
+        <location filename="../src/mainwindow.cpp" line="783"/>
+        <location filename="../src/mainwindow.cpp" line="787"/>
+        <location filename="../src/mainwindow.cpp" line="791"/>
+        <source>Account locked,</source>
+        <translation>ᠳᠠᠨᠭᠰᠠ ᠵᠢ ᠨᠢᠬᠡᠨᠳᠡ ᠤᠨᠢᠰᠤᠯᠠᠪᠠ</translation>
+    </message>
+    <message>
+        <source>Authentication failed, please try again</source>
+        <translation type="obsolete">认证失败,请重试</translation>
+    </message>
+</context>
+<context>
+    <name>PolkitListener</name>
+    <message>
+        <location filename="../src/PolkitListener.cpp" line="88"/>
+        <source>Another client is already authenticating, please try again later.</source>
+        <translation>ᠦᠬᠡᠷ᠎ᠡ ᠨᠢᠭᠡ ᠬᠡᠷᠡᠭᠯᠡᠭᠴᠢ ᠵᠢᠨ ᠦᠵᠦᠬᠦᠷᠯᠢᠭ ᠢ᠋ ᠶᠠᠭ ᠨᠤᠳᠠᠯᠠᠵᠤ ᠪᠠᠢᠨ᠎ᠠ᠂ ᠤᠳᠠᠰᠬᠢᠭᠠᠳ ᠳᠠᠬᠢᠨ ᠳᠤᠷᠰᠢᠭᠠᠷᠠᠢ.</translation>
+    </message>
+    <message>
+        <location filename="../src/PolkitListener.cpp" line="265"/>
+        <source>Authentication failure, please try again.</source>
+        <translation>ᠰᠢᠯᠭᠠᠨ ᠪᠠᠳᠤᠯᠠᠵᠤ ᠴᠢᠳᠠᠭᠰᠠᠨ ᠦᠬᠡᠢ᠂ ᠳᠠᠬᠢᠵᠤ ᠳᠤᠷᠰᠢᠭᠠᠷᠠᠢ.</translation>
+    </message>
+    <message>
+        <location filename="../src/PolkitListener.cpp" line="272"/>
+        <source>Password input error!</source>
+        <translation>ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠢ᠋ ᠪᠤᠷᠤᠭᠤ ᠤᠷᠤᠭᠤᠯᠪᠠ!</translation>
+    </message>
+    <message>
+        <source>Account locked %1 minutes due to %2 fail attempts</source>
+        <translation type="vanished">账户锁定%1分钟由于%2次错误尝试</translation>
+    </message>
+    <message>
+        <source>Authentication failure,there are still %1 remaining opportunities</source>
+        <translation type="vanished">认证失败,还剩余%1次尝试机会</translation>
+    </message>
+</context>
+<context>
+    <name>QObject</name>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="obsolete">指纹</translation>
+    </message>
+    <message>
+        <source>FingerVein</source>
+        <translation type="obsolete">指静脉</translation>
+    </message>
+    <message>
+        <source>Iris</source>
+        <translation type="obsolete">虹膜</translation>
+    </message>
+    <message>
+        <source>Face</source>
+        <translation type="obsolete">人脸</translation>
+    </message>
+    <message>
+        <source>VoicePrint</source>
+        <translation type="obsolete">声纹</translation>
+    </message>
+    <message>
+        <source>Cancel</source>
+        <translation type="obsolete">取消</translation>
+    </message>
+</context>
+</TS>
diff -Nru ukui-biometric-auth-4.10.0.0/polkit-agent/i18n_ts/pt.ts ukui-biometric-auth-4.20.0.0/polkit-agent/i18n_ts/pt.ts
--- ukui-biometric-auth-4.10.0.0/polkit-agent/i18n_ts/pt.ts	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/polkit-agent/i18n_ts/pt.ts	2024-09-23 19:22:29.000000000 +0800
@@ -185,6 +185,18 @@
         <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Insert the ukey into the USB port</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Enter the ukey password</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Input your password to authentication</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PolkitListener</name>
diff -Nru ukui-biometric-auth-4.10.0.0/polkit-agent/i18n_ts/ru.ts ukui-biometric-auth-4.20.0.0/polkit-agent/i18n_ts/ru.ts
--- ukui-biometric-auth-4.10.0.0/polkit-agent/i18n_ts/ru.ts	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/polkit-agent/i18n_ts/ru.ts	2024-09-23 19:22:29.000000000 +0800
@@ -185,6 +185,18 @@
         <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Insert the ukey into the USB port</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Enter the ukey password</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Input your password to authentication</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PolkitListener</name>
diff -Nru ukui-biometric-auth-4.10.0.0/polkit-agent/i18n_ts/tr.ts ukui-biometric-auth-4.20.0.0/polkit-agent/i18n_ts/tr.ts
--- ukui-biometric-auth-4.10.0.0/polkit-agent/i18n_ts/tr.ts	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/polkit-agent/i18n_ts/tr.ts	2024-09-23 19:22:29.000000000 +0800
@@ -34,136 +34,156 @@
 <context>
     <name>MainWindow</name>
     <message>
-        <location filename="../src/mainwindow.cpp" line="65"/>
+        <location filename="../src/mainwindow.cpp" line="66"/>
         <source>Authentication</source>
         <translation>Kimlik Doğrulama</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="164"/>
-        <location filename="../src/mainwindow.cpp" line="1176"/>
+        <location filename="../src/mainwindow.cpp" line="226"/>
+        <location filename="../src/mainwindow.cpp" line="1415"/>
+        <location filename="../src/mainwindow.cpp" line="1417"/>
         <source>Failed to verify %1, please enter password to unlock</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="168"/>
-        <location filename="../src/mainwindow.cpp" line="1178"/>
+        <location filename="../src/mainwindow.cpp" line="231"/>
+        <location filename="../src/mainwindow.cpp" line="233"/>
+        <location filename="../src/mainwindow.cpp" line="1419"/>
         <source>Unable to verify %1, please enter password to unlock</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="175"/>
+        <location filename="../src/mainwindow.cpp" line="242"/>
+        <location filename="../src/mainwindow.cpp" line="246"/>
         <source>Failed to verify %1, you still have %2 verification opportunities</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="187"/>
+        <location filename="../src/mainwindow.cpp" line="259"/>
         <source>Abnormal network</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="511"/>
+        <location filename="../src/mainwindow.cpp" line="665"/>
         <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="517"/>
+        <location filename="../src/mainwindow.cpp" line="671"/>
         <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="576"/>
+        <location filename="../src/mainwindow.cpp" line="108"/>
+        <location filename="../src/mainwindow.cpp" line="729"/>
         <source>Input Password</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="623"/>
-        <location filename="../src/mainwindow.cpp" line="627"/>
-        <location filename="../src/mainwindow.cpp" line="631"/>
-        <location filename="../src/mainwindow.cpp" line="635"/>
+        <location filename="../src/mainwindow.cpp" line="105"/>
+        <source>Insert the ukey into the USB port</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="107"/>
+        <source>Enter the ukey password</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="779"/>
+        <location filename="../src/mainwindow.cpp" line="783"/>
+        <location filename="../src/mainwindow.cpp" line="787"/>
+        <location filename="../src/mainwindow.cpp" line="791"/>
         <source>Account locked,</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="623"/>
+        <location filename="../src/mainwindow.cpp" line="779"/>
         <source>days left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="627"/>
+        <location filename="../src/mainwindow.cpp" line="783"/>
         <source>hours left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="631"/>
+        <location filename="../src/mainwindow.cpp" line="787"/>
         <source>minutes left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="635"/>
+        <location filename="../src/mainwindow.cpp" line="791"/>
         <source>seconds left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="675"/>
-        <location filename="../src/mainwindow.cpp" line="676"/>
+        <location filename="../src/mainwindow.cpp" line="834"/>
+        <location filename="../src/mainwindow.cpp" line="835"/>
         <source>Password cannot be empty</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="886"/>
-        <location filename="../src/mainwindow.cpp" line="991"/>
+        <location filename="../src/mainwindow.cpp" line="880"/>
+        <location filename="../src/mainwindow.cpp" line="888"/>
+        <source>Input your password to authentication</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1079"/>
+        <location filename="../src/mainwindow.cpp" line="1183"/>
         <source>Use password</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="1026"/>
-        <location filename="../src/mainwindow.cpp" line="1093"/>
-        <location filename="../src/mainwindow.cpp" line="1094"/>
+        <location filename="../src/mainwindow.cpp" line="1219"/>
+        <location filename="../src/mainwindow.cpp" line="1292"/>
+        <location filename="../src/mainwindow.cpp" line="1293"/>
         <source>Please try again in %1 minutes.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="1036"/>
-        <location filename="../src/mainwindow.cpp" line="1103"/>
-        <location filename="../src/mainwindow.cpp" line="1104"/>
+        <location filename="../src/mainwindow.cpp" line="1230"/>
+        <location filename="../src/mainwindow.cpp" line="1302"/>
+        <location filename="../src/mainwindow.cpp" line="1303"/>
         <source>Please try again in %1 seconds.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="1045"/>
-        <location filename="../src/mainwindow.cpp" line="1046"/>
-        <location filename="../src/mainwindow.cpp" line="1112"/>
-        <location filename="../src/mainwindow.cpp" line="1113"/>
+        <location filename="../src/mainwindow.cpp" line="1240"/>
+        <location filename="../src/mainwindow.cpp" line="1241"/>
+        <location filename="../src/mainwindow.cpp" line="1311"/>
+        <location filename="../src/mainwindow.cpp" line="1312"/>
         <source>Account locked permanently.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="1193"/>
+        <location filename="../src/mainwindow.cpp" line="1434"/>
         <source>Verify face recognition or enter password to unlock</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="1198"/>
+        <location filename="../src/mainwindow.cpp" line="1439"/>
         <source>Press fingerprint or enter password to unlock</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="1203"/>
+        <location filename="../src/mainwindow.cpp" line="1444"/>
         <source>Verify voiceprint or enter password to unlock</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="1208"/>
+        <location filename="../src/mainwindow.cpp" line="1449"/>
         <source>Verify finger vein or enter password to unlock</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="1213"/>
+        <location filename="../src/mainwindow.cpp" line="1454"/>
         <source>Verify iris or enter password to unlock</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="1218"/>
+        <location filename="../src/mainwindow.cpp" line="1459"/>
         <source>Use the bound wechat scanning code or enter the password to unlock</source>
         <translation type="unfinished"></translation>
     </message>
@@ -185,9 +205,9 @@
         <translation type="obsolete">Parola</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.ui" line="302"/>
-        <location filename="../src/mainwindow.cpp" line="882"/>
-        <location filename="../src/mainwindow.cpp" line="948"/>
+        <location filename="../src/mainwindow.ui" line="409"/>
+        <location filename="../src/mainwindow.cpp" line="1075"/>
+        <location filename="../src/mainwindow.cpp" line="1143"/>
         <source>Biometric</source>
         <translation>Biyometrik</translation>
     </message>
@@ -236,19 +256,19 @@
         <translation type="vanished">Polkit.caller-pid:</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.ui" line="334"/>
-        <location filename="../src/mainwindow.cpp" line="884"/>
+        <location filename="../src/mainwindow.ui" line="441"/>
+        <location filename="../src/mainwindow.cpp" line="1077"/>
         <source>Cancel</source>
         <translation>İptal</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.ui" line="353"/>
-        <location filename="../src/mainwindow.cpp" line="880"/>
+        <location filename="../src/mainwindow.ui" line="460"/>
+        <location filename="../src/mainwindow.cpp" line="1073"/>
         <source>Authenticate</source>
         <translation>Kimlik Doğrulaması</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.ui" line="373"/>
+        <location filename="../src/mainwindow.ui" line="480"/>
         <source>use password</source>
         <translation type="unfinished"></translation>
     </message>
@@ -257,7 +277,7 @@
         <translation type="obsolete">Kimlik Doğrulaması</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="261"/>
+        <location filename="../src/mainwindow.cpp" line="335"/>
         <source>Please enter your password or enroll your fingerprint </source>
         <translation type="unfinished"></translation>
     </message>
@@ -270,22 +290,22 @@
         <translation type="vanished">Bir uygulama, ayrıcalıklar gerektiren bir eylem gerçekleştirmeye çalışıyor. Bu işlemi gerçekleştirmek için kimlik doğrulaması gerekiyor.</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="578"/>
+        <location filename="../src/mainwindow.cpp" line="731"/>
         <source>Password: </source>
         <translation type="unfinished">Parola: </translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="580"/>
+        <location filename="../src/mainwindow.cpp" line="733"/>
         <source>_Password: </source>
         <translation type="unfinished">_Parola: </translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="582"/>
+        <location filename="../src/mainwindow.cpp" line="735"/>
         <source>_Password:</source>
         <translation type="unfinished">_Parola:</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="691"/>
+        <location filename="../src/mainwindow.cpp" line="850"/>
         <source>Authentication failed, please try again.</source>
         <translation>Kimlik doğrulama başarısız, lütfen tekrar deneyin.</translation>
     </message>
@@ -302,12 +322,12 @@
         <translation>Başka bir hesap zaten kimlik doğrulaması yapıyor, lütfen daha sonra tekrar deneyin.</translation>
     </message>
     <message>
-        <location filename="../src/PolkitListener.cpp" line="257"/>
+        <location filename="../src/PolkitListener.cpp" line="265"/>
         <source>Authentication failure, please try again.</source>
         <translation>Kimlik doğrulama hatalı, lütfen tekrar deneyin.</translation>
     </message>
     <message>
-        <location filename="../src/PolkitListener.cpp" line="264"/>
+        <location filename="../src/PolkitListener.cpp" line="272"/>
         <source>Password input error!</source>
         <translation type="unfinished"></translation>
     </message>
diff -Nru ukui-biometric-auth-4.10.0.0/polkit-agent/i18n_ts/ug.ts ukui-biometric-auth-4.20.0.0/polkit-agent/i18n_ts/ug.ts
--- ukui-biometric-auth-4.10.0.0/polkit-agent/i18n_ts/ug.ts	1970-01-01 08:00:00.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/polkit-agent/i18n_ts/ug.ts	2024-09-23 19:22:29.000000000 +0800
@@ -0,0 +1,441 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="ug">
+<context>
+    <name>BioAuthWidget</name>
+    <message>
+        <source>Retry</source>
+        <translation type="obsolete">重试</translation>
+    </message>
+    <message>
+        <source>%1 too many unsuccessful attempts,please enter password.</source>
+        <translation type="obsolete">%1验证失败达最大次数,请使用密码登录</translation>
+    </message>
+    <message>
+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
+        <translation type="obsolete">%1认证失败,还剩%2次尝试机会</translation>
+    </message>
+    <message>
+        <source>Please use wechat to scan the code</source>
+        <translation type="vanished">请使用微信扫码</translation>
+    </message>
+</context>
+<context>
+    <name>BioDevices</name>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="obsolete">指纹</translation>
+    </message>
+    <message>
+        <source>FingerVein</source>
+        <translation type="obsolete">指静脉</translation>
+    </message>
+    <message>
+        <source>Iris</source>
+        <translation type="obsolete">虹膜</translation>
+    </message>
+    <message>
+        <source>Face</source>
+        <translation type="obsolete">人脸</translation>
+    </message>
+    <message>
+        <source>VoicePrint</source>
+        <translation type="obsolete">声纹</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+    <message>
+        <source>QRCode</source>
+        <translation type="vanished">二维码</translation>
+    </message>
+</context>
+<context>
+    <name>LoginOptionsWidget</name>
+    <message>
+        <source>Login Options</source>
+        <translation type="vanished">登录选项</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+</context>
+<context>
+    <name>MainWindow</name>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="66"/>
+        <source>Authentication</source>
+        <translation>راستىنى دەلىللەش</translation>
+    </message>
+    <message>
+        <source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
+        <translation type="vanished">指纹验证失败,您还有%1次尝试机会</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.ui" line="26"/>
+        <source>Form</source>
+        <translation>جەدۋەل</translation>
+    </message>
+    <message>
+        <source>More</source>
+        <translation type="obsolete">更多</translation>
+    </message>
+    <message>
+        <source>Restart</source>
+        <translation type="obsolete">重新开始</translation>
+    </message>
+    <message>
+        <source>Password</source>
+        <translation type="vanished">密码</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.ui" line="409"/>
+        <location filename="../src/mainwindow.cpp" line="1075"/>
+        <location filename="../src/mainwindow.cpp" line="1143"/>
+        <source>Biometric</source>
+        <translation>بىئولەگىيەلىك ئالاھىدىلىكنى ئىشلىتىش</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.ui" line="480"/>
+        <source>use password</source>
+        <translation>مەخپىي نومۇر ئىشلىتىش</translation>
+    </message>
+    <message>
+        <source>DeviceType:</source>
+        <translation type="obsolete">设备类型:</translation>
+    </message>
+    <message>
+        <source>Back</source>
+        <translation type="obsolete">返回</translation>
+    </message>
+    <message>
+        <source>Details</source>
+        <translation type="vanished">详细</translation>
+    </message>
+    <message>
+        <source>Action Id:</source>
+        <translation type="obsolete">动作:</translation>
+    </message>
+    <message>
+        <source>Description:</source>
+        <translation type="vanished">描述:</translation>
+    </message>
+    <message>
+        <source>Polkit.subject-pid:</source>
+        <translation type="vanished">Polkit.subject-pid:</translation>
+    </message>
+    <message>
+        <source>Retry</source>
+        <translation type="obsolete">重试</translation>
+    </message>
+    <message>
+        <source>Device types:</source>
+        <translation type="obsolete">设备类型:</translation>
+    </message>
+    <message>
+        <source>Vendor:</source>
+        <translation type="vanished">发行商:</translation>
+    </message>
+    <message>
+        <source>Action:</source>
+        <translation type="vanished">动作:</translation>
+    </message>
+    <message>
+        <source>Polkit.caller-pid:</source>
+        <translation type="vanished">Polkit.caller-pid:</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.ui" line="441"/>
+        <location filename="../src/mainwindow.cpp" line="1077"/>
+        <source>Cancel</source>
+        <translation>ئەمەلدىن قالدۇرۇش</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.ui" line="460"/>
+        <location filename="../src/mainwindow.cpp" line="1073"/>
+        <source>Authenticate</source>
+        <translation>ھوقۇق بېرىش</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1079"/>
+        <location filename="../src/mainwindow.cpp" line="1183"/>
+        <source>Use password</source>
+        <translation>مەخپىي نومۇر ئىشلىتىش ئارقىلىق دەلىللەش</translation>
+    </message>
+    <message>
+        <source>Auth</source>
+        <translation type="obsolete">授权</translation>
+    </message>
+    <message>
+        <source>Too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">指纹验证失败达最大次数,请使用密码解锁</translation>
+    </message>
+    <message>
+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
+        <translation type="vanished">%1认证失败,还剩%2次尝试机会</translation>
+    </message>
+    <message>
+        <source>%1 too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">%1验证失败达最大次数,请使用密码登录</translation>
+    </message>
+    <message>
+        <source>in authentication, please wait...</source>
+        <translation type="vanished">认证中,请稍等...</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1219"/>
+        <location filename="../src/mainwindow.cpp" line="1292"/>
+        <location filename="../src/mainwindow.cpp" line="1293"/>
+        <source>Please try again in %1 minutes.</source>
+        <translation>٪1 مىنۇت ئىچىدە قايتا سىناپ بېقىڭ.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1230"/>
+        <location filename="../src/mainwindow.cpp" line="1302"/>
+        <location filename="../src/mainwindow.cpp" line="1303"/>
+        <source>Please try again in %1 seconds.</source>
+        <translation>٪1 سېكۇنت ئىچىدە قايتا سىناپ بېقىڭ.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1240"/>
+        <location filename="../src/mainwindow.cpp" line="1241"/>
+        <location filename="../src/mainwindow.cpp" line="1311"/>
+        <location filename="../src/mainwindow.cpp" line="1312"/>
+        <source>Account locked permanently.</source>
+        <translation>ھېسابات مەڭگۈلۈك قۇلۇپلىنىدۇ.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="834"/>
+        <location filename="../src/mainwindow.cpp" line="835"/>
+        <source>Password cannot be empty</source>
+        <translation>مەخپىي نومۇرنى بوش قويۇشقا بولمايدۇ</translation>
+    </message>
+    <message>
+        <source>Failed to verify %1, please enter password.</source>
+        <translation type="vanished">验证%1失败,请输入密码.</translation>
+    </message>
+    <message>
+        <source>Unable to verify %1, please enter password.</source>
+        <translation type="vanished">无法验证%1,请输入密码.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="242"/>
+        <location filename="../src/mainwindow.cpp" line="246"/>
+        <source>Failed to verify %1, you still have %2 verification opportunities</source>
+        <translation>٪1 نى دەلىللەش مەغلۇپ بولدى، سىزدە يەنىلا ٪2 دەلىللەش پۇرسىتى بار</translation>
+    </message>
+    <message>
+        <source>An application is attempting to perform an action that requires privileges. Authentication is required to perform this action.</source>
+        <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="731"/>
+        <source>Password: </source>
+        <translation>مەخپىي نومۇر </translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="335"/>
+        <source>Please enter your password or enroll your fingerprint </source>
+        <translation>مەخپىي نومۇرىڭىزنى كىرگۈزۈڭ ياكى بارماق ئىزىڭىزنى تونۇتۇڭ </translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="259"/>
+        <source>Abnormal network</source>
+        <translation>بىنورمال تور</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="665"/>
+        <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
+        <translation>بۇ مەشغۇلات باشقۇرغۇچىنىڭ ھوقۇق بېرىشىنى تەلەپ قىلىدۇ.مەخپىي نومۇرنى كىرگۈزۈپ بي قېتىمقى مەشغۇلاتنىڭ ئېلىپ بېرىلىشىغا يول قويۇڭ.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="733"/>
+        <source>_Password: </source>
+        <translation>مەخپىي نومۇر </translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="735"/>
+        <source>_Password:</source>
+        <translation>مەخپىي نومۇر</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="850"/>
+        <source>Authentication failed, please try again.</source>
+        <translation>دەلىللەش مەغلۇپ بولدى، قايتا سىناڭ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="779"/>
+        <source>days left</source>
+        <translation>1 كۈندىن كېيىن سىناب بېقىڭ</translation>
+    </message>
+    <message>
+        <source>Biometric/code scan authentication failed too many times, please enter the password.</source>
+        <translation type="vanished">生物/扫码验证失败达最大次数,请使用密码解锁.</translation>
+    </message>
+    <message>
+        <source>Bioauth/code scan authentication failed, you still have %1 verification opportunities</source>
+        <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="226"/>
+        <location filename="../src/mainwindow.cpp" line="1415"/>
+        <location filename="../src/mainwindow.cpp" line="1417"/>
+        <source>Failed to verify %1, please enter password to unlock</source>
+        <translation>٪1 نى دەلىللەش مەغلۇپ بولدى، مەخپى نۇمۇر كىرگۈزۈڭ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="231"/>
+        <location filename="../src/mainwindow.cpp" line="233"/>
+        <location filename="../src/mainwindow.cpp" line="1419"/>
+        <source>Unable to verify %1, please enter password to unlock</source>
+        <translation>٪1 نى دەلىللەشكە ئامالسىز، مەخپىي نومۇرنى كىرگۈزۈپ قۇلۇپنى ئېچىڭ</translation>
+    </message>
+    <message>
+        <source>NET Exception</source>
+        <translation type="vanished">网络异常</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="671"/>
+        <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
+        <translation>بىر پروگرامما ئىمتىياز تەلەپ قىلىدىغان ھەرىكەتنى قىلىشقا ئۇرۇنماقتا. بۇ ھەرىكەتنى ئىجرا قىلىش ئۈچۈن ھوقۇق تەلەپ قىلىدۇ.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="108"/>
+        <location filename="../src/mainwindow.cpp" line="729"/>
+        <source>Input Password</source>
+        <translation>ئىم كىرگۈزۈش</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="105"/>
+        <source>Insert the ukey into the USB port</source>
+        <translation>ukey نى USB ئېغىزىغا چېتىپ قويۇڭ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="107"/>
+        <source>Enter the ukey password</source>
+        <translation>ukey مەخپىي نومۇرىنى كىرگۈزۈڭ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="783"/>
+        <source>hours left</source>
+        <translation>بىر سائەتتىن كېيىن ئېچىلىدۇ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="787"/>
+        <source>minutes left</source>
+        <translation>بىر مىنۇتتىن كېيىن ئېچىلىدۇ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="791"/>
+        <source>seconds left</source>
+        <translation>بىر سېكۇنتتىن كېيىن ئېچىلىدۇ</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="880"/>
+        <location filename="../src/mainwindow.cpp" line="888"/>
+        <source>Input your password to authentication</source>
+        <translation>مەخپىي نومۇرنى كىرگۈزۈپ كىملىك دەلىللەش.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1434"/>
+        <source>Verify face recognition or enter password to unlock</source>
+        <translation>چىراي تونۇشنى دەلىللەش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1439"/>
+        <source>Press fingerprint or enter password to unlock</source>
+        <translation>بارماق ئىزىنى بېسىش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1444"/>
+        <source>Verify voiceprint or enter password to unlock</source>
+        <translation>ئاۋاز ئىزىنى دەلىللەش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1449"/>
+        <source>Verify finger vein or enter password to unlock</source>
+        <translation>بارماق ئىزى ئارقىلىق ئېنىقلاش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1454"/>
+        <source>Verify iris or enter password to unlock</source>
+        <translation>Iris نى ئېنىقلاش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1459"/>
+        <source>Use the bound wechat scanning code or enter the password to unlock</source>
+        <translation>باغلانغان ئۈندىدارنى سىكاننېرلاش كودى ياكى مەخپىي نومۇرىنى كىرگۈزۈپ قۇلۇپ ئېچىش</translation>
+    </message>
+    <message>
+        <source>Use the bound wechat scanning code or enter the password to log in</source>
+        <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="779"/>
+        <location filename="../src/mainwindow.cpp" line="783"/>
+        <location filename="../src/mainwindow.cpp" line="787"/>
+        <location filename="../src/mainwindow.cpp" line="791"/>
+        <source>Account locked,</source>
+        <translation>ئىشلىتىش نومۇرىڭىز قۇلۇپلىنىپ قالدى</translation>
+    </message>
+    <message>
+        <source>Authentication failed, please try again</source>
+        <translation type="obsolete">认证失败,请重试</translation>
+    </message>
+</context>
+<context>
+    <name>PolkitListener</name>
+    <message>
+        <location filename="../src/PolkitListener.cpp" line="88"/>
+        <source>Another client is already authenticating, please try again later.</source>
+        <translation>يەنە بىر خېرىدار دەلىللەۋاتىدۇ، سەل تۇرۇپ قايتا سىناڭ.</translation>
+    </message>
+    <message>
+        <location filename="../src/PolkitListener.cpp" line="265"/>
+        <source>Authentication failure, please try again.</source>
+        <translation>دەلىللەش مەغلۇپ بولدى، قايتا سىناڭ.</translation>
+    </message>
+    <message>
+        <location filename="../src/PolkitListener.cpp" line="272"/>
+        <source>Password input error!</source>
+        <translation>كىرگۈزگەن مەخپىي نومۇر خاتا بولدى</translation>
+    </message>
+    <message>
+        <source>Account locked %1 minutes due to %2 fail attempts</source>
+        <translation type="vanished">账户锁定%1分钟由于%2次错误尝试</translation>
+    </message>
+    <message>
+        <source>Authentication failure,there are still %1 remaining opportunities</source>
+        <translation type="vanished">认证失败,还剩余%1次尝试机会</translation>
+    </message>
+</context>
+<context>
+    <name>QObject</name>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="obsolete">指纹</translation>
+    </message>
+    <message>
+        <source>FingerVein</source>
+        <translation type="obsolete">指静脉</translation>
+    </message>
+    <message>
+        <source>Iris</source>
+        <translation type="obsolete">虹膜</translation>
+    </message>
+    <message>
+        <source>Face</source>
+        <translation type="obsolete">人脸</translation>
+    </message>
+    <message>
+        <source>VoicePrint</source>
+        <translation type="obsolete">声纹</translation>
+    </message>
+    <message>
+        <source>Cancel</source>
+        <translation type="obsolete">取消</translation>
+    </message>
+</context>
+</TS>
diff -Nru ukui-biometric-auth-4.10.0.0/polkit-agent/i18n_ts/zh_CN.ts ukui-biometric-auth-4.20.0.0/polkit-agent/i18n_ts/zh_CN.ts
--- ukui-biometric-auth-4.10.0.0/polkit-agent/i18n_ts/zh_CN.ts	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/polkit-agent/i18n_ts/zh_CN.ts	2024-09-23 19:22:29.000000000 +0800
@@ -65,7 +65,7 @@
 <context>
     <name>MainWindow</name>
     <message>
-        <location filename="../src/mainwindow.cpp" line="65"/>
+        <location filename="../src/mainwindow.cpp" line="66"/>
         <source>Authentication</source>
         <translation>授权</translation>
     </message>
@@ -88,17 +88,17 @@
     </message>
     <message>
         <source>Password</source>
-        <translation>密码</translation>
+        <translation type="vanished">密码</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.ui" line="302"/>
-        <location filename="../src/mainwindow.cpp" line="882"/>
-        <location filename="../src/mainwindow.cpp" line="948"/>
+        <location filename="../src/mainwindow.ui" line="409"/>
+        <location filename="../src/mainwindow.cpp" line="1075"/>
+        <location filename="../src/mainwindow.cpp" line="1143"/>
         <source>Biometric</source>
         <translation>使用生物识别</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.ui" line="373"/>
+        <location filename="../src/mainwindow.ui" line="480"/>
         <source>use password</source>
         <translation>使用密码验证</translation>
     </message>
@@ -147,20 +147,20 @@
         <translation type="vanished">Polkit.caller-pid:</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.ui" line="334"/>
-        <location filename="../src/mainwindow.cpp" line="884"/>
+        <location filename="../src/mainwindow.ui" line="441"/>
+        <location filename="../src/mainwindow.cpp" line="1077"/>
         <source>Cancel</source>
         <translation>取消</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.ui" line="353"/>
-        <location filename="../src/mainwindow.cpp" line="880"/>
+        <location filename="../src/mainwindow.ui" line="460"/>
+        <location filename="../src/mainwindow.cpp" line="1073"/>
         <source>Authenticate</source>
         <translation>授权</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="886"/>
-        <location filename="../src/mainwindow.cpp" line="991"/>
+        <location filename="../src/mainwindow.cpp" line="1079"/>
+        <location filename="../src/mainwindow.cpp" line="1183"/>
         <source>Use password</source>
         <translation>使用密码验证</translation>
     </message>
@@ -185,30 +185,30 @@
         <translation type="vanished">认证中,请稍等...</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="1026"/>
-        <location filename="../src/mainwindow.cpp" line="1093"/>
-        <location filename="../src/mainwindow.cpp" line="1094"/>
+        <location filename="../src/mainwindow.cpp" line="1219"/>
+        <location filename="../src/mainwindow.cpp" line="1292"/>
+        <location filename="../src/mainwindow.cpp" line="1293"/>
         <source>Please try again in %1 minutes.</source>
         <translation>请%1分钟后再试</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="1036"/>
-        <location filename="../src/mainwindow.cpp" line="1103"/>
-        <location filename="../src/mainwindow.cpp" line="1104"/>
+        <location filename="../src/mainwindow.cpp" line="1230"/>
+        <location filename="../src/mainwindow.cpp" line="1302"/>
+        <location filename="../src/mainwindow.cpp" line="1303"/>
         <source>Please try again in %1 seconds.</source>
         <translation>请%1秒后再试</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="1045"/>
-        <location filename="../src/mainwindow.cpp" line="1046"/>
-        <location filename="../src/mainwindow.cpp" line="1112"/>
-        <location filename="../src/mainwindow.cpp" line="1113"/>
+        <location filename="../src/mainwindow.cpp" line="1240"/>
+        <location filename="../src/mainwindow.cpp" line="1241"/>
+        <location filename="../src/mainwindow.cpp" line="1311"/>
+        <location filename="../src/mainwindow.cpp" line="1312"/>
         <source>Account locked permanently.</source>
         <translation>账号已被永久锁定</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="675"/>
-        <location filename="../src/mainwindow.cpp" line="676"/>
+        <location filename="../src/mainwindow.cpp" line="834"/>
+        <location filename="../src/mainwindow.cpp" line="835"/>
         <source>Password cannot be empty</source>
         <translation>密码不能为空</translation>
     </message>
@@ -221,7 +221,8 @@
         <translation type="vanished">无法验证%1,请输入密码.</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="175"/>
+        <location filename="../src/mainwindow.cpp" line="242"/>
+        <location filename="../src/mainwindow.cpp" line="246"/>
         <source>Failed to verify %1, you still have %2 verification opportunities</source>
         <translation>验证%1失败,您还有%2次尝试机会</translation>
     </message>
@@ -230,42 +231,42 @@
         <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="578"/>
+        <location filename="../src/mainwindow.cpp" line="731"/>
         <source>Password: </source>
         <translation>密码: </translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="261"/>
+        <location filename="../src/mainwindow.cpp" line="335"/>
         <source>Please enter your password or enroll your fingerprint </source>
         <translation>请输入密码或者录入指纹</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="187"/>
+        <location filename="../src/mainwindow.cpp" line="259"/>
         <source>Abnormal network</source>
         <translation>网络异常</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="511"/>
+        <location filename="../src/mainwindow.cpp" line="665"/>
         <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
         <translation>本次操作需要通过管理员的授权才能继续执行,请输入密码以允许本次操作。</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="580"/>
+        <location filename="../src/mainwindow.cpp" line="733"/>
         <source>_Password: </source>
         <translation>密码: </translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="582"/>
+        <location filename="../src/mainwindow.cpp" line="735"/>
         <source>_Password:</source>
         <translation>密码:</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="691"/>
+        <location filename="../src/mainwindow.cpp" line="850"/>
         <source>Authentication failed, please try again.</source>
         <translation>认证失败,请重试。</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="623"/>
+        <location filename="../src/mainwindow.cpp" line="779"/>
         <source>days left</source>
         <translation>天后解锁</translation>
     </message>
@@ -278,14 +279,16 @@
         <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="164"/>
-        <location filename="../src/mainwindow.cpp" line="1176"/>
+        <location filename="../src/mainwindow.cpp" line="226"/>
+        <location filename="../src/mainwindow.cpp" line="1415"/>
+        <location filename="../src/mainwindow.cpp" line="1417"/>
         <source>Failed to verify %1, please enter password to unlock</source>
         <translation>验证%1失败,请输入密码解锁</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="168"/>
-        <location filename="../src/mainwindow.cpp" line="1178"/>
+        <location filename="../src/mainwindow.cpp" line="231"/>
+        <location filename="../src/mainwindow.cpp" line="233"/>
+        <location filename="../src/mainwindow.cpp" line="1419"/>
         <source>Unable to verify %1, please enter password to unlock</source>
         <translation>无法验证%1,请输入密码解锁</translation>
     </message>
@@ -294,67 +297,74 @@
         <translation type="vanished">网络异常</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="517"/>
+        <location filename="../src/mainwindow.cpp" line="671"/>
         <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
         <translation>一个程序正试图执行一个需要特权的动作,要求授权以执行该动作。</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="576"/>
+        <location filename="../src/mainwindow.cpp" line="108"/>
+        <location filename="../src/mainwindow.cpp" line="729"/>
         <source>Input Password</source>
         <translation>输入密码</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="104"/>
+        <location filename="../src/mainwindow.cpp" line="105"/>
         <source>Insert the ukey into the USB port</source>
         <translation>请将安全密钥插入USB端口</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="106"/>
+        <location filename="../src/mainwindow.cpp" line="107"/>
         <source>Enter the ukey password</source>
         <translation>输入安全密钥密码</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="764"/>
+        <location filename="../src/mainwindow.cpp" line="783"/>
         <source>hours left</source>
         <translation>小时后解锁</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="631"/>
+        <location filename="../src/mainwindow.cpp" line="787"/>
         <source>minutes left</source>
         <translation>分钟后解锁</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="635"/>
+        <location filename="../src/mainwindow.cpp" line="791"/>
         <source>seconds left</source>
         <translation>秒后解锁</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="1193"/>
+        <location filename="../src/mainwindow.cpp" line="880"/>
+        <location filename="../src/mainwindow.cpp" line="888"/>
+        <source>Input your password to authentication</source>
+        <translation>输入密码以授权</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1434"/>
         <source>Verify face recognition or enter password to unlock</source>
         <translation>验证人脸识别或输入密码解锁</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="1198"/>
+        <location filename="../src/mainwindow.cpp" line="1439"/>
         <source>Press fingerprint or enter password to unlock</source>
         <translation>按压指纹或输入密码解锁</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="1203"/>
+        <location filename="../src/mainwindow.cpp" line="1444"/>
         <source>Verify voiceprint or enter password to unlock</source>
         <translation>验证声纹或输入密码解锁</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="1208"/>
+        <location filename="../src/mainwindow.cpp" line="1449"/>
         <source>Verify finger vein or enter password to unlock</source>
         <translation>验证指静脉或输入密码解锁</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="1213"/>
+        <location filename="../src/mainwindow.cpp" line="1454"/>
         <source>Verify iris or enter password to unlock</source>
         <translation>验证虹膜或输入密码解锁</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="1218"/>
+        <location filename="../src/mainwindow.cpp" line="1459"/>
         <source>Use the bound wechat scanning code or enter the password to unlock</source>
         <translation>使用绑定的微信扫码或输入密码解锁</translation>
     </message>
@@ -363,10 +373,10 @@
         <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="623"/>
-        <location filename="../src/mainwindow.cpp" line="627"/>
-        <location filename="../src/mainwindow.cpp" line="631"/>
-        <location filename="../src/mainwindow.cpp" line="635"/>
+        <location filename="../src/mainwindow.cpp" line="779"/>
+        <location filename="../src/mainwindow.cpp" line="783"/>
+        <location filename="../src/mainwindow.cpp" line="787"/>
+        <location filename="../src/mainwindow.cpp" line="791"/>
         <source>Account locked,</source>
         <translation>账户已锁定,</translation>
     </message>
@@ -383,12 +393,12 @@
         <translation>有另外一个客户端正在认证,请稍后重试。</translation>
     </message>
     <message>
-        <location filename="../src/PolkitListener.cpp" line="257"/>
+        <location filename="../src/PolkitListener.cpp" line="265"/>
         <source>Authentication failure, please try again.</source>
         <translation>认证失败,请重试。</translation>
     </message>
     <message>
-        <location filename="../src/PolkitListener.cpp" line="264"/>
+        <location filename="../src/PolkitListener.cpp" line="272"/>
         <source>Password input error!</source>
         <translation>密码输入错误!</translation>
     </message>
diff -Nru ukui-biometric-auth-4.10.0.0/polkit-agent/i18n_ts/zh_HK.ts ukui-biometric-auth-4.20.0.0/polkit-agent/i18n_ts/zh_HK.ts
--- ukui-biometric-auth-4.10.0.0/polkit-agent/i18n_ts/zh_HK.ts	1970-01-01 08:00:00.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/polkit-agent/i18n_ts/zh_HK.ts	2024-09-23 19:22:29.000000000 +0800
@@ -0,0 +1,441 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="zh_Hant">
+<context>
+    <name>BioAuthWidget</name>
+    <message>
+        <source>Retry</source>
+        <translation type="obsolete">重试</translation>
+    </message>
+    <message>
+        <source>%1 too many unsuccessful attempts,please enter password.</source>
+        <translation type="obsolete">%1验证失败达最大次数,请使用密码登录</translation>
+    </message>
+    <message>
+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
+        <translation type="obsolete">%1认证失败,还剩%2次尝试机会</translation>
+    </message>
+    <message>
+        <source>Please use wechat to scan the code</source>
+        <translation type="vanished">请使用微信扫码</translation>
+    </message>
+</context>
+<context>
+    <name>BioDevices</name>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="obsolete">指纹</translation>
+    </message>
+    <message>
+        <source>FingerVein</source>
+        <translation type="obsolete">指静脉</translation>
+    </message>
+    <message>
+        <source>Iris</source>
+        <translation type="obsolete">虹膜</translation>
+    </message>
+    <message>
+        <source>Face</source>
+        <translation type="obsolete">人脸</translation>
+    </message>
+    <message>
+        <source>VoicePrint</source>
+        <translation type="obsolete">声纹</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+    <message>
+        <source>QRCode</source>
+        <translation type="vanished">二维码</translation>
+    </message>
+</context>
+<context>
+    <name>LoginOptionsWidget</name>
+    <message>
+        <source>Login Options</source>
+        <translation type="vanished">登录选项</translation>
+    </message>
+    <message>
+        <source>Wechat</source>
+        <translation type="vanished">微信</translation>
+    </message>
+</context>
+<context>
+    <name>MainWindow</name>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="66"/>
+        <source>Authentication</source>
+        <translation>授權</translation>
+    </message>
+    <message>
+        <source>Fingerprint authentication failed, you still have %1 verification opportunities</source>
+        <translation type="vanished">指纹验证失败,您还有%1次尝试机会</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.ui" line="26"/>
+        <source>Form</source>
+        <translation></translation>
+    </message>
+    <message>
+        <source>More</source>
+        <translation type="obsolete">更多</translation>
+    </message>
+    <message>
+        <source>Restart</source>
+        <translation type="obsolete">重新开始</translation>
+    </message>
+    <message>
+        <source>Password</source>
+        <translation type="vanished">密码</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.ui" line="409"/>
+        <location filename="../src/mainwindow.cpp" line="1075"/>
+        <location filename="../src/mainwindow.cpp" line="1143"/>
+        <source>Biometric</source>
+        <translation>使用生物識別</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.ui" line="480"/>
+        <source>use password</source>
+        <translation>使用密碼驗證</translation>
+    </message>
+    <message>
+        <source>DeviceType:</source>
+        <translation type="obsolete">设备类型:</translation>
+    </message>
+    <message>
+        <source>Back</source>
+        <translation type="obsolete">返回</translation>
+    </message>
+    <message>
+        <source>Details</source>
+        <translation type="vanished">详细</translation>
+    </message>
+    <message>
+        <source>Action Id:</source>
+        <translation type="obsolete">动作:</translation>
+    </message>
+    <message>
+        <source>Description:</source>
+        <translation type="vanished">描述:</translation>
+    </message>
+    <message>
+        <source>Polkit.subject-pid:</source>
+        <translation type="vanished">Polkit.subject-pid:</translation>
+    </message>
+    <message>
+        <source>Retry</source>
+        <translation type="obsolete">重试</translation>
+    </message>
+    <message>
+        <source>Device types:</source>
+        <translation type="obsolete">设备类型:</translation>
+    </message>
+    <message>
+        <source>Vendor:</source>
+        <translation type="vanished">发行商:</translation>
+    </message>
+    <message>
+        <source>Action:</source>
+        <translation type="vanished">动作:</translation>
+    </message>
+    <message>
+        <source>Polkit.caller-pid:</source>
+        <translation type="vanished">Polkit.caller-pid:</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.ui" line="441"/>
+        <location filename="../src/mainwindow.cpp" line="1077"/>
+        <source>Cancel</source>
+        <translation>取消</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.ui" line="460"/>
+        <location filename="../src/mainwindow.cpp" line="1073"/>
+        <source>Authenticate</source>
+        <translation>授權</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1079"/>
+        <location filename="../src/mainwindow.cpp" line="1183"/>
+        <source>Use password</source>
+        <translation>使用密碼驗證</translation>
+    </message>
+    <message>
+        <source>Auth</source>
+        <translation type="obsolete">授权</translation>
+    </message>
+    <message>
+        <source>Too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">指纹验证失败达最大次数,请使用密码解锁</translation>
+    </message>
+    <message>
+        <source>%1 authentication failure,there are still %2 remaining opportunities</source>
+        <translation type="vanished">%1认证失败,还剩%2次尝试机会</translation>
+    </message>
+    <message>
+        <source>%1 too many unsuccessful attempts,please enter password.</source>
+        <translation type="vanished">%1验证失败达最大次数,请使用密码登录</translation>
+    </message>
+    <message>
+        <source>in authentication, please wait...</source>
+        <translation type="vanished">认证中,请稍等...</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1219"/>
+        <location filename="../src/mainwindow.cpp" line="1292"/>
+        <location filename="../src/mainwindow.cpp" line="1293"/>
+        <source>Please try again in %1 minutes.</source>
+        <translation>請%1分鐘后再試</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1230"/>
+        <location filename="../src/mainwindow.cpp" line="1302"/>
+        <location filename="../src/mainwindow.cpp" line="1303"/>
+        <source>Please try again in %1 seconds.</source>
+        <translation>請%1秒後再試</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1240"/>
+        <location filename="../src/mainwindow.cpp" line="1241"/>
+        <location filename="../src/mainwindow.cpp" line="1311"/>
+        <location filename="../src/mainwindow.cpp" line="1312"/>
+        <source>Account locked permanently.</source>
+        <translation>帳號已被永久鎖定</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="834"/>
+        <location filename="../src/mainwindow.cpp" line="835"/>
+        <source>Password cannot be empty</source>
+        <translation>密碼不能為空</translation>
+    </message>
+    <message>
+        <source>Failed to verify %1, please enter password.</source>
+        <translation type="vanished">验证%1失败,请输入密码.</translation>
+    </message>
+    <message>
+        <source>Unable to verify %1, please enter password.</source>
+        <translation type="vanished">无法验证%1,请输入密码.</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="242"/>
+        <location filename="../src/mainwindow.cpp" line="246"/>
+        <source>Failed to verify %1, you still have %2 verification opportunities</source>
+        <translation>驗證%1失敗,您還有%2次嘗試機會</translation>
+    </message>
+    <message>
+        <source>An application is attempting to perform an action that requires privileges. Authentication is required to perform this action.</source>
+        <translation type="vanished">一个程序正试图执行一个需要特权的动作。要求授权以执行该动作。</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="731"/>
+        <source>Password: </source>
+        <translation>密碼: </translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="335"/>
+        <source>Please enter your password or enroll your fingerprint </source>
+        <translation>請輸入密碼或者錄入指紋 </translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="259"/>
+        <source>Abnormal network</source>
+        <translation>網路異常</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="665"/>
+        <source>This operation requires the administrator&apos;s authorization. Please enter your password to allow this operation.</source>
+        <translation>本次操作需要通過管理員的授權才能繼續執行,請輸入密碼以允許本次操作。</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="733"/>
+        <source>_Password: </source>
+        <translation>密碼: </translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="735"/>
+        <source>_Password:</source>
+        <translation>密碼:</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="850"/>
+        <source>Authentication failed, please try again.</source>
+        <translation>認證失敗,請重試。</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="779"/>
+        <source>days left</source>
+        <translation>天后解鎖</translation>
+    </message>
+    <message>
+        <source>Biometric/code scan authentication failed too many times, please enter the password.</source>
+        <translation type="vanished">生物/扫码验证失败达最大次数,请使用密码解锁.</translation>
+    </message>
+    <message>
+        <source>Bioauth/code scan authentication failed, you still have %1 verification opportunities</source>
+        <translation type="vanished">生物/扫码验证失败,您还有%1次尝试机会</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="226"/>
+        <location filename="../src/mainwindow.cpp" line="1415"/>
+        <location filename="../src/mainwindow.cpp" line="1417"/>
+        <source>Failed to verify %1, please enter password to unlock</source>
+        <translation>驗證%1失敗,請輸入密碼解鎖</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="231"/>
+        <location filename="../src/mainwindow.cpp" line="233"/>
+        <location filename="../src/mainwindow.cpp" line="1419"/>
+        <source>Unable to verify %1, please enter password to unlock</source>
+        <translation>無法驗證%1,請輸入密碼解鎖</translation>
+    </message>
+    <message>
+        <source>NET Exception</source>
+        <translation type="vanished">网络异常</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="671"/>
+        <source>A program is attempting to perform an action that requires privileges.It requires authorization to perform the action.</source>
+        <translation>一個程式正試圖執行一個需要特權的動作,要求授權以執行該動作。</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="108"/>
+        <location filename="../src/mainwindow.cpp" line="729"/>
+        <source>Input Password</source>
+        <translation>輸入密碼</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="105"/>
+        <source>Insert the ukey into the USB port</source>
+        <translation>請將安全金鑰插入USB埠</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="107"/>
+        <source>Enter the ukey password</source>
+        <translation>輸入安全金鑰密碼</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="783"/>
+        <source>hours left</source>
+        <translation>小時後解鎖</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="787"/>
+        <source>minutes left</source>
+        <translation>分鐘後解鎖</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="791"/>
+        <source>seconds left</source>
+        <translation>秒後解鎖</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="880"/>
+        <location filename="../src/mainwindow.cpp" line="888"/>
+        <source>Input your password to authentication</source>
+        <translation>輸入密碼以認證</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1434"/>
+        <source>Verify face recognition or enter password to unlock</source>
+        <translation>驗證人臉識別或輸入密碼解鎖</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1439"/>
+        <source>Press fingerprint or enter password to unlock</source>
+        <translation>按壓指紋或輸入密碼解鎖</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1444"/>
+        <source>Verify voiceprint or enter password to unlock</source>
+        <translation>驗證聲紋或輸入密碼解鎖</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1449"/>
+        <source>Verify finger vein or enter password to unlock</source>
+        <translation>驗證指靜脈或輸入密碼解鎖</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1454"/>
+        <source>Verify iris or enter password to unlock</source>
+        <translation>驗證虹膜或輸入密碼解鎖</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="1459"/>
+        <source>Use the bound wechat scanning code or enter the password to unlock</source>
+        <translation>使用綁定的微信掃碼或輸入密碼解鎖</translation>
+    </message>
+    <message>
+        <source>Use the bound wechat scanning code or enter the password to log in</source>
+        <translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="779"/>
+        <location filename="../src/mainwindow.cpp" line="783"/>
+        <location filename="../src/mainwindow.cpp" line="787"/>
+        <location filename="../src/mainwindow.cpp" line="791"/>
+        <source>Account locked,</source>
+        <translation>帳戶已鎖定,</translation>
+    </message>
+    <message>
+        <source>Authentication failed, please try again</source>
+        <translation type="obsolete">认证失败,请重试</translation>
+    </message>
+</context>
+<context>
+    <name>PolkitListener</name>
+    <message>
+        <location filename="../src/PolkitListener.cpp" line="88"/>
+        <source>Another client is already authenticating, please try again later.</source>
+        <translation>有另外一個用戶端正在認證,請稍後重試。</translation>
+    </message>
+    <message>
+        <location filename="../src/PolkitListener.cpp" line="265"/>
+        <source>Authentication failure, please try again.</source>
+        <translation>認證失敗,請重試。</translation>
+    </message>
+    <message>
+        <location filename="../src/PolkitListener.cpp" line="272"/>
+        <source>Password input error!</source>
+        <translation>密碼輸入錯誤!</translation>
+    </message>
+    <message>
+        <source>Account locked %1 minutes due to %2 fail attempts</source>
+        <translation type="vanished">账户锁定%1分钟由于%2次错误尝试</translation>
+    </message>
+    <message>
+        <source>Authentication failure,there are still %1 remaining opportunities</source>
+        <translation type="vanished">认证失败,还剩余%1次尝试机会</translation>
+    </message>
+</context>
+<context>
+    <name>QObject</name>
+    <message>
+        <source>FingerPrint</source>
+        <translation type="obsolete">指纹</translation>
+    </message>
+    <message>
+        <source>FingerVein</source>
+        <translation type="obsolete">指静脉</translation>
+    </message>
+    <message>
+        <source>Iris</source>
+        <translation type="obsolete">虹膜</translation>
+    </message>
+    <message>
+        <source>Face</source>
+        <translation type="obsolete">人脸</translation>
+    </message>
+    <message>
+        <source>VoicePrint</source>
+        <translation type="obsolete">声纹</translation>
+    </message>
+    <message>
+        <source>Cancel</source>
+        <translation type="obsolete">取消</translation>
+    </message>
+</context>
+</TS>
diff -Nru ukui-biometric-auth-4.10.0.0/polkit-agent/src/PolkitAgent.cpp ukui-biometric-auth-4.20.0.0/polkit-agent/src/PolkitAgent.cpp
--- ukui-biometric-auth-4.10.0.0/polkit-agent/src/PolkitAgent.cpp	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/polkit-agent/src/PolkitAgent.cpp	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff -Nru ukui-biometric-auth-4.10.0.0/polkit-agent/src/PolkitListener.cpp ukui-biometric-auth-4.20.0.0/polkit-agent/src/PolkitListener.cpp
--- ukui-biometric-auth-4.10.0.0/polkit-agent/src/PolkitListener.cpp	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/polkit-agent/src/PolkitListener.cpp	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -31,11 +31,13 @@
 #include <QApplication>
 #include <QScreen>
 #include <fcntl.h>
+#include <kysdk/kysdk-system/libkysysinfo.h>
 
 #include "PolkitListener.h"
 #include "mainwindow.h"
 #include "generic.h"
 #include <libkysysinfo.h>
+#include "windowmanager/windowmanager.h"
 
 PolkitListener::PolkitListener(QObject *parent)
     : Listener(parent),
@@ -146,12 +148,12 @@
 //    hints.functions = MWM_FUNC_ALL;
 //    hints.decorations = MWM_DECOR_BORDER;
 //    XAtomHelper::getInstance()->setWindowMotifHint(mainWindow->winId(), hints);
-    mainWindow->setWindowFlags(Qt::WindowCloseButtonHint | Qt::WindowStaysOnTopHint);
     mainWindow->setIcon(iconName);
     mainWindow->setCurProject(m_isMavis);
     mainWindow->setHeader(message);
     mainWindow->setUsers(usersList);
     mainWindow->setEditInputMethod(m_isSupportTableMode);
+    mainWindow->setFixedSize(420, 297);
     /*
     mainWindow->setDetails(subjectPid, callerPid,
                            actionDesc.actionId(),
@@ -161,15 +163,22 @@
     */
     /* set the position of the mainwindow */
     QPoint pos = QCursor::pos();
-    for(auto screen : QGuiApplication::screens())
-    {
-        if(screen->geometry().contains(pos))
-        {
-            mainWindow->move(screen->geometry().left() + (screen->geometry().width() - mainWindow->width()) / 2,
-                             screen->geometry().top() + (screen->geometry().height() - mainWindow->height()) / 2);
+    QRect desScreenGeometry;
+    for (QScreen *screen : qApp->screens()) {
+        if (screen->geometry().contains(pos)) {
+            desScreenGeometry = screen->geometry();
         }
     }
 
+    if (desScreenGeometry.isEmpty()) {
+        desScreenGeometry = qApp->primaryScreen()->geometry();
+    }
+//    mainWindow->move(desScreenGeometry.x() + (desScreenGeometry.width() - mainWindow->width())/2,
+//               desScreenGeometry.y() + (desScreenGeometry.height() - mainWindow->height())/2);
+//    qDebug()<<"MoveWindow to center1:"<<desScreenGeometry<<","<<mainWindow->geometry()<<QGuiApplication::platformName();;
+
+
+
     connect(mainWindow, &MainWindow::accept, this, &PolkitListener::onResponse);
     connect(mainWindow, &MainWindow::canceled, this, [&]{
         wasCancelled = true;
@@ -356,6 +365,25 @@
         mainWindow->switchAuthMode(MainWindow::PASSWORD);
         mainWindow->setPrompt(prompt, echo);
     }
+    mainWindow->setFixedSize(mainWindow->width(),mainWindow->height());
+
+    /* set the position of the mainwindow */
+    QPoint pos = QCursor::pos();
+    QRect desScreenGeometry;
+    for (QScreen *screen : qApp->screens()) {
+        if (screen->geometry().contains(pos)) {
+            desScreenGeometry = screen->geometry();
+        }
+    }
+
+    if (desScreenGeometry.isEmpty()) {
+        desScreenGeometry = qApp->primaryScreen()->geometry();
+    }
+
+    kdk::WindowManager::setGeometry(mainWindow->windowHandle(),
+                                    QRect(desScreenGeometry.left() + (desScreenGeometry.width() - mainWindow->width())/2,
+                                          desScreenGeometry.top() + (desScreenGeometry.height() - mainWindow->height())/2,
+                                          mainWindow->width(), mainWindow->height()));
 
     mainWindow->show();
     // 重新开始认证不调整窗口位置
diff -Nru ukui-biometric-auth-4.10.0.0/polkit-agent/src/PolkitListener.h ukui-biometric-auth-4.20.0.0/polkit-agent/src/PolkitListener.h
--- ukui-biometric-auth-4.10.0.0/polkit-agent/src/PolkitListener.h	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/polkit-agent/src/PolkitListener.h	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff -Nru ukui-biometric-auth-4.10.0.0/polkit-agent/src/kalabel.cpp ukui-biometric-auth-4.20.0.0/polkit-agent/src/kalabel.cpp
--- ukui-biometric-auth-4.10.0.0/polkit-agent/src/kalabel.cpp	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/polkit-agent/src/kalabel.cpp	2024-09-23 19:22:29.000000000 +0800
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *
+**/
 #include "kalabel.h"
 
 
diff -Nru ukui-biometric-auth-4.10.0.0/polkit-agent/src/kalabel.h ukui-biometric-auth-4.20.0.0/polkit-agent/src/kalabel.h
--- ukui-biometric-auth-4.10.0.0/polkit-agent/src/kalabel.h	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/polkit-agent/src/kalabel.h	2024-09-23 19:22:29.000000000 +0800
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *
+**/
 #ifndef KALABEL_H
 #define KALABEL_H
 
diff -Nru ukui-biometric-auth-4.10.0.0/polkit-agent/src/mainwindow.cpp ukui-biometric-auth-4.20.0.0/polkit-agent/src/mainwindow.cpp
--- ukui-biometric-auth-4.10.0.0/polkit-agent/src/mainwindow.cpp	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/polkit-agent/src/mainwindow.cpp	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -61,9 +61,9 @@
     m_nCurLockMin(0),
     isbioSuccess(false)
 {
+    setWindowFlags(Qt::Tool | Qt::WindowCloseButtonHint | Qt::WindowStaysOnTopHint);
     ui->setupUi(this);
     setWindowTitle(tr("Authentication"));
-    setWindowFlags(Qt::WindowCloseButtonHint | Qt::WindowStaysOnTopHint);
 
     pam_tally_init(); //
 
@@ -97,6 +97,7 @@
     ui->titleTipLayout->addWidget(m_labelTip);
     ui->loginOptionsLayout->setAlignment(Qt::AlignTop|Qt::AlignCenter);
     ui->loginOptionsLayout->addWidget(m_loginOptsWidget);
+    ui->loadingUkeyWidget->adjustSize();
     ui->loadingUkeyWidget->hide();
     ui->widgetUkeyAuth->hide();
     ui->loadingUkeyBtn->setAttribute(Qt::WA_TransparentForMouseEvents, true);
@@ -105,14 +106,12 @@
     ui->loadingUkeyLbl->setAlignment(Qt::AlignTop|Qt::AlignHCenter);
     ui->ukeyTipLbl->setText(tr("Enter the ukey password"));
     ui->ukeyPassword->setPlaceholderText(tr("Input Password"));
-    ui->loadingUkeyWidget->adjustSize();
     maxFailedTimes = bioDevices.getFailedTimes();
     isHiddenSwitchButton = bioDevices.GetHiddenSwitchButton();
 
     connect(m_loginOptsWidget, &LoginOptionsWidget::optionSelected,
             this, [&](unsigned uCurLoginOptType, const DeviceInfoPtr &deviceInfo){
-
-	isLoadingUkey = false;
+        isLoadingUkey = false;
 
         if(uCurLoginOptType == LOGINOPT_TYPE_GENERAL_UKEY){
             stopLoadingUkey();
@@ -142,7 +141,7 @@
 
         if (uCurLoginOptType == LOGINOPT_TYPE_GENERAL_UKEY && !deviceInfo){
             isLoadingUkey = true;
-	    startLoadingUkey();
+            startLoadingUkey();
             m_loginOptsWidget->updateUkeyUIStatus(LOGINOPT_TYPE_GENERAL_UKEY);
         }else if(uCurLoginOptType == LOGINOPT_TYPE_GENERAL_UKEY && deviceInfo){
             stopLoadingUkey();
@@ -157,8 +156,8 @@
             return ;
         }
 
-	if(m_bioTimer)
-	    m_bioTimer->stop();
+        if(m_bioTimer)
+            m_bioTimer->stop();
 
         m_deviceInfo = deviceInfo;
         switchLoginOptType(uCurLoginOptType);
@@ -365,24 +364,27 @@
 
 void MainWindow::startLoadingUkey()
 {
+    m_loadingPixmap = QIcon::fromTheme("ukui-loading-0-symbolic").pixmap(27,27);
+    ui->loadingUkeyBtn->setIcon(m_loadingPixmap);
+    ui->loadingUkeyBtn->setIconSize(QSize(27, 27));
+
+    ui->loadingUkeyWidget->adjustSize();
+    ui->cmbUsers->hide();
+    ui->widgetUkeyAuth->hide();
+    ui->lePassword->hide();
+
+    ui->widgetPasswdAuth->hide();
+
     isLoadingUkey = true;
     ui->loadingUkeyWidget->show();
+
     if(!m_loadingTimer)
     {
         m_loadingTimer = new QTimer(this);
         m_loadingTimer->setInterval(150);
         connect(m_loadingTimer, &QTimer::timeout, this, &MainWindow::updateLoadingPixmap);
     }
-
-    m_loadingPixmap = QIcon::fromTheme("ukui-loading-0-symbolic").pixmap(27,27);
-    ui->loadingUkeyBtn->setIcon(m_loadingPixmap);
-    ui->loadingUkeyBtn->setIconSize(QSize(27, 27));
     m_loadingTimer->start();
-    ui->loadingUkeyWidget->adjustSize();
-    ui->cmbUsers->hide();
-    ui->widgetUkeyAuth->hide();
-    ui->lePassword->hide();
-    ui->widgetPasswdAuth->hide();
 }
 
 void MainWindow::stopLoadingUkey()
@@ -391,9 +393,10 @@
     if(m_loadingTimer){
         m_loadingTimer->stop();
     }
+
     ui->loadingUkeyWidget->hide();
     //ui->cmbUsers->show();
-    ui->widgetUkeyAuth->show();
+    //ui->widgetUkeyAuth->show();
 }
 
 void MainWindow::updateLoadingPixmap()
@@ -874,6 +877,7 @@
     int count = m_loginOptsWidget->getLoginOptCount();
     enableBioAuth  = count > 0;
     if (count < 1) {
+        setLoginTypeTip(tr("Input your password to authentication"));
         m_loginOptsWidget->hide();
     } else {
         m_loginOptsWidget->show();
@@ -881,6 +885,7 @@
     }
 
     if(m_loginOptsWidget->getHasUkeyOptions()){
+        setLoginTypeTip(tr("Input your password to authentication"));
         m_loginOptsWidget->show();
     }
     
@@ -1074,6 +1079,7 @@
     ui->returnButton->setText(tr("Use password"));
     ui->btnLoading->setDisabled(true);
     ui->returnButton->adjustSize();
+    m_labelTip->adjustSize();
     if(is_Mavis){
         ui->cmbUsers->setFixedHeight(48);
         ui->lePassword->setFixedHeight(48);
@@ -1084,8 +1090,7 @@
     switch(mode){
     case PASSWORD:
     {
-        setMinimumWidth(420);
-        setMaximumWidth(420);
+        setFixedWidth(420);
 
         if (m_deviceInfo && m_loginOptsWidget->findDeviceById(m_deviceInfo->device_id)) {
             switchLoginOptType(m_loginOptsWidget->convertDeviceType(m_deviceInfo->biotype));
@@ -1121,18 +1126,16 @@
                     + ui->cmbUsers->height() + ui->lePassword->height() + ui->lblMessage->height()
                     + ui->btnAuth->height();
         }
-        if (m_loginOptsWidget->isHidden()) {
-            height -= 20 ;
-        }
+//        if (m_loginOptsWidget->isHidden()) {
+//            height = height - m_labelTip->height() - 10;
+//        }
 
         unsigned uOptsWidgetHeight = m_loginOptsWidget->height();
         if (m_loginOptsWidget->isHidden()) {
             uOptsWidgetHeight = 0;
-            height -= 20 ;
+            height = height + m_labelTip->height() - 10;
         }
-        setMinimumHeight(height + uOptsWidgetHeight + 10);
-        setMaximumHeight(height + uOptsWidgetHeight + 10);
-
+        setFixedHeight(height + uOptsWidgetHeight + 10);
 
         //m_loginOptsWidget->updateUIStatus();
         ui->btnBioAuth->setStyleSheet("QPushButton{font-size:14px;}QPushButton:hover{border:none;color:#3E6CE5;}QPushButton:pressed{border:none;}");
@@ -1163,14 +1166,11 @@
         break;
 
     case BIOMETRIC:
-        setMinimumWidth(420);
-        setMaximumWidth(420);
+        setFixedWidth(420);
         if(m_loginOptsWidget->getLoginOptCount() <= 1){
-            setMinimumHeight(392+ui->cmbUsers->height()+ui->lblHeader->height());
-            setMaximumHeight(392+ui->cmbUsers->height()+ui->lblHeader->height());
+            setFixedHeight(392+ui->cmbUsers->height()+ui->lblHeader->height());
         } else {
-            setMinimumHeight(482+ui->cmbUsers->height()+ui->lblHeader->height());
-            setMaximumHeight(482+ui->cmbUsers->height()+ui->lblHeader->height());
+            setFixedHeight(482+ui->cmbUsers->height()+ui->lblHeader->height());
         }
 
         ui->btnCancel->hide();
@@ -1484,11 +1484,15 @@
         m_labelTip->hide();
     } else {
         QPalette pe;
-        if(no_changes)
+        if(no_changes) {
             pe.setColor(QPalette::WindowText,Qt::red);
-        else
-            pe.setColor(QPalette::WindowText,QColor(55, 144, 250, 255));
-        m_labelTip->setPalette(pe);
+            m_labelTip->setPalette(pe);
+        } else {
+            QColor color = palette().color(QPalette::WindowText);
+            QPalette pal(this->palette());
+            pal.setColor(QPalette::WindowText,QColor(color));
+            m_labelTip->setPalette(pal);
+        }
         m_labelTip->setText(m_strLoginTypeTip);
         m_labelTip->show();
     }
@@ -1499,7 +1503,7 @@
     if (m_deviceInfo) {
         if(m_deviceInfo->biotype == LOGINOPT_TYPE_GENERAL_UKEY){
 
-    }else{
+        }else{
             m_loginOptsWidget->startAuth(m_deviceInfo, getUid(userName));
         }
         switchLoginOptType(m_loginOptsWidget->convertDeviceType(m_deviceInfo->biotype));
@@ -1589,17 +1593,14 @@
                 + ui->btnAuth->height();
     }
     if (m_loginOptsWidget->isHidden()) {
-        height -= 20 ;
+        height = height + m_labelTip->height() - 10;
     }
 
     if(uLoginOptType == LOGINOPT_TYPE_GENERAL_UKEY){
-
-        setMinimumHeight(height + uOptsWidgetHeight + 10);
-        setMaximumHeight(height + uOptsWidgetHeight + 10);
+        setLoginTypeTip("");
+        setFixedSize(width(), height + uOptsWidgetHeight + 10);
     }else{
-
-        setMinimumHeight(height + uOptsWidgetHeight);
-        setMaximumHeight(height + uOptsWidgetHeight);
+        setFixedSize(width(), height + uOptsWidgetHeight);
     }
 }
 
diff -Nru ukui-biometric-auth-4.10.0.0/polkit-agent/src/mainwindow.h ukui-biometric-auth-4.20.0.0/polkit-agent/src/mainwindow.h
--- ukui-biometric-auth-4.10.0.0/polkit-agent/src/mainwindow.h	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/polkit-agent/src/mainwindow.h	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff -Nru ukui-biometric-auth-4.10.0.0/polkit-agent/src/mainwindow.ui ukui-biometric-auth-4.20.0.0/polkit-agent/src/mainwindow.ui
--- ukui-biometric-auth-4.10.0.0/polkit-agent/src/mainwindow.ui	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/polkit-agent/src/mainwindow.ui	2024-09-23 19:22:29.000000000 +0800
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>459</width>
-    <height>547</height>
+    <height>646</height>
    </rect>
   </property>
   <property name="sizePolicy">
@@ -120,6 +120,9 @@
      </item>
      <item row="4" column="1">
       <layout class="QHBoxLayout" name="titleTipLayout">
+       <property name="topMargin">
+        <number>8</number>
+       </property>
        <property name="bottomMargin">
         <number>8</number>
        </property>
@@ -381,19 +384,6 @@
     </layout>
    </item>
    <item>
-    <spacer name="verticalSpacer">
-     <property name="orientation">
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeHint" stdset="0">
-      <size>
-       <width>20</width>
-       <height>40</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-   <item>
     <layout class="QHBoxLayout" name="horizontalLayout_7">
      <property name="spacing">
       <number>16</number>
@@ -410,7 +400,7 @@
      <item>
       <widget class="QPushButton" name="btnBioAuth">
        <property name="cursor">
-        <cursorShape>PointingHandCursor</cursorShape>
+        <cursorShape>ArrowCursor</cursorShape>
        </property>
        <property name="styleSheet">
         <string notr="true"/>
@@ -442,7 +432,7 @@
         </sizepolicy>
        </property>
        <property name="cursor">
-        <cursorShape>PointingHandCursor</cursorShape>
+        <cursorShape>ArrowCursor</cursorShape>
        </property>
        <property name="styleSheet">
         <string notr="true"/>
@@ -461,7 +451,7 @@
         </sizepolicy>
        </property>
        <property name="cursor">
-        <cursorShape>PointingHandCursor</cursorShape>
+        <cursorShape>ArrowCursor</cursorShape>
        </property>
        <property name="styleSheet">
         <string notr="true"/>
diff -Nru ukui-biometric-auth-4.10.0.0/polkit-agent/src/modeButton.cpp ukui-biometric-auth-4.20.0.0/polkit-agent/src/modeButton.cpp
--- ukui-biometric-auth-4.10.0.0/polkit-agent/src/modeButton.cpp	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/polkit-agent/src/modeButton.cpp	2024-09-23 19:22:29.000000000 +0800
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *
+**/
 #include "modeButton.h"
 
 #include <QIcon>
@@ -39,7 +56,7 @@
     setModeIcon();
     setFixedSize(QSize(24, 24));
     setModeIcon();
-    setCursor(Qt::PointingHandCursor);
+    setCursor(Qt::ArrowCursor);
     setStyleSheet("QPushButton::pressed{border:none;background-color:transparent}"
                                     "QPushButton::hover::!pressed{border:none;background-color:transparent}");
 
diff -Nru ukui-biometric-auth-4.10.0.0/polkit-agent/src/modeButton.h ukui-biometric-auth-4.20.0.0/polkit-agent/src/modeButton.h
--- ukui-biometric-auth-4.10.0.0/polkit-agent/src/modeButton.h	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/polkit-agent/src/modeButton.h	2024-09-23 19:22:29.000000000 +0800
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *
+**/
 #ifndef MODEBUTTON_H
 #define MODEBUTTON_H
 
diff -Nru ukui-biometric-auth-4.10.0.0/polkit-agent/src/pam-tally.c ukui-biometric-auth-4.20.0.0/polkit-agent/src/pam-tally.c
--- ukui-biometric-auth-4.10.0.0/polkit-agent/src/pam-tally.c	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/polkit-agent/src/pam-tally.c	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff -Nru ukui-biometric-auth-4.10.0.0/polkit-agent/src/pam-tally.h ukui-biometric-auth-4.20.0.0/polkit-agent/src/pam-tally.h
--- ukui-biometric-auth-4.10.0.0/polkit-agent/src/pam-tally.h	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/polkit-agent/src/pam-tally.h	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff -Nru ukui-biometric-auth-4.10.0.0/polkit-agent/src/sessionmanager.cpp ukui-biometric-auth-4.20.0.0/polkit-agent/src/sessionmanager.cpp
--- ukui-biometric-auth-4.10.0.0/polkit-agent/src/sessionmanager.cpp	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/polkit-agent/src/sessionmanager.cpp	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff -Nru ukui-biometric-auth-4.10.0.0/polkit-agent/src/sessionmanager.h ukui-biometric-auth-4.20.0.0/polkit-agent/src/sessionmanager.h
--- ukui-biometric-auth-4.10.0.0/polkit-agent/src/sessionmanager.h	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/polkit-agent/src/sessionmanager.h	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff -Nru ukui-biometric-auth-4.10.0.0/polkit-agent/src/types.h ukui-biometric-auth-4.20.0.0/polkit-agent/src/types.h
--- ukui-biometric-auth-4.10.0.0/polkit-agent/src/types.h	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/polkit-agent/src/types.h	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff -Nru ukui-biometric-auth-4.10.0.0/polkit-agent/src/users.cpp ukui-biometric-auth-4.20.0.0/polkit-agent/src/users.cpp
--- ukui-biometric-auth-4.10.0.0/polkit-agent/src/users.cpp	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/polkit-agent/src/users.cpp	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff -Nru ukui-biometric-auth-4.10.0.0/polkit-agent/src/users.h ukui-biometric-auth-4.20.0.0/polkit-agent/src/users.h
--- ukui-biometric-auth-4.10.0.0/polkit-agent/src/users.h	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/polkit-agent/src/users.h	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff -Nru ukui-biometric-auth-4.10.0.0/uniauth-backend/CMakeLists.txt ukui-biometric-auth-4.20.0.0/uniauth-backend/CMakeLists.txt
--- ukui-biometric-auth-4.10.0.0/uniauth-backend/CMakeLists.txt	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/uniauth-backend/CMakeLists.txt	2024-09-23 19:22:29.000000000 +0800
@@ -2,9 +2,12 @@
 
 set(CMAKE_AUTOMOC ON)
 
+pkg_check_modules(LIGHTDM-QT5-3 REQUIRED liblightdm-qt5-3)
+
 include_directories(
     ${Qt5Core_INCLUDE_DIRS}
     ${Qt5DBus_INCLUDE_DIRS}
+    ${LIGHTDM-QT5-3_INCLUDE_DIRS}
     )
 
 set(bin_SRCS
@@ -16,10 +19,15 @@
     src/serviceinterface.cpp
     src/servicemanager.h
     src/servicemanager.cpp
+    src/personalizeddata.h
+    src/CSingleton.h
+    src/personalizeddata.cpp
+    src/rsac.h
+    src/rsac.cpp
     )
 
 add_executable(uniauth-backend ${bin_SRCS})
-target_link_libraries(uniauth-backend Qt5::Core Qt5::DBus -lukui-log4qt)
+target_link_libraries(uniauth-backend Qt5::Core Qt5::DBus -lukui-log4qt ${LIGHTDM-QT5-3_LIBRARIES} -lcrypto)
 
 install(TARGETS uniauth-backend DESTINATION bin)
 install(FILES org.ukui.UniauthBackend.conf DESTINATION /etc/dbus-1/system.d/)
diff -Nru ukui-biometric-auth-4.10.0.0/uniauth-backend/src/CSingleton.h ukui-biometric-auth-4.20.0.0/uniauth-backend/src/CSingleton.h
--- ukui-biometric-auth-4.10.0.0/uniauth-backend/src/CSingleton.h	1970-01-01 08:00:00.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/uniauth-backend/src/CSingleton.h	2024-09-23 19:22:29.000000000 +0800
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *
+**/
+#ifndef CSINGLETON_H
+#define CSINGLETON_H
+
+
+template <typename T>
+class SingleTon
+{
+public:
+    // 创建单例实例
+    template<typename... Args>
+    static T* instance(Args&&... args)
+    {
+        if (m_pInstance == nullptr)
+        {
+            m_pInstance = new T(std::forward<Args>(args)...);
+        }
+
+        return m_pInstance;
+    }
+
+    // 获取单例
+    static T* getInstance()
+    {
+        return m_pInstance;
+    }
+
+    // 删除单例
+    static void destroyInstance()
+    {
+        delete m_pInstance;
+        m_pInstance = nullptr;
+    }
+
+private:
+    SingleTon();
+    virtual ~SingleTon();
+
+private:
+    static T* m_pInstance;
+};
+
+template <class T>
+T* SingleTon<T>::m_pInstance = nullptr;
+
+
+#endif
diff -Nru ukui-biometric-auth-4.10.0.0/uniauth-backend/src/biodeviceinfo.cpp ukui-biometric-auth-4.20.0.0/uniauth-backend/src/biodeviceinfo.cpp
--- ukui-biometric-auth-4.10.0.0/uniauth-backend/src/biodeviceinfo.cpp	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/uniauth-backend/src/biodeviceinfo.cpp	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2022 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff -Nru ukui-biometric-auth-4.10.0.0/uniauth-backend/src/biodeviceinfo.h ukui-biometric-auth-4.20.0.0/uniauth-backend/src/biodeviceinfo.h
--- ukui-biometric-auth-4.10.0.0/uniauth-backend/src/biodeviceinfo.h	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/uniauth-backend/src/biodeviceinfo.h	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2022 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -21,6 +21,7 @@
 #include <QDBusInterface>
 #include <QDBusArgument>
 #include <QDBusMetaType>
+#include <memory>
 
 struct DeviceInfo {
     int device_id;
@@ -52,6 +53,10 @@
 
 Q_DECLARE_METATYPE(DeviceInfo)
 Q_DECLARE_METATYPE(QList<QDBusVariant>)
+
+typedef std::shared_ptr<DeviceInfo> DeviceInfoPtr;
+typedef QList<DeviceInfoPtr> DeviceList;
+
 void registerCustomTypes();
 QDBusArgument &operator<<(QDBusArgument &argument, const DeviceInfo &deviceInfo);
 const QDBusArgument &operator>>(const QDBusArgument &argument, DeviceInfo &deviceInfo);
diff -Nru ukui-biometric-auth-4.10.0.0/uniauth-backend/src/main.cpp ukui-biometric-auth-4.20.0.0/uniauth-backend/src/main.cpp
--- ukui-biometric-auth-4.10.0.0/uniauth-backend/src/main.cpp	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/uniauth-backend/src/main.cpp	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2022 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -17,6 +17,7 @@
 **/
 #include <QCoreApplication>
 #include "serviceinterface.h"
+#include "personalizeddata.h"
 #include <ukui-log4qt.h>
 
 int main(int argc, char *argv[])
@@ -24,6 +25,8 @@
     initUkuiLog4qt("ukui-biometric-uniauth");
     QCoreApplication a(argc, argv);
 
+    KYLINUSERDATAMNG::instance();
+
     ServiceInterface serviveInterface;
     Q_UNUSED(serviveInterface);
 
diff -Nru ukui-biometric-auth-4.10.0.0/uniauth-backend/src/personalizeddata.cpp ukui-biometric-auth-4.20.0.0/uniauth-backend/src/personalizeddata.cpp
--- ukui-biometric-auth-4.10.0.0/uniauth-backend/src/personalizeddata.cpp	1970-01-01 08:00:00.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/uniauth-backend/src/personalizeddata.cpp	2024-09-23 19:22:29.000000000 +0800
@@ -0,0 +1,362 @@
+/*
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *
+**/
+#include "personalizeddata.h"
+
+#include <QJsonDocument>
+#include <QJsonObject>
+#include <QJsonValue>
+#include <QJsonParseError>
+#include <QJsonArray>
+#include <QFile>
+#include <QDate>
+#include <QTime>
+
+enum enum_operation
+{
+    enum_operation_update = 0,
+    enum_operation_add,
+    enum_operation_del,
+};
+
+PersonalizedData::PersonalizedData(QString user)
+{
+    KyInfo() << user;
+    m_user = user;
+    m_usd_conf_path = QString("/var/lib/lightdm-data/%1/usd/config/ukui-settings-daemon.settings").arg(m_user);
+    m_greeter_conf_path = QString("/var/lib/lightdm-data/%1/ukui-greeter.conf").arg(m_user);
+    m_file_watch = new QFileSystemWatcher();
+    connect(m_file_watch, &QFileSystemWatcher::fileChanged, this, &PersonalizedData::fileChanged);
+    this->__load_conf_ukuigreeterconf();
+    //无需读取usd配置
+    //this->__load_conf_usd_conf();
+
+}
+
+PersonalizedData::~PersonalizedData()
+{
+    KyInfo() << m_user;
+    if(0 != m_conf_TimerID)
+    {
+        this->killTimer(m_conf_TimerID);
+        m_conf_TimerID = 0;
+    }
+    if(nullptr != m_file_watch)
+    {
+        delete m_file_watch;
+        m_file_watch = nullptr;
+    }
+
+}
+
+void PersonalizedData::getJsonData(QJsonObject & json)
+{
+    json["user"] = m_user;
+    {
+        QJsonObject json_1;
+        json_1["dateType"] = m_dateType;
+        json_1["fontSize"] = m_fontSize;
+        json_1["timeType"] = m_timeType;
+        json_1["backgroundPath"] = m_backgroundPath;
+        json_1["color"] = m_color;
+        json["greeter"] = json_1;
+    }
+}
+
+QString PersonalizedData::getJsonData()
+{
+    QJsonObject json;
+    this->getJsonData(json);
+    json["operation"] = enum_operation_update;
+    QJsonDocument document;
+    document.setObject(json);
+    return document.toJson(QJsonDocument::Compact);
+}
+
+void PersonalizedData::fileChanged(const QString &path)
+{
+    KyInfo() << path;
+    if(m_greeter_conf_path == path)
+    {
+        m_greeter_conf_path_changed = true;
+    }
+    if(m_usd_conf_path == path)
+    {
+        m_usd_conf_path_changed = true;
+    }
+
+    if(0 != m_conf_TimerID)
+    {
+        this->killTimer(m_conf_TimerID);
+        m_conf_TimerID = 0;
+    }
+    m_conf_TimerID = this->startTimer(100);
+}
+
+void PersonalizedData::timerEvent(QTimerEvent *event)
+{
+    KyInfo() << m_file_watch->files();
+    if(event->timerId() == m_conf_TimerID)
+    {
+        this->killTimer(m_conf_TimerID);
+        m_conf_TimerID = 0;
+
+        if(m_greeter_conf_path_changed)
+        {
+            m_greeter_conf_path_changed = false;
+            this->__load_conf_ukuigreeterconf();
+        }
+        if(m_usd_conf_path_changed)
+        {
+            m_usd_conf_path_changed = false;
+            this->__load_conf_usd_conf();
+        }
+        emit KYLINUSERDATAMNG::getInstance()->conf_changed(this->getJsonData());
+    }
+}
+
+int PersonalizedData::__load_conf_ukuigreeterconf()
+{
+    KyInfo();
+    QSettings conf(m_greeter_conf_path, QSettings::IniFormat);
+    if(QSettings::NoError != conf.status())
+    {
+        KyWarning() << m_greeter_conf_path << conf.status();
+        return -1;
+    }
+
+    if(conf.childGroups().contains("Greeter"))
+    {
+        conf.beginGroup("Greeter");
+
+        if(conf.contains("dateType"))
+            m_dateType = conf.value("dateType", m_dateType).toString();
+
+        if(conf.contains("fontSize"))
+            m_fontSize = conf.value("fontSize", m_fontSize).toInt();
+
+        if(conf.contains("timeType"))
+            m_timeType = conf.value("timeType", m_timeType).toInt();
+
+        conf.endGroup();
+    }
+
+    if(conf.childGroups().contains("greeter"))
+    {
+        conf.beginGroup("greeter");
+
+        if(conf.contains("backgroundPath"))
+        {
+            m_backgroundPath = conf.value("backgroundPath", m_backgroundPath).toString();
+            if(!m_backgroundPath.isEmpty())
+            {
+                m_backgroundPath = this->__copy_file(m_backgroundPath);
+            }
+        }
+
+
+        if(conf.contains("color"))
+            m_color = conf.value("color", m_color).toString();
+
+        conf.endGroup();
+    }
+
+    if(nullptr != m_file_watch && !m_file_watch->files().contains(m_greeter_conf_path))
+    {
+        m_file_watch->addPath(m_greeter_conf_path);
+    }
+    return 0;
+}
+
+int PersonalizedData::__load_conf_usd_conf()
+{
+    KyInfo();
+    QSettings conf(m_usd_conf_path, QSettings::IniFormat);
+    if(QSettings::NoError != conf.status())
+    {
+        KyWarning() << m_usd_conf_path << conf.status();
+        return -1;
+    }
+
+    if(conf.childGroups().contains("xsettings"))
+    {
+        conf.beginGroup("xsettings");
+
+        if(conf.contains("cursor-size"))
+            m_cursor_size = conf.value("cursor-size", m_cursor_size).toInt();
+
+        if(conf.contains("cursor-theme"))
+            m_cursor_theme = conf.value("cursor-theme", m_cursor_theme).toString();
+
+        if(conf.contains("scaling-factor"))
+            m_scaling_factor = conf.value("scaling-factor", m_scaling_factor).toInt();
+
+        conf.endGroup();
+    }
+
+    if(nullptr != m_file_watch && !m_file_watch->files().contains(m_usd_conf_path))
+    {
+        m_file_watch->addPath(m_usd_conf_path);
+    }
+    return 0;
+}
+
+QString PersonalizedData::__copy_file(QString oldfile)
+{
+    if(QFile::exists(oldfile))
+    {
+        QString newfile = "/tmp/loginBackground-" + m_user;
+        QDate d =QDate::currentDate();
+        newfile += d.toString("yyyy-MM-dd");
+        if(QFile::exists(newfile))
+        {
+            QFile::remove(newfile);
+        }
+        if(QFile::copy(oldfile, newfile))
+        {
+            return newfile;
+        }
+    }
+    return "";
+}
+
+
+
+/////////////////////////PersonalizedDataMng//////////////////////////////////////
+
+PersonalizedDataMng::PersonalizedDataMng(void)
+{
+    m_usersModel = new QLightDM::UsersModel(this);
+    connect(m_usersModel, &QAbstractListModel::rowsInserted, this, &PersonalizedDataMng::onUserAdded);
+    connect(m_usersModel, &QAbstractListModel::rowsRemoved, this, &PersonalizedDataMng::onUserRemoved);
+    this->__updateUsersInfo();
+}
+
+PersonalizedDataMng::~PersonalizedDataMng()
+{
+    if(nullptr != m_usersModel)
+    {
+        delete m_usersModel;
+        m_usersModel = nullptr;
+    }
+}
+
+QString PersonalizedDataMng::GetConfInformation(QString name)
+{
+    QJsonObject json;
+    if(m_userPersonalizedData.contains(name))
+    {
+        QJsonObject json1;
+        m_userPersonalizedData[name]->getJsonData(json1);
+        json[name] = json1;
+    }
+    else if(name.isEmpty())
+    {
+        for(auto & it : m_userPersonalizedData.toStdMap())
+        {
+            QJsonObject json1;
+            it.second->getJsonData(json1);
+            json[it.first] = json1;
+        }
+    }
+    else if("lightdm" == name)
+    {
+        QString tmp(m_lightdm_str);
+        m_lightdm_str = "";
+        return tmp;
+    }
+
+    QJsonDocument document;
+    document.setObject(json);
+    QString strJson(document.toJson(QJsonDocument::Compact));
+    KyDebug() << strJson;
+    return strJson;
+}
+
+void PersonalizedDataMng::SetLoginSynInformation(QString val)
+{
+    m_lightdm_str = val;
+}
+
+void PersonalizedDataMng::onUserAdded(const QModelIndex &, int left, int right)
+{
+    if(!m_usersModel)
+        return;
+
+    for(int i = left; i <= right; i++)
+    {
+        QString name = m_usersModel->index(i).data(QLightDM::UsersModel::NameRole).toString();
+        KyInfo() << left << right << name;
+        if(!name.isEmpty())
+        {
+             m_userPersonalizedData[name] = KylinUserDatePtr(new PersonalizedData(name));
+
+             QJsonObject json;
+             m_userPersonalizedData[name]->getJsonData(json);
+             json["operation"] = enum_operation_add;
+             QJsonDocument document;
+             document.setObject(json);
+             emit conf_changed(document.toJson());
+        }
+    }
+}
+
+void PersonalizedDataMng::onUserRemoved(const QModelIndex &, int, int)
+{
+    if(!m_usersModel)
+        return;
+
+    auto tmp = m_userPersonalizedData;
+    for(int i = 0; i < m_usersModel->rowCount(QModelIndex()); i++)
+    {
+        QString name = m_usersModel->index(i).data(QLightDM::UsersModel::NameRole).toString();
+        if(!name.isEmpty())
+            tmp.remove(name);
+    }
+
+    if(tmp.size() > 0)
+    {
+        KyInfo() << tmp.begin().key();
+        m_userPersonalizedData.remove(tmp.begin().key());
+
+        QJsonObject json;
+        json["operation"] = enum_operation_del;
+        json["user"] = tmp.begin().key();
+        QJsonDocument document;
+        document.setObject(json);
+        emit conf_changed(document.toJson());
+    }
+}
+
+void PersonalizedDataMng::__updateUsersInfo()
+{
+    if (m_usersModel)
+    {
+        for(int i = 0; i < m_usersModel->rowCount(QModelIndex()); i++)
+        {
+            QString name = m_usersModel->index(i).data(QLightDM::UsersModel::NameRole).toString();
+            if(!name.isEmpty())
+            {
+                m_userPersonalizedData[name] = KylinUserDatePtr(new PersonalizedData(name));
+            }
+
+        }
+    }
+}
+
+
+
diff -Nru ukui-biometric-auth-4.10.0.0/uniauth-backend/src/personalizeddata.h ukui-biometric-auth-4.20.0.0/uniauth-backend/src/personalizeddata.h
--- ukui-biometric-auth-4.10.0.0/uniauth-backend/src/personalizeddata.h	1970-01-01 08:00:00.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/uniauth-backend/src/personalizeddata.h	2024-09-23 19:22:29.000000000 +0800
@@ -0,0 +1,157 @@
+/*
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *
+**/
+#ifndef PERSONALIZEDDATA_H
+#define PERSONALIZEDDATA_H
+
+#include <QObject>
+#include <QSettings>
+#include <QMap>
+#include <QFile>
+#include <QTimer>
+#include <QEventLoop>
+#include <QTimerEvent>
+#include <QFileSystemWatcher>
+#include <QSharedPointer>
+#include <QLightDM/Greeter>
+#include <QLightDM/SessionsModel>
+#include <QLightDM/UsersModel>
+#include <QModelIndex>
+
+#include <QJsonDocument>
+#include <QJsonObject>
+#include <QJsonValue>
+#include <QJsonParseError>
+#include <QJsonArray>
+
+#include "ukui-log4qt.h"
+#include "CSingleton.h"
+
+
+class PersonalizedData : public QObject
+{
+    Q_OBJECT
+public:
+    explicit PersonalizedData(QString user);
+    virtual ~PersonalizedData();
+
+    ////////////////////ukui-greeter-conf//////////////////////////////
+    QString dateType(void){ return m_dateType; }
+    void dateType(QString val){ m_dateType = val; }
+
+    int fontSize(void){ return m_fontSize; }
+    void fontSize(int val){ m_fontSize = val; }
+
+    int timeType(void){ return m_timeType; }
+    void timeType(int val){ m_timeType = val; }
+
+    QString backgroundPath(void){ return m_backgroundPath; }
+    void backgroundPath(QString val){ m_backgroundPath = val; }
+
+    QString color(void){ return m_color; }
+    void color(QString val){ m_color = val; }
+
+    /////////////////////usd-ukui-settings-daemon////////////////////////////////
+    int cursor_size(void){ return m_cursor_size; }
+    void cursor_size(int val){ m_cursor_size = val; }
+
+    QString cursor_theme(void){ return m_cursor_theme; }
+    void cursor_theme(QString val){ m_cursor_theme = val; }
+
+    int scaling_factor(void){ return m_scaling_factor; }
+    void scaling_factor(int val){ m_scaling_factor = val; }
+
+
+    void getJsonData(QJsonObject & json);
+    QString getJsonData(void);
+
+
+protected slots:
+    void fileChanged(const QString &path);
+
+    virtual void timerEvent( QTimerEvent *event);
+
+private:
+    int __load_conf_ukuigreeterconf(void);
+    int __load_conf_usd_conf(void);
+    QString __copy_file(QString);
+protected:
+    //ukui-greeter-conf
+    QString m_dateType = "cn";
+    int m_fontSize = 5;
+    int m_timeType = 24;
+    QString m_backgroundPath;
+    QString m_color;
+
+    //usd-ukui-settings-daemon
+    int m_cursor_size = 48;
+    QString m_cursor_theme;
+    int m_scaling_factor = 1;
+
+    //用户名
+    QString m_user;
+
+    QFileSystemWatcher * m_file_watch = nullptr;
+    QString m_greeter_conf_path;
+    bool m_greeter_conf_path_changed = false;
+    QString m_usd_conf_path;
+    bool m_usd_conf_path_changed = false;
+    int m_conf_TimerID = 0;
+};
+
+
+
+typedef QSharedPointer<PersonalizedData> KylinUserDatePtr;
+
+/////////////////////////////////////////////////
+/// \brief The PersonalizedDataMng class
+///
+
+class PersonalizedDataMng : public QObject
+{
+    Q_OBJECT
+protected:
+    explicit PersonalizedDataMng(void);
+    virtual ~PersonalizedDataMng();
+
+
+public:
+    QString GetConfInformation(QString);
+
+    void SetLoginSynInformation(QString val);
+
+signals:
+    void conf_changed(QString jsonstr);
+
+protected Q_SLOTS:
+    void onUserAdded(const QModelIndex&, int, int);
+
+    void onUserRemoved(const QModelIndex&, int, int );
+
+protected:
+    void __updateUsersInfo();
+
+protected:
+    QMap<QString, KylinUserDatePtr > m_userPersonalizedData;
+    QLightDM::UsersModel  * m_usersModel = nullptr;
+    QString m_lightdm_str;
+    friend class SingleTon<PersonalizedDataMng>;
+};
+
+typedef SingleTon<PersonalizedDataMng>  KYLINUSERDATAMNG;
+
+#endif // PERSONALIZEDDATA_H
diff -Nru ukui-biometric-auth-4.10.0.0/uniauth-backend/src/rsac.cpp ukui-biometric-auth-4.20.0.0/uniauth-backend/src/rsac.cpp
--- ukui-biometric-auth-4.10.0.0/uniauth-backend/src/rsac.cpp	1970-01-01 08:00:00.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/uniauth-backend/src/rsac.cpp	2024-09-23 19:22:29.000000000 +0800
@@ -0,0 +1,216 @@
+/*
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *
+**/
+#include "rsac.h"
+#include <openssl/rsa.h>
+#include <openssl/pem.h>
+
+RSA* publicKeyToRSA(const QByteArray &pubKey)
+{
+    BIO *pBio = BIO_new_mem_buf(pubKey.data(), pubKey.size()); // 创建内存
+    RSA* rsa = PEM_read_bio_RSA_PUBKEY(pBio, nullptr, nullptr, nullptr);
+    BIO_free_all(pBio); // 释放内存
+    return rsa;
+}
+
+RSA* privateKeyToRSA(const QByteArray &priKey)
+{
+    BIO *pBio = BIO_new_mem_buf(priKey.data(), priKey.size()); // 创建内存
+    RSA* rsa = PEM_read_bio_RSAPrivateKey(pBio, nullptr, nullptr, nullptr);
+    BIO_free_all(pBio); // 释放内存
+    return rsa;
+}
+
+/**
+ * @brief RSAC::generateKeyPair
+ * 生成密钥对,并分别保存为文件
+ * @param priKeyFile 私钥文件名
+ * @param pubKeyFile 公钥文件名
+ * @param bits 秘钥长度,一般建议1024及以上
+ */
+void RSAC::generateKeyPair(const QString &priKeyFile, const QString &pubKeyFile, int bits)
+{
+    // 生成公钥
+    RSA* rsa = RSA_generate_key(bits, RSA_F4, nullptr, nullptr);
+    BIO *bp = BIO_new(BIO_s_file());
+    BIO_write_filename(bp, (void*)pubKeyFile.toStdString().c_str());
+    PEM_write_bio_RSAPublicKey(bp, rsa);
+    BIO_free_all(bp);
+
+    // 生成私钥
+    bp = BIO_new(BIO_s_file());
+    BIO_write_filename(bp, (void*)priKeyFile.toStdString().c_str());
+    PEM_write_bio_RSAPrivateKey(bp, rsa, nullptr, nullptr, 0, nullptr, nullptr);
+    CRYPTO_cleanup_all_ex_data();
+    BIO_free_all(bp);
+    RSA_free(rsa);
+}
+
+/**
+ * @brief RSAC::generateKeyPair
+ * 生成密钥对数据
+ * @param privateKey 私钥数据
+ * @param publicKey 公钥数据
+ * @param bits 秘钥长度,一般建议1024及以上
+ */
+void RSAC::generateKeyPair(QByteArray &privateKey, QByteArray &pubKey, int bits)
+{
+    // 生成密钥对
+    RSA *keyPair = RSA_generate_key(bits, RSA_F4, nullptr, nullptr);
+
+    BIO *pri = BIO_new(BIO_s_mem());
+    BIO *pub = BIO_new(BIO_s_mem());
+
+    PEM_write_bio_RSAPrivateKey(pri, keyPair, nullptr, nullptr, 0, nullptr, nullptr);
+    PEM_write_bio_RSA_PUBKEY(pub, keyPair);
+
+    // 获取长度
+    int pri_len = BIO_pending(pri);
+    int pub_len = BIO_pending(pub);
+
+    privateKey.resize(pri_len);
+    pubKey.resize(pub_len);
+
+    BIO_read(pri, privateKey.data(), pri_len);
+    BIO_read(pub, pubKey.data(), pub_len);
+
+    // 内存释放
+    RSA_free(keyPair);
+    BIO_free_all(pub);
+    BIO_free_all(pri);
+}
+
+/**
+ * @brief RSAC::encrypt
+ * RSA加密函数,使用公钥对输入数据,进行加密
+ * @param in 输入数据(明文)
+ * @param out 输出数据(密文)
+ * @param pubKey 公钥
+ * @return 执行结果
+ */
+bool RSAC::encrypt(const QByteArray &in, QByteArray &out, const QByteArray& pubKey)
+{
+    // 公钥数据转RSA
+    RSA* rsa = publicKeyToRSA(pubKey);
+    if (rsa == nullptr)
+    {
+        return false;
+    }
+
+    // 对任意长度数据进行加密,超长时,进行分段加密
+    int keySize = RSA_size(rsa);
+    int dataLen = in.size();
+    const unsigned char *from = (const unsigned char *)in.data();
+    QByteArray to(keySize, 0);
+    int readLen = 0;
+    do
+    {
+        int select = (keySize - 11) > dataLen ? dataLen : (keySize - 11);
+        RSA_public_encrypt(select, (from + readLen), (unsigned char *)to.data(), rsa, RSA_PKCS1_PADDING);
+        dataLen -= select;
+        readLen += select;
+        out.append(to);
+    }while (dataLen > 0);
+    RSA_free(rsa);
+    return true;
+}
+
+/**
+ * @brief RSAC::private_decrypt
+ * RSA解密函数,使用私钥对输入数据,进行解密
+ * @param in 输入数据(密文)
+ * @param out 输出数据(解密后的内容)
+ * @param priKey 私钥
+ * @return 执行结果
+ */
+bool RSAC::decrypt(const QByteArray &in, QByteArray &out, const QByteArray& priKey)
+{
+    // 私钥数据转RSA
+    RSA* rsa = privateKeyToRSA(priKey);
+    if (rsa == nullptr)
+    {
+        return false;
+    }
+
+    // 对任意长度数据进行解密,超长时,进行分段解密
+    int keySize = RSA_size(rsa);
+    int dataLen = in.size();
+    const unsigned char *from = (const unsigned char *)in.data();
+    QByteArray to(keySize, 0);
+    int readLen = 0;
+    do
+    {
+        int size = RSA_private_decrypt(keySize, (from + readLen), (unsigned char *)to.data(), rsa, RSA_PKCS1_PADDING);
+        dataLen -= keySize;
+        readLen += keySize;
+        out.append(to.data(), size);
+    }while (dataLen > 0);
+    RSA_free(rsa);
+    return true;
+}
+
+/**
+ * @brief RSAC::sign
+ * 使用私钥对摘要数据进行签名
+ * @param digest 摘要数据
+ * @param sign 签名后的数据
+ * @param priKey 私钥
+ * @return 执行结果
+ */
+bool RSAC::sign(const QByteArray &digest, QByteArray &sign, const QByteArray& priKey)
+{
+    // 私钥数据转RSA
+    RSA* rsa = privateKeyToRSA(priKey);
+    if (rsa == nullptr)
+    {
+        return false;
+    }
+
+    // 对digest进行签名
+    unsigned int siglen = 0;
+    QByteArray temp(RSA_size(rsa), 0);
+    RSA_sign(NID_sha1, (const unsigned char*)digest.data(), digest.size(),
+             (unsigned char*)temp.data(), &siglen, rsa);
+    sign.clear();
+    sign.append(temp.data(), siglen);
+    RSA_free(rsa);
+    return true;
+}
+
+/**
+ * @brief RSAC::verify
+ * 使用公钥对摘要数据进行验签
+ * @param digest 摘要数据
+ * @param sign 签名后的数据
+ * @param pubKey 公钥
+ * @return 执行结果
+ */
+bool RSAC::verify(const QByteArray &digest, const QByteArray &sign, const QByteArray& pubKey)
+{
+    // 公钥数据转RSA
+    RSA* rsa = publicKeyToRSA(pubKey);
+    if (rsa == nullptr)
+    {
+        return false;
+    }
+
+    // 对digest、sign进行验签
+    int ret = RSA_verify(NID_sha1, (const unsigned char*)digest.data(), digest.size(),
+               (const unsigned char *)sign.data(), sign.size(), rsa);
+    RSA_free(rsa);
+    return (ret == 1);
+}
diff -Nru ukui-biometric-auth-4.10.0.0/uniauth-backend/src/rsac.h ukui-biometric-auth-4.20.0.0/uniauth-backend/src/rsac.h
--- ukui-biometric-auth-4.10.0.0/uniauth-backend/src/rsac.h	1970-01-01 08:00:00.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/uniauth-backend/src/rsac.h	2024-09-23 19:22:29.000000000 +0800
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *
+**/
+#ifndef RSAC_H
+#define RSAC_H
+
+#include <QString>
+
+/**
+ * @brief The RSAC class
+ * RSA算法相关实现,包括密钥对生成,加密与解密,签名与验签。
+ */
+class RSAC
+{
+public:
+    // 生成秘钥对
+    void generateKeyPair(const QString& priKeyFile, const QString &pubKeyFile, int bits = 1024);
+    void generateKeyPair(QByteArray& priKey, QByteArray& pubKey, int bits = 1024);
+
+    // 对数据进行加解密
+    bool encrypt(const QByteArray& in, QByteArray& out, const QByteArray& pubKey);
+    bool decrypt(const QByteArray& in, QByteArray& out, const QByteArray& priKey);
+
+    // 对摘要进行签名和验签
+    bool sign(const QByteArray& digest, QByteArray& sign, const QByteArray &priKey);
+    bool verify(const QByteArray& digest, const QByteArray &sign, const QByteArray &pubKey);
+};
+
+#endif // RSAC_H
diff -Nru ukui-biometric-auth-4.10.0.0/uniauth-backend/src/serviceinterface.cpp ukui-biometric-auth-4.20.0.0/uniauth-backend/src/serviceinterface.cpp
--- ukui-biometric-auth-4.10.0.0/uniauth-backend/src/serviceinterface.cpp	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/uniauth-backend/src/serviceinterface.cpp	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2022 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -19,6 +19,9 @@
 #include <QDBusConnection>
 #include <QSettings>
 #include <QDir>
+#include <QRegExp>
+#include <QFile>
+#include <QTimer>
 #include <pwd.h>
 #include <unistd.h>
 #include <sys/types.h>
@@ -29,11 +32,25 @@
 #include <QDBusMetaType>
 #include <QDBusConnectionInterface>
 #include <QDBusContext>
+#include <QDBusInterface>
 #include <QDBusMessage>
 #include "servicemanager.h"
+#include "personalizeddata.h"
+#include <unistd.h>
+#include <openssl/rsa.h>
+#include <openssl/pem.h>
+
+#define UKUI_GREETER        "/usr/sbin/ukui-greeter"
+#define UKUI_SCREENSAVER    "/usr/bin/ukui-screensaver-backend"
 
+#define GREETER_DBUS_PATH           "/"
+#define GREETER_DBUS_INTERFACE      "org.ukui.greeter"
+#define SCREENSAVER_DBUS_PATH       "/"
+#define SCREENSAVER_DBUS_INTERFACE  "org.ukui.screensaver"
 #define COMM_CONFIG_PATH "/etc/biometric-auth/ukui-biometric.conf"
 #define USER_CONFIG_PATH "/home/%1/.biometric_auth/ukui_biometric.conf"
+#define OLD_990_USER_CONFIG_PATH "/home/%1/.biometric-auth/ukui-biometric.conf"
+#define PROC_CPUINFO "/proc/cpuinfo"
 
 ServiceInterface::ServiceInterface()
 {
@@ -50,9 +67,10 @@
     }
 
     registerCustomTypes();
+    checkIs990();
     m_serviceInterface = new QDBusInterface(DBUS_SERVICE, DBUS_PATH,
                                             DBUS_INTERFACE,
-                                            QDBusConnection::systemBus());
+                                            QDBusConnection::systemBus(), this);
 
     m_serviceInterface->setTimeout(2147483647);
     connect(m_serviceInterface, SIGNAL(USBDeviceHotPlug(int, int, int)),
@@ -63,6 +81,9 @@
     ServiceManager *sm = ServiceManager::instance();
     connect(sm, &ServiceManager::serviceStatusChanged,
             this, &ServiceInterface::onBiometricDbusChanged);
+
+    rsac.generateKeyPair(priKey, pubKey, 1024);
+    connect(KYLINUSERDATAMNG::getInstance(), &PersonalizedDataMng::conf_changed, this, &ServiceInterface::updateUserInformation);
 }
 
 void ServiceInterface::setDefaultDevice(QString userName, int bioDevType, QString deviceName)
@@ -475,8 +496,22 @@
     default:
         return false;
     }
+
+    //同步990旧的配置文件,然后删除
+    if(getIs990() && (bioAuthType == ENABLETYPE_BIO)){
+        QString oldConfigPath = QString(OLD_990_USER_CONFIG_PATH).arg(userName);
+        QSettings oldSettings(oldConfigPath, QSettings::IniFormat);
+        if(oldSettings.contains(strBioAuthType)){
+            settings.setValue(strBioAuthType,oldSettings.value(strBioAuthType).toBool());
+            oldSettings.remove(strBioAuthType);
+            oldSettings.sync();
+        }
+    }
     if (settings.contains(strBioAuthType)) {
         return settings.value(strBioAuthType).toBool();
+    }else if(getIs990() && (bioAuthType == ENABLETYPE_BIO)){
+        //990默认为打开
+        return true;
     } else {
         QSettings settings2(COMM_CONFIG_PATH, QSettings::IniFormat);
         if (settings2.contains(strBioAuthType)) {
@@ -496,6 +531,23 @@
         return 3;
 }
 
+int ServiceInterface::getFTimeoutTimes()
+{
+    QSettings sysSettings(COMM_CONFIG_PATH, QSettings::IniFormat);
+    if(sysSettings.contains("FaceTimeoutTimes"))
+        return sysSettings.value("FaceTimeoutTimes").toInt();
+    else
+        return 1;
+}
+
+void ServiceInterface::setFTimeoutTimes(int times)
+{
+    if (times < 1)
+        times = 1;
+    QSettings settings(COMM_CONFIG_PATH, QSettings::IniFormat);
+    settings.setValue("FaceTimeoutTimes", times);
+}
+
 bool ServiceInterface::getQRCodeEnable()
 {
     bool isEnable = false;
@@ -576,6 +628,44 @@
     }
 }
 
+//记录当前生物认证信息
+void ServiceInterface::recordAuthDrive(QString appName,int drvid,bool insert)
+{
+    if(insert){
+        m_AuthingDriveList.insert(appName,drvid);
+    }else{
+        m_AuthingDriveList.remove(appName);
+    }
+}
+
+
+//获取当前正在认证的应用
+QStringList ServiceInterface::getAllAuthApp()
+{
+    return m_AuthingDriveList.keys();
+}
+
+//根据应用名称获取认证的驱动
+int ServiceInterface::getAppAuthDrive(QString appName)
+{
+    if(m_AuthingDriveList.contains(appName)){
+        return m_AuthingDriveList.value(appName);
+    }
+    return -1;
+}
+
+QString ServiceInterface::GetUserInformation(QString username)
+{
+    KyInfo() << username;
+    return KYLINUSERDATAMNG::getInstance()->GetConfInformation(username);
+}
+
+void ServiceInterface::SetLoginSynInformation(QString val)
+{
+    KyInfo() << val;
+    KYLINUSERDATAMNG::getInstance()->SetLoginSynInformation(val);
+}
+
 void ServiceInterface::waitBiometricServiceStatus()
 {
     qDebug()<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~` get biometric status";
@@ -628,7 +718,7 @@
     QDBusArgument argument;
     QList<QDBusVariant> qlist;
     QDBusVariant item;
-    DeviceInfo *deviceInfo;
+    DeviceInfoPtr deviceInfo = nullptr;
 
     /* 返回值为 i -- int 和 av -- array of variant */
     QDBusPendingReply<int, QList<QDBusVariant> > reply = m_serviceInterface->call("GetDrvList");
@@ -652,7 +742,7 @@
             variant = item.variant(); /* 转为普通QVariant对象 */
             /* 解封装得到 QDBusArgument 对象 */
             argument = variant.value<QDBusArgument>();
-            deviceInfo = new DeviceInfo();
+            deviceInfo = std::make_shared<DeviceInfo>();
             argument >> *deviceInfo; /* 提取最终的 DeviceInfo 结构体 */
             if (nDriId == deviceInfo->device_id) {
                 if (getCommDefaultDevice(deviceInfo->biotype).isEmpty()) {
@@ -662,19 +752,13 @@
             }
         }
     } else {
-        for (auto devInfo : m_listDeviceInfos) {
-            if (devInfo) {
-                delete devInfo;
-                devInfo = nullptr;
-            }
-        }
         m_listDeviceInfos.clear();
         for (int i = 0; i < deviceCount; i++) {
             item = qlist[i]; /* 取出一个元素 */
             variant = item.variant(); /* 转为普通QVariant对象 */
             /* 解封装得到 QDBusArgument 对象 */
             argument = variant.value<QDBusArgument>();
-            deviceInfo = new DeviceInfo();
+            deviceInfo = std::make_shared<DeviceInfo>();
             argument >> *deviceInfo; /* 提取最终的 DeviceInfo 结构体 */
             m_listDeviceInfos.push_back(deviceInfo);
         }
@@ -797,3 +881,237 @@
         initData();
     }
 }
+
+void ServiceInterface::checkIs990()
+{
+    QRegExp  r1("kirin.*9.0");
+    r1.setCaseSensitivity(Qt::CaseInsensitive);
+    QRegExp r2("pangu.*m900");
+    r2.setCaseSensitivity(Qt::CaseInsensitive);
+
+    QFile file(PROC_CPUINFO);
+    if(!file.exists()){
+        is990 = false;
+    }
+    file.open(QFile::ReadOnly);
+    QString str(file.readAll());
+    is990 = (str.contains(r1) || str.contains(r2));
+    file.close();
+}
+
+bool ServiceInterface::getIs990()
+{
+    return is990;
+}
+
+QString ServiceInterface::getPublicEncrypt()
+{
+    return pubKey;
+}
+
+bool ServiceInterface::sendPassword(QString username,QByteArray password)
+{
+    QByteArray decryptText;
+    QByteArray encryptText;
+    rsac.decrypt(password, decryptText, priKey);     // 解密
+    //如果处于登录状态
+
+    qDebug()<<"sendPassword"<<loginAppList.count()<<loginAppList;
+    if(loginAppList.contains("lightdm")){
+        qDebug()<<"login:";
+        isFirstLogin = false;
+        QString publicKey = getLoginPubKey(loginAppList.value("lightdm"),SCREENSAVER_DBUS_PATH,SCREENSAVER_DBUS_INTERFACE);
+        rsac.encrypt(decryptText, encryptText, publicKey.toLatin1());
+        return sendLoginPassword(loginAppList.value("lightdm"),SCREENSAVER_DBUS_PATH,SCREENSAVER_DBUS_INTERFACE,username,encryptText);
+    }
+
+    //处于锁屏状态
+    if(loginAppList.contains(username)){
+        qDebug()<<"unlock:";
+        isFirstLogin = false;
+        QString publicKey = getLoginPubKey(loginAppList.value(username),SCREENSAVER_DBUS_PATH,SCREENSAVER_DBUS_INTERFACE);
+        rsac.encrypt(decryptText, encryptText, publicKey.toLatin1());
+        return sendLoginPassword(loginAppList.value(username),SCREENSAVER_DBUS_PATH,SCREENSAVER_DBUS_INTERFACE,username,encryptText);
+    }
+
+    if(loginAppList.count()>0){
+	qDebug()<<"login by screensaver:";
+	isFirstLogin = false;
+        QString publicKey = getLoginPubKey(loginAppList.value(loginAppList.firstKey()),SCREENSAVER_DBUS_PATH,SCREENSAVER_DBUS_INTERFACE);
+        rsac.encrypt(decryptText, encryptText, publicKey.toLatin1());
+        return sendLoginPassword(loginAppList.value(loginAppList.firstKey()),SCREENSAVER_DBUS_PATH,SCREENSAVER_DBUS_INTERFACE,username,encryptText);
+    }
+
+    //如果是第一次调用,则配置自动登录
+    if(isFirstLogin){
+        qDebug()<<"isFirstLogin:";
+        isFirstLogin = false;
+        hasSaveLogin = true;
+        return handleFirstSingleLogn(username,decryptText);
+    }
+
+    isFirstLogin = false;
+    return false;
+}
+
+bool ServiceInterface::handleFirstSingleLogn(QString username,QByteArray decryptText)
+{
+     QEventLoop loopTemp;
+     bool ret = false;
+     QByteArray encryptText;
+
+     qDebug()<<"handleFirstSingleLogn wait";
+     QMetaObject::Connection connection = QObject::connect(this, &ServiceInterface::onLoginServicdRegisted, [&loopTemp]() {
+         if (loopTemp.isRunning()) {
+             loopTemp.quit();
+         }
+     });
+     QTimer::singleShot(10000, &loopTemp, SLOT(quit()));
+     loopTemp.exec();
+     qDebug()<<"handleFirstSingleLogn finished";
+     disconnect(connection);
+     qDebug()<<loginAppList.count();
+     if(loginAppList.contains("lightdm")){
+         isFirstLogin = false;
+         QString publicKey = getLoginPubKey(loginAppList.value("lightdm"),SCREENSAVER_DBUS_PATH,SCREENSAVER_DBUS_INTERFACE);
+         if(publicKey.isEmpty()){
+             qDebug()<<"get Login PubKey failed!";
+             return false;
+         }
+         rsac.encrypt(decryptText, encryptText, publicKey.toLatin1());
+         return sendLoginPassword(loginAppList.value("lightdm"),SCREENSAVER_DBUS_PATH,SCREENSAVER_DBUS_INTERFACE,username,encryptText);
+     }
+     return ret;
+}
+
+QString  ServiceInterface::getLoginPubKey(QString service,QString path,QString interface)
+{
+    QDBusInterface iface(service,
+                             path,
+                             interface,
+                             QDBusConnection::systemBus());
+    QDBusReply<QString> stateReply = iface.call("getPublicEncrypt");
+
+    if(!stateReply.isValid()){
+        qWarning()<< "Get state error:" << stateReply.error();
+        qDebug()<<"getPublicEncrypt failed";
+        return "";
+    }
+    return stateReply.value();
+}
+
+bool ServiceInterface::sendSignalLoginFinished(QString username,bool res)
+{
+    qDebug()<<"sendSignalLoginFinished "<<username<<res;
+    emit onSignalLoginFinished(username,res);
+
+    return true;
+}
+
+bool  ServiceInterface::sendLoginPassword(QString service,QString path,QString interface,QString username,QByteArray array)
+{
+    QEventLoop loopTemp;
+    bool ret = false;
+
+    qDebug()<<"sendLoginPassword";
+    QMetaObject::Connection connection = QObject::connect(this, &ServiceInterface::onSignalLoginFinished, [&loopTemp,&ret](QString username,bool res) {
+        qDebug()<<"onSignalLoginFinished:"<<username<<res;
+        ret = res;
+        if (loopTemp.isRunning()) {
+                loopTemp.quit();
+        }
+    });
+
+    QDBusInterface iface(service,
+                         path,
+                         interface,
+                         QDBusConnection::systemBus());
+    QDBusReply<bool> stateReply = iface.call("sendPassword",username,array);
+    if(!stateReply.isValid()){
+        disconnect(connection);
+        return false;
+    }
+
+    if(!stateReply.value()){
+        disconnect(connection);
+        return stateReply.value();
+    }
+
+    QTimer::singleShot(30000, &loopTemp, SLOT(quit()));
+
+    loopTemp.exec();
+    disconnect(connection);
+
+    return ret;
+}
+QString ServiceInterface::getProcessNameFromPid(int pid)
+{
+    QString filename = "/proc/" + QString::number(pid) + "/cmdline";
+    qDebug()<<"filename is "<<filename;
+    QFile file(filename);
+    if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
+        qDebug()<<"Can't open the file!"<<endl;
+        return "";
+    }
+    QByteArray text = file.readAll();
+    return QString(text);
+}
+
+QString ServiceInterface::getUserNameFromUid(int uid)
+{
+    struct passwd *pw = NULL;
+    pw = getpwuid(uid);
+    if(pw){
+        return QString(pw->pw_name);
+    }
+    return "";
+}
+
+void ServiceInterface::onDbusNameOwnerChanged(QString name,QString oldOwner,QString newOwner)
+{
+    if(newOwner.isEmpty()){
+        for(QString str:loginAppList.keys()){
+            if(name == loginAppList.value(str)){
+                qDebug()<<"remove name  "<<name;
+                loginAppList.remove(str);
+            }
+        }
+    }
+}
+
+bool ServiceInterface::registerLoginApp()
+{
+    QDBusConnection conn = connection();
+    QDBusMessage msg = message();
+
+    qDebug() << "Sender Name" << conn.interface()->serviceOwner(msg.service()).value();
+    qDebug() << "Sender Pid " << conn.interface()->servicePid(msg.service()).value();
+    qDebug() << "Sender uid " << conn.interface()->serviceUid(msg.service()).value();
+
+    int pid = conn.interface()->servicePid(msg.service()).value();
+    QString serviceOwner = conn.interface()->serviceOwner(msg.service()).value();
+    int uid = conn.interface()->serviceUid(msg.service()).value();
+
+    QString appName = getProcessNameFromPid(pid);
+    qDebug()<<"appName = "<<appName;
+
+    if(appName != UKUI_GREETER && appName != UKUI_SCREENSAVER){
+        return false;
+    }
+
+    QString appUser = getUserNameFromUid(uid);
+    if(appUser.isEmpty())
+        return false;
+
+    qDebug()<<"insert "<<appUser<<serviceOwner;
+    loginAppList.insert(appUser,serviceOwner);
+
+    if(appUser == "lightdm" && hasSaveLogin){
+        QTimer::singleShot(1000, this, [=](){
+           emit onLoginServicdRegisted();
+        });
+    }
+
+    return true;
+}
+
diff -Nru ukui-biometric-auth-4.10.0.0/uniauth-backend/src/serviceinterface.h ukui-biometric-auth-4.20.0.0/uniauth-backend/src/serviceinterface.h
--- ukui-biometric-auth-4.10.0.0/uniauth-backend/src/serviceinterface.h	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/uniauth-backend/src/serviceinterface.h	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2022 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -22,7 +22,10 @@
 #include <QCoreApplication>
 #include <QDBusContext>
 #include <QObject>
+#include <QMap>
 #include <QFileSystemWatcher>
+#include <QDBusInterface>
+#include "rsac.h"
 
 #define DBUS_SERVICE "org.ukui.Biometric"
 #define DBUS_PATH "/org/ukui/Biometric"
@@ -57,6 +60,10 @@
     void setBioAuthStatus(int bioAuthType, bool status);
     // 获取最大失败次数
     int getMaxFailedTimes();
+    // 获取人脸识别超时停用次数
+    int getFTimeoutTimes();
+    // 设置人脸识别超时停用次数
+    void setFTimeoutTimes(int times);
     // 获取是否使能微信扫码登录
     bool getQRCodeEnable();
     // 获取是否双认证
@@ -69,17 +76,39 @@
     bool getUseFirstDevice();
     // 获取是否隐藏切换按钮
     bool getHiddenSwitchButton();
-
+    // 记录当前正在进行生物认证的设备
+    void recordAuthDrive(QString appName,int drvid,bool insert);
+    // 获取当前正在进行生物认证的应用
+    QStringList getAllAuthApp();
+    // 获取当前应用在认证的驱动
+    int	getAppAuthDrive(QString appName);
+    //获取用户配置
+    QString GetUserInformation(QString username);
+    //同步登录界面配置
+    void SetLoginSynInformation(QString val);
+    // 获取公钥    
+    QString getPublicEncrypt();
+    //发送用户名和密码
+    bool sendPassword(QString username,QByteArray password);
+    //前端注册到后端接口
+    bool registerLoginApp();
+    //发送认证结果
+    bool sendSignalLoginFinished(QString username,bool res);
 private slots:
     void onUSBDeviceHotPlug(int drvid, int action, int deviceNum);
     void onBiometricDbusChanged(bool bActive);
-
+    void onDbusNameOwnerChanged(QString name,QString oldOwner,QString newOwner);
 signals:
     //默认设备改变
     void defaultDeviceChanged(QString userName, int bioDevType, QString deviceName);
     //开关状态改变
     void bioAuthStatusChanged(QString userName, int type, bool status);
-
+    //用户配置改变
+    void updateUserInformation(QString jsonstring);
+    //单点登录完成信号
+    void onSignalLoginFinished(QString username,bool res);
+    //登录服务以启动信号
+    void onLoginServicdRegisted();
 private:
     //设置默认设备
     void setDefaultDevice(QString userName, int bioDevType, QString deviceName);
@@ -95,11 +124,34 @@
     void updateCommDefaultDevice(int nDriId);
     // 等待生物识别服务
     void waitBiometricServiceStatus();
-
+    //判断系统是否为990
+    void checkIs990();
+    //获取系统是否为990
+    bool getIs990();
+    //根据pid获取进程名称
+    QString getProcessNameFromPid(int pid);
+    //根据uid获取用户名
+    QString getUserNameFromUid(int uid);
+    //获取登录锁屏界面的公钥
+    QString getLoginPubKey(QString service,QString path,QString interface);
+    //发送密码到登录锁屏界面
+    bool sendLoginPassword(QString service,QString path,QString interface,QString username,QByteArray array);
+    //处理首次登录逻辑
+    bool handleFirstSingleLogn(QString username,QByteArray decryptText);
 private:
     QDBusInterface *m_serviceInterface = nullptr;
-    QList<DeviceInfo *> m_listDeviceInfos;
+    DeviceList m_listDeviceInfos;
     int deviceCount = 0;
+    bool is990 = false;
+    QMap<QString,int> m_AuthingDriveList;
+
+    QMap<QString,QString> loginAppList;
+    RSAC rsac;
+    QByteArray priKey, pubKey;
+    bool isFirstLogin = true;
+    bool hasSaveLogin = false;
+    QString savedUsername;
+    QByteArray savedPassword;
 };
 
 #endif // SERVICEINTERFACE_H
diff -Nru ukui-biometric-auth-4.10.0.0/uniauth-backend/src/servicemanager.cpp ukui-biometric-auth-4.20.0.0/uniauth-backend/src/servicemanager.cpp
--- ukui-biometric-auth-4.10.0.0/uniauth-backend/src/servicemanager.cpp	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/uniauth-backend/src/servicemanager.cpp	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -83,6 +83,8 @@
                  << (newOwner.isEmpty() ? "inactivate" : "activate");
         Q_EMIT serviceStatusChanged(!newOwner.isEmpty());
     }
+
+    Q_EMIT dbusNameOwnerChanged(name,oldOwner,newOwner);
 }
 
 /*!
diff -Nru ukui-biometric-auth-4.10.0.0/uniauth-backend/src/servicemanager.h ukui-biometric-auth-4.20.0.0/uniauth-backend/src/servicemanager.h
--- ukui-biometric-auth-4.10.0.0/uniauth-backend/src/servicemanager.h	2023-11-14 16:23:44.000000000 +0800
+++ ukui-biometric-auth-4.20.0.0/uniauth-backend/src/servicemanager.h	2024-09-23 19:22:29.000000000 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
+ * Copyright (C) 2023 KylinSoftCo., Ltd.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -36,6 +36,7 @@
 
 Q_SIGNALS:
     void serviceStatusChanged(bool activate);
+    void dbusNameOwnerChanged(QString name,QString oldOwner,QString newOwner);
 
 public Q_SLOTS:
     void onDBusNameOwnerChanged(const QString &name,