<meta http-equiv="content-type" content="text/html; charset=utf-8">
  <body bgcolor="#FFFFFF" text="#000000">
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <pre style="color: rgb(0, 0, 0); font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; white-space: pre-wrap;">Hello everybody!

I'm delighted to tell you that new version of Kea - 1.0.0-beta was released today! 
And we all are waiting for your feedback!

Version 1.0.0-beta adds the following features to Kea:

* Lease expiration. Configurable mechanism gives the ability to properly 
  clean up expired leases, including logging, DNS cleanup and hooks. 

* Client classification. Initial support for client classification.

* Decline support in both DHCPv4 and DHCPv6.

* New statistics. Several new statistics have been added. They can be
  used to monitor lease expiration and decline processing.

* PXE boot. Several new DHCPv4 and DHCPv6 options useful for PXE and
  iPXE boot are now supported.

* Host Reservations in MySQL. Now Kea is able to store host
  reservations in its configuration file and MySQL database.
  This functionality works in DHCPv4, but does not work in DHCPv6.
  There is a work in progress to address this limitation.

Note: when migrating from Kea 0.9.2 to 1.0.0:
* Incompatible configuration changes in DDNS, details are in the Administrator Guide.
* Incompatible change in hooks configuration, details are in the Administrator Guide.
* RFC 7550 fully supported.

We are planning to release a second beta prior to the final release, having found some
new bugs too late to fix them in this first beta without delaying it.  We decided to
release this code on time with the newly-found defects still present because we anticipate
that Kea testers would prefer to start running tests specific to their DHCP environments
using new 1.0.0 features as early as possible.  The planned second beta's bug fixes do not
change ISC Kea's basic feature set or functionality.  ISC does not recommend deploying beta
versions of ISC code in business-critical production environments.

Important license change in upcoming release:
With the final release of Kea 1.0, ISC is planning to change the open-source
license under which it is distributed. Kea is currently licensed under the
ISC license, and with the release of version 1.0, it will be licensed under the
Mozilla Public License 2.0. The new license is slightly more restrictive than
the original ISC license. If you are planning to redistribute Kea, please
review the terms of the new license. For more details about why we are making
this change, see the blog posting <a class="moz-txt-link-freetext" href="https://www.isc.org/blogs/kea-license-2-0/">https://www.isc.org/blogs/kea-license-2-0/</a> 

The ISC license: <a class="moz-txt-link-freetext" href="https://www.isc.org/downloads/software-support-policy/isc-license/">https://www.isc.org/downloads/software-support-policy/isc-license/</a>
The MPL 2.0 license: <a class="moz-txt-link-freetext" href="https://www.mozilla.org/en-US/MPL/2.0/">https://www.mozilla.org/en-US/MPL/2.0/</a>
An excellent FAQ about the MPL2.0: <a class="moz-txt-link-freetext" href="https://www.mozilla.org/en-US/MPL/2.0/FAQ/">https://www.mozilla.org/en-US/MPL/2.0/FAQ/</a>

== Download ==

The kea-1.0.0-beta source and PGP signature of the distribution
may be downloaded from:

   <a class="moz-txt-link-freetext" href="https://www.isc.org/downloads">https://www.isc.org/downloads</a>

The signature was generated with the ISC code signing key which is available at

   <a class="moz-txt-link-freetext" href="https://www.isc.org/about/openpgp">https://www.isc.org/about/openpgp</a>

Kea provides detailed documentation, including installation instructions
and usage tutorials. In addition, all logging messages have unique documented
explanations.  This documentation is included with the installation or via
<a class="moz-txt-link-freetext" href="http://kea.isc.org/docs/">http://kea.isc.org/docs/</a> in HTML, plain text, or PDF formats.  We also
maintain a public open source code tree and wiki pages with roadmap and issue
tracking at <a class="moz-txt-link-freetext" href="http://kea.isc.org/">http://kea.isc.org/</a>.

Limitations and known issues with this DHCP release can be found at

   <a class="moz-txt-link-freetext" href="http://kea.isc.org/wiki/KeaKnownIssues">http://kea.isc.org/wiki/KeaKnownIssues</a>

We'd like users of this software to please let us know how it worked for you
and what operating system you tested on. Feel free to share your configuration
or use case.  Also we would like to hear whether the documentation is adequate
and accurate (please open tickets for documentation omissions and errors).
We want to hear from you even if everything worked.

== Support ==

Professional support will be available when Kea reaches Release 1.0. Free
best-effort support is provided by our user community via a mailing list.
Information on all public email lists is available at

   <a class="moz-txt-link-freetext" href="https://www.isc.org/community/mailing-list/">https://www.isc.org/community/mailing-list/</a>.

If you have any comments or questions about working with Kea, please share them
to the Kea Users List <a class="moz-txt-link-freetext" href="https://lists.isc.org/mailman/listinfo/kea-users">https://lists.isc.org/mailman/listinfo/kea-users</a> or to
the Kea Jabber room.  Bugs and feature requests may be submitted via the ticket
tracking system at 

   <a class="moz-txt-link-freetext" href="http://kea.isc.org/">http://kea.isc.org/</a>.

== Changes ==

The following summarizes changes and important upgrade notes since the previous
release (0.9.2). (See the git history for more details and additional 

1067.   [doc]           sar
        Remove description of option[xx].text operator from classification
        until its use becomes clearer.
        (Trac #4218, git 22fe2bf889984078cd86c2a230a038632d21432c)

1066.   [func]          tomek
        Configuration parameters for setting up external hosts storage
        are now implemented. This feature is considered experimental
        for DHCPv4 and currently not really usable for DHCPv6.
        (Trac #3569, git 8896c9c3f77a7836d67e6c33943ac4892b851213)

1065.   [func]          fdupont,tomek
        The DHCPv4 server now stores Relay Agent Information option as
        the last one.
        (trac #4121, git 2f883d4afb9b27c6c59d993692370685b206b6c2)

1064.   [doc]           tmark
        Added Kea logo to documentation.
        (trac #3702, git 7cae813ffe9a7320db5c84ac4beb1c3c0ecabbf7)

1063.   [func]          marcin
        It is possible to disable writing generated DHCPv6 server
        identifier in a persistent storage. This also fixes a
        failing distcheck.
        (trac #4211, git d8f39b7aff9312237d4b6d6de39a7336a25ead4c)

1062.   [func]          marcin
        libeval: options may be referenced by their names in
        expressions used for client classification.
        (Trac #4204 git 38aebe9566e09daa30796df686cfdd6d0c43fa4d)

1061.   [func]          kalmus
        MySqlHostDataSource class implementation. It provides methods
        for adding and extracting Host objects to and from MySQL database.
        (Trac #3682, git 275b40fb941a6934c6434715184ae1c39f3fb3f2)

1060.   [func]          stephen
        Incremented KEA_HOOKS_VERSION to 3 for Kea 1.0.
        (Trac #4208, git bf6f3d495604942a395b51bbe4c37001b7541242)

1059.   [func]          nicolas
        The client packet is now passed as a new parameter "query4"
        to the pkt4_send hook point. Thanks to Nicolas Chaigneau from
        Capgemini for providing this patch.
        (Github #8, git )

1058.   [func]          tomek
        Two new hook points lease4_recover and lease6_recover have been
        implemented. They are called when a declined IPv4 or IPv6 lease
        concludes its probation period and is being recovered into
        usable state.
        (Trac #3988, 3989, git 1930797c48fee7f4006a33cecd6f08b05ae76725)

1057.   [func]          marcin
        It is now possible to specify type and value of a DUID used
        as DHCPv6 server identifier.
        (trac #3874, git faf52b069cf774d0050d76b4f47b542b2b5105f2)

1056.   [doc]           sar
        Added description of the expression based classification
        system to the Kea Admin Guide.
        (Trac #4101, git 3ec88e0669470ab406c45d50d0f853f9aeb3bf04)

1055.   [func]          fdupont
        Classify match expressions are evaluated on incoming packets and
        requested options are appended when configured by the subnet, a
        class or globally.
        (Trac #4097, git 752ad11ff4ebe97ec27d098aff706d1999900346)

1054.   [func]          tmark
        Replaced underscores, "_", with hyphens "-", in the parameter
        names used in the kea-ddns server's configuration as well as
        those in the DDNS messages (NCRs) sent to the server. For
        example, "ip_address" is now "ip-address", "change_type" is
        now "change-type".  This makes JSON element naming consistent
        throughout Kea.
        (Trac #4202, git 91bf527662060d4b1e294cd53e79b431edf0e910)

1053.   [doc]           tomek
        Support for DHCPDECLINE (v4) and DECLINE (v6) messages is
        now described in the Kea User's Guide.
        (Trac #3990, git 6b0db91610420f3cce55d9f887d7c73660ece209)

1052.   [func]          marcin
        libeval: expressions involving options can now use textual or
        hexadecimal format of the options.
        (Trac #4093, git 4cdf0fff1067b3dde6570dc6831e8b1343bc50fe)

1051.   [func]          tmark
        kea-dhcp4 and kea-dhcp6 configuration parsing now supports
        the "client-classes" element for defining client classes.
        (Trac #4096, git d21fd6925983eb20f82029e3866652398ea5e5fe)

1050.   [doc]           tmark
        Corrected the descriptions of ncr-protocol and ncr-format parameters
        in the Kea Admin Guide.
        (Trac #4117, git 034c1c95b57768d5abbc7fb40cc57d7cadad21dd)

1049.   [build]         fdupont
        Add a new --enable-generate-parser configuration parameter
        (disabled by default) which makes flex and bison to regenerate
        parser files.
        (trac #4125, git 18321bf85f93b24d720f1ab2d90b4f4da85bc471)

1048.   [func]          fdupont,tomek
        Implement expression parser for client classification.
        (Trac #4088, git ac9eb312bfd1c6bf22a868ad789a0c049f33f637)

1047.   [func]*         stephen
        Change the way that hooks libraries are defined in the configuration
        file in preparation for allowing the specification of library-specific
        parameters in a future version of Kea.
        (Trac #3259, git b2986b0b0299e691b13123922129bdbf8575afdb)

1046.   [func]          tmark
        Upon startup Kea servers will now detect memfile lease files
        that need upgrading, and will launch in instance of the LFC
        to convert them to the most current memfile schema version.
        (Trac #3601, git ce4b0e42e8a01bbf3b58fdb1f505bbd6e2fad134)

1045.   [func]          tmark
        Added classes for storing client class definitions to libdhcpsrv.
        (Trac #4095, git 1039a942450e2a45a1e1aa9924cae4fdbd1541fe)

1044.   [build]         fdupont
        With the addition of a background thread for timeouts, ensure that
        the configuration and process spawning code are thread safe.
        (Trac #4060, git 4c130bd7c8d0eb97966e9821bab491bca5321b6c)

1043.   [func]          fdupont
        Implemented support for hex strings in client classification.
        (Trac #4091, git 406153af95404adb96296df09ec6033b484586e3)

1042.   [doc]           fdupont
        User Guide: parameters having default values may be omitted in the
        option definitions.
        (Trac #3927, git c7460e849258ec77cf1215a2baf840d98f1ab77b)

1041.   [func]          tomek
        A new library, libkea-eval has been added. It is not functional
        yet, but its purpose is to provide a generic expression
        evaluations that will be used in the upcoming client classification.
        (Trac #4081, git 28d818a26a5d128e8a51d62b68c0cc817e6e2415)

1040.   [func]          tmark
        When kea servers lose connectivity with MySQL or PostgreSQL backends
        they will log an error message and exit with an exit value of 255.
        (Trac #3780, git cf94e99698e1d8a1613026bda5e4fc9bb4a68d74)

1039.   [doc]           marcin
        Configuration parameters pertaining to processing expired
        leases by the DHCPv4 and DHCPv6 server have been documented.
        (Trac #3979, git a2ee99ba313e54a9dcf8a09ed118dbfe612e3d55)

1038.   [func]*         marcin
        DHCPv4 and DHCPv6 servers reclaim expired leases before they
        are re-assigned.
        (Trac #3977, git 5880e706cb27c19b1b70296ccd8d96e38e82027b)

1037.   [func]          fdupont
        Added a new 'leases-reclaim' command which reclaims expired leases
        (Trac #3978, git 9d5716e5bd6b151d90591f8497bae689321875c2)

1036.   [func]          tmark
        kea-admin now supports upgrading from Postgres schema version
        1.0 to 2.0.  Schema 2.0 includes support for lease expiration
        and reclamation.
        (Trac #3969, git 8fde70c1b63b5a2646688290b1d0cf53f4c964ad)

1035.   [doc]           fdupont
        Modified documentation of DHCP options to show internal format
        of records.
        (Trac #4071, git c5cffe74ac1bd38e4870ff1c22c36febb46e8c27))

1034.   [func]          fdupont
        Add support for DHCPv4 subnet selection option.
        (Trac #4058, git b7072884e8ce74dc64cd74e101d81e5c0763f492)

1033.   [bug]           stephen
        Updated OutputBuffer class to address warnings from Coverity.
        (Trac #3443, git 4bf0a14aa7a1303ed6959127c5354687e9f222ba)

1032.   [func]          marcin
        PostgreSQL lease database backend has been extended with new
        functions to obtain expired leases and to delete expired
        reclaimed leases.
        (Trac #3968, git 0bc02588d8553ba9a4fc749115a3e370407d7287)

1031.   [build]         fdupont
        Rewrote the system_messages tool from Python to C++.
        (Trac #3516, git a8195310c641027d1822344cafad64e6f695d614)

1030.   [bug]           marcin
        Fixed failing 'reclaimExpiredLeasesTimeout' unit tests on
        some virtual machines.
        (Trac #4075, git c3a2487f53ecf69edc0a38f574fce17c4332162c)

1029.   [func]          tomek
        A new hook point lease6_decline has been added. It is called when
        the DHCPv6 server is about to decline a lease as a result of
        processing incoming DECLINE message.
        (Trac #3986, git b6e3f1bbe3595aeba769d627d571e2eeee38a397)

1028.   [func]          marcin
        Expired leases are processed periodically according to the
        server configuration.
        (Trac #3975, git 3bd8891c0b9cb7dc504fa69251610996775cefbf)

1027.   [func]          tomek
        Expired declined IPv6 leases can now be reclaimed (returned to the
        available pool) after probation period elapses.
        (Trac #3985, git 9aadfa902d898ce1f52b773152a5b34519a9a9fe)

1026.   [doc]           stephen
        Added documentation for the kea-dhcp4.commands and
        kea-dhcp6.commands loggers.
        (Trac #3952, git 3eb5d3185683e05494c1d84ed7195627fce4b6c1)

1025.   [func]          tomek
        A new hook point lease4_decline has been added. It is called when
        the DHCPv4 server is about to decline a lease as a result of
        processing incoming DHCPDECLINE message.
        (Trac #3986, git 39bde93fe25e4aff52623d4df7fd55c64e0a9c21)

1024.   [func]*         tomek
        Boolean Skip flag in Hooks API has been replaced by enum status.
        This is backward incompatible change if you developed hook
        library that takes advantage of the skip flag. See Hooks
        Developer Guide for easy steps necessary for migration.
        (Trac #3499, git 99ca398d4d042a098b5c491368733220db8cdd08)

1023.   [func]          tmark
        kea-admin now supports upgrading from MySQL schema version 3.0
        to 4.0.  In addition, the lease6 data dump now contains the
        text label for lease_hwaddr_source column rather than its
        numeric value.
        (Trac #3967, git 2e13ac3b0b278faabe338b00ffee8259c13f5342)

1022.   [func]          fdupont
        Added support for the V4 link selection sub-option (RFC 3527).  If
        present in an incoming packet, the server will allocate an address
        in the subnet identified in the option. If this is impossible, no
        address will be allocated and the request refused.
        (Trac #4057, git 8c02cec5ec8e311a9d23fd582d8e9e8647667abb)

1021.   [bug]           stephen
        Added missing address parameter to ALLOC_ENGINE_V4_REQUEST_OUT_OF_POOL
        (Trac #3996, git 680233550747209a1707e8f920179479b980aa2a)

1020.   [func]          kalmus
        A general purpose base class for MySQL connection has been
        (Trac #3681, git 884d8bb4a55d3d7b1b8f3f01efb312bd8dec399b)

1019.   [func]          marcin
        Added new configuration parameters controlling processing of the
        expired leases in the DHCPv4 and DHCPv6 server.
        (Trac #3974, git c998d36c40cc46ffe9f888e615bbcfa0a311d40d)

1018.   [func]          sar
        Added support for several options for use by PXE.
        From RFC4578 (for DHCPv4) these are: 93 - client-system,
        94 - client-ndi, 97 - uuid-guid.
        From RFC5970 (for DHCPv6) these are: 59 - bootfile-url,
        60 - bootfile-param, 61 - client-arch-type, 62 - nii.
        (Trac #3576, git fdcc73afe7e26bd427817fd771567b1c44713b06)

1017.   [func]          tmark
        Lease dump SQL logic, used by kea-admin, is now supplied via stored
        procedures rather than external text files.  Files of the form
        lease_dump_<version>.sh will no longer be installed under
        (Trac #3916, git 09cdd86a5e284250d7657a93a36df2e2705947d2)

1016.   [bug]           fdupont
        Fixed problems when --enable-static-link is specified as a
        "configure" option. With this switch present, all Kea
        executables (servers, tools, unit tests, etc) are linked
        to the static (vs. shared) version of Kea libraries.
        However, note that they can still be linked to dynamic
        system libraries.
        (Trac #4004, git 760a343efbd241f5ed333cfff088124378f69115)

1015.   [func]          tomek
        Expired declined leases can now be reclaimed (returned to the
        available pool) after probation period elapses.
        (Trac #3984, #3976, git 32a8ec68e0e5ea93991915812158d7628d2b4709)

1014.   [func]          marcin
        Implemented lease4_expire and lease6_expire hooks in libdhcpsrv.
        (Trac #3972, git 8a8547aec1caf2a8d1c7ca206f68534f3c03f1d9)

1013.   [func]          marcin
        New mechanism for scheduling lease file cleanup is used in the
        DHCPv4 and DHCPv6 servers.
        (Trac #3971, git 431d515fc3d64aa82369c8eaf48d03339f12dc69)

1012.   [bug]           stephen
        Replace #include of message_dictionary.h in message_initializer.h
        with a declaration of the MessageDictionary class, avoiding the need
        to include message_dictionary.h in the set of header files installed.
        (Trac #4046, git 9f1801b4326f62632a7c9f0aa939d58f120c10e8)

1011.   [func]          fdupont
        Added definitions and tests for the options from secure DHCPv6.
        This protocol is still experimental. The option and other protocol
        codes are for testing, they will be updated when IANA assigns
        official values.
        (Trac #4015, git 95f8c0d0af45807c1f303b9bbbb08f82b3bfc343)

1010.   [bug]           tmark
        Fixed test failures occurring for some tests after
        IfaceMgr::closeSockets was called.
        (Trac #4067, git 9161867dc6a354659ae8b5115ee437ec76c1771e)

1009.   [bug]           fdupont
        Now libutil blocks all signals when creating a new thread
        (so signals are delivered only to the main thread).
        (Trac #4065, git a4a8e422e613e4378f0a0641e4c480b73d67ebeb)

1008.   [build]         fdupont
        Removed the included header-only ASIO code.  Kea is now built
        against the installed copy of Boost.  The build by default
        attempts to use the header-only error code (ASIO dependency), but
        may also use the version in the boost system library.  The
        location of this library can be specified.
        (Trac #4009, git 8c293bc0d1804a512964621f114e64fcba0abcb9)

1007.   [func]          tomek
        DECLINE message in DHCPv6 is now supported. The server is able
        to receive it, check its correctness and move the lease to
        DECLINED state. Currently there is no way to recover the lease
        before 'decline-probation-period' time.
        (Trac #3982, git 11e2c4366d8624601172c01e95cff6a8b95833b3)

1006.   [bug]           marcin
        Fixed issues with threads concurrency in the TimerMgr.
        (Trac #4047, git 48297af6e0443808a482536b61436a42bc6a5b38)

1005.   [func]          tomek
        DHCPDECLINE message in DHCPv4 is now supported. The server is able
        to receive it, check its correctness and move the lease to
        DECLINED state. Currently there is no way to recover the lease
        before 'decline-probation-period' time.
        (Trac #3981, git c14a63c0d3a56ea3e880e874f854adc0077de75e)

1004.   [bug]           fdupont
        Incoming Confirm, Rebind and Information-Request messages are
        now more thoroughly checked against presence of client-id
        and server-id options.
        (Trac #3773, git fd2889b9de45e2822b6713663bee06b75259c6dc)

1003.   [build]         fdupont
        Updated Makefiles to ensure that all required dynamic libraries
        are included in the link command line as some systems are unable
        handle implied library dependencies.
        (Trac #3911, git 4d13f5234da33df03c0989829a0e1c1056e53a4e)

1002.   [func]          marcin
        MySQL lease database backend has been extended with new
        functions to obtain expired leases and to delete expired
        reclaimed leases.
        (Trac #3966, git 419832a6279c70b5db04b1cab10737e31f2c99f9)

1001.   [build]         fdupont
        Fixed critical C++ issues in the Kea code. This does not cover
        auto_ptr warnings (just ignore them) or the gtest 1.7.0 bug with
        EXPECT_TRUE() and ASSERT_TRUE() macros (we recommend to download
        last subversion sources at <a class="moz-txt-link-freetext" href="http://googletest.googlecode.com/svn/trunk">http://googletest.googlecode.com/svn/trunk</a>
        and use the --with-gtest-source configuration argument when
        you'd like to build unit tests).
        (Trac #4024, git 55afd98fead0c16bb81107dfc1a5f49a5e295aa6)

1000.   [func]          marcin
        Implemented Timer Manager which holds the pool of interval
        timers used by the DHCP servers.
        (Trac #3970, git bc8503055338da36d07a2b67c64087f645c9a9e3)

999.    [func]*         tmark
        The DHCPv4 server will now honor DHCPRELEASEs for leased addresses
        which cannot be matched to subnet.  This allows leases to be
        released after configuration changes have eliminated their subnet.
        Prior to this the server would reject the release and emit a
        DHCP4_RELEASE_FAIL_NO_SUBNET log message.
        (Trac #2615, git eeebf9f68cf5be6a0f7eefc78832d664361c4990)

998.    [func]          tomek
        'decline-probation-period' parameter has been added to DHCPv4
        and DHCPv6 configuration. It can be configured, but is not yet
        used, as the DECLINE message support is still pending implementation.
        (Trac #3983, git 6b10d119c89685476335f268181c9982f6fa6161)

997.    [build]         jreed
        Removed obsolete Python coverage build options.
        (Trac #3483, git a08cbbecbd3b11d0b73f68a40986a353b22ed3be)

996.    [func]          marcin
        Memfile lease database backend has been extended with new
        functions to obtain expired leases and to delete expired
        reclaimed leases.
        (Trac #3965, git dd5b95453528416f22e961e6ebb3051bc2ae788c)

995.    [build]         fdupont
        Removed additional files left over from BIND 10 (headers,
        (Trac #40{28,29,31}, git 78ff0fb0a97731a8b3c055b1cbb4faebcd115f7c)

994.    [func]*         marcin
        DHCPv6 server fully supports RFC 7550.
        (Trac #3947, git c06ab97a4e068c4b4b11f4685c56dd402b2385dc)

993.    [bug]           fdupont
        The logging spec file was searched in the build tree when it
        was in the source tree so distcheck (where they differ) failed.
        (Trac #4026, git 5eb213647d7ac0a707530d57af2c6dbd725ac1b3)

992.    [func]          fdupont
        A 'flush' parameter has been added to logging configuration. It is
        now possible to disable automatic immediate flushing to achieve
        better logging performance.
        (Trac #3752, git 16c4c2b6d95c45864ec3e2b27e0d320e386b2c0b)

991.    [build]         fdupont
        Removed partial function template ordering macros to allow Kea to
        build with Boost 1.59 and later.  Also removed some
        compiler-dependent code.
        (Trac #4006, git e06934f211436eea37439128ff6f388709f01101)

990.    [bug]           tomek
        Improved child process signal handling. Improved number of
        exception handling routines in DHCPv4 and DHCPv6.
        (Trac #4000, git bf5e48f2cf80b5263cc89f445795bc8c5b8f011d)

Thank you again to everyone who assisted us in making this release
possible. If you would like to contribute to ISC to assist us in
continuing to make quality open source software, please visit our
donations page at <a class="moz-txt-link-freetext" href="http://www.isc.org/donate-to-isc/">http://www.isc.org/donate-to-isc/</a>.

We look forward to receiving your feedback.</pre>