···97979898Follow these steps to backport a change into a release branch in compliance with the [commit policy](https://nixos.org/nixpkgs/manual/#submitting-changes-stable-release-branches).9999100100+You can add a label such as `backport release-22.05` to a PR, so that merging it will101101+automatically create a backport (via [a GitHub Action](.github/workflows/backport.yml)).102102+This also works for PR's that have already been merged, and might take a couple of minutes to trigger.103103+104104+You can also create the backport manually:105105+1001061. Take note of the commits in which the change was introduced into `master` branch.1011072. Check out the target _release branch_, e.g. `release-21.11`. Do not use a _channel branch_ like `nixos-21.11` or `nixpkgs-21.11-darwin`.1021083. Create a branch for your change, e.g. `git checkout -b backport`.
···9292 <itemizedlist spacing="compact">9393 <listitem>9494 <para>9595- Please remove this line when you add the first item since9696- docbook requires the section to be non-empty9595+ A new module was added for the Saleae Logic device family,9696+ providing the options9797+ <literal>hardware.saleae-logic.enable</literal> and9898+ <literal>hardware.saleae-logic.package</literal>.9799 </para>98100 </listitem>99101 </itemizedlist>
+2-1
nixos/doc/manual/release-notes/rl-2211.section.md
···44444545## Other Notable Changes {#sec-release-22.11-notable-changes}46464747-- Please remove this line when you add the first item since docbook requires the section to be non-empty4747+* A new module was added for the Saleae Logic device family, providing the options `hardware.saleae-logic.enable` and `hardware.saleae-logic.package`.4848+4849<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
···1818 # container available within the VM, because we don't have network access.1919 virtualisation.additionalPaths = let2020 emptyContainer = import ../lib/eval-config.nix {2121- inherit (config.nixpkgs.localSystem) system;2221 modules = lib.singleton {2222+ nixpkgs = { inherit (config.nixpkgs) localSystem; };2323+2324 containers.foo.config = {2425 system.stateVersion = "18.03";2526 };
+20-11
nixos/tests/os-prober.nix
···7575 # The test cannot access the network, so any packages7676 # nixos-rebuild needs must be included in the VM.7777 system.extraDependencies = with pkgs;7878- [ sudo7979- libxml2.bin8080- libxslt.bin7878+ [7979+ brotli8080+ brotli.dev8181+ brotli.lib8182 desktop-file-utils8283 docbook58384 docbook_xsl_ns8484- unionfs-fuse8585- ntp8686- nixos-artwork.wallpapers.simple-dark-gray-bottom8787- perlPackages.XMLLibXML8888- perlPackages.ListCompare8989- shared-mime-info9090- texinfo9191- xorg.lndir9285 grub28686+ kmod.dev8787+ libarchive8888+ libarchive.dev8989+ libxml2.bin9090+ libxslt.bin9191+ nixos-artwork.wallpapers.simple-dark-gray-bottom9292+ ntp9393+ perlPackages.ListCompare9494+ perlPackages.XMLLibXML9595+ python3Minimal9696+ shared-mime-info9797+ stdenv9898+ sudo9999+ texinfo100100+ unionfs-fuse101101+ xorg.lndir9310294103 # add curl so that rather than seeing the test attempt to download95104 # curl's tarball, we see what it's trying to download
···44}:55stdenv.mkDerivation rec {66 pname = "nauty";77- version = "27r1";77+ version = "2.7r3";88+89 src = fetchurl {99- url = "https://pallini.di.uniroma1.it/nauty${version}.tar.gz";1010- sha256 = "0xsfqfcknbd6g6wzpa5l7crmmk3bf3zjh37rhylq6b20dqcmvjkn";1010+ url = "https://pallini.di.uniroma1.it/nauty${builtins.replaceStrings ["."] [""] version}.tar.gz";1111+ sha256 = "sha256-TwZltxalP3oU6irjAFnyPQZM4/5MEsATQE724e4LiMI=";1112 };1313+1214 outputs = [ "out" "dev" ];1515+1316 configureFlags = [1417 # Prevent nauty from sniffing some cpu features. While those are very1518 # widely available, it can lead to nasty bugs when they are not available:1619 # https://groups.google.com/forum/#!topic/sage-packaging/Pe4SRDNYlhA2020+ "--enable-generic" # don't use -march=native1721 "--${if stdenv.hostPlatform.sse4_2Support then "enable" else "disable"}-popcnt"1822 "--${if stdenv.hostPlatform.sse4_aSupport then "enable" else "disable"}-clz"1923 ];2424+2025 installPhase = ''2126 mkdir -p "$out"/{bin,share/doc/nauty} "$dev"/{lib,include/nauty}2227···3328 cp "$i" "$dev/lib/lib$i";3429 done3530 '';3131+3632 checkTarget = "checks";3333+3734 meta = with lib; {3835 description = "Programs for computing automorphism groups of graphs and digraphs";3936 license = licenses.asl20;
+3-2
pkgs/applications/science/math/pari/default.nix
···13131414stdenv.mkDerivation rec {1515 pname = "pari";1616- version = "2.13.3";1616+ version = "2.13.4";17171818 src = fetchurl {1919 urls = [···2121 # old versions are at the url below2222 "https://pari.math.u-bordeaux.fr/pub/pari/OLD/${lib.versions.majorMinor version}/${pname}-${version}.tar.gz"2323 ];2424- hash = "sha256-zLp/FgbGhU8UQ2N7tXrQlY1Bx/R1P4roRZ8dZMJnoco=";2424+ hash = "sha256-vN6ezq4VkoFDgcFpfNtwY1Z7ZQQgGxvke7WJIPO84YU=";2525 };26262727 buildInputs = [···8282 license = licenses.gpl2Plus;8383 maintainers = with maintainers; [ ertes AndersonTorres ] ++ teams.sage.members;8484 platforms = platforms.linux ++ platforms.darwin;8585+ mainProgram = "gp";8586 };8687}
···11+diff --git a/kitty_tests/ssh.py b/kitty_tests/ssh.py22+index 1f424146..d3cc191b 10064433+--- a/kitty_tests/ssh.py44++++ b/kitty_tests/ssh.py55+@@ -166,7 +166,7 @@ def test_ssh_bootstrap_with_different_launchers(self):66+ for sh in self.all_possible_sh:77+ if sh == 'sh' or 'python' in sh:88+ q = shutil.which(launcher)99+- if q:1010++ if q and not 'zsh' in q:1111+ with self.subTest(sh=sh, launcher=q), tempfile.TemporaryDirectory() as tdir:1212+ self.check_bootstrap(sh, tdir, test_script='env; exit 0', SHELL_INTEGRATION_VALUE='', launcher=q)1313+
···11+diff --git a/kitty_tests/ssh.py b/kitty_tests/ssh.py22+index 1f424146..57620334 10064433+--- a/kitty_tests/ssh.py44++++ b/kitty_tests/ssh.py55+@@ -197,7 +197,7 @@ def test_ssh_login_shell_detection(self):66+ expected_login_shell = pwd.getpwuid(os.geteuid()).pw_shell77+ for m in methods:88+ for sh in self.all_possible_sh:99+- if 'python' in sh:1010++ if 'python' in sh or '/sbin/nologin' in expected_login_shell:1111+ continue1212+ with self.subTest(sh=sh, method=m), tempfile.TemporaryDirectory() as tdir:1313+ pty = self.check_bootstrap(sh, tdir, test_script=f'{m}; echo "$login_shell"; exit 0', SHELL_INTEGRATION_VALUE='')
···11+From 59f6876187da2c01b35e696e169ca98239c08a41 Mon Sep 17 00:00:00 200122+From: Jason Felice <jason.m.felice@gmail.com>33+Date: Tue, 24 May 2022 07:54:25 -040044+Subject: [PATCH] Restore write permissions in tarball55+66+In Nix, the source files are stored in an immutable store and77+therefore have been stripped of write permissions. When the SSH88+kitten makes the tarfile, the files contained in it are also missing99+the write permissions, causing commands on the remote side to fail.1010+---1111+ kittens/ssh/main.py | 1 +1212+ 1 file changed, 1 insertion(+)1313+1414+diff --git a/kittens/ssh/main.py b/kittens/ssh/main.py1515+index 0b50d5ff..f80ac13d 1006441616+--- a/kittens/ssh/main.py1717++++ b/kittens/ssh/main.py1818+@@ -123,6 +123,7 @@ def make_tarfile(ssh_opts: SSHOptions, base_env: Dict[str, str], compression: st1919+ def normalize_tarinfo(tarinfo: tarfile.TarInfo) -> tarfile.TarInfo:2020+ tarinfo.uname = tarinfo.gname = ''2121+ tarinfo.uid = tarinfo.gid = 02222++ tarinfo.mode |= 0o2002323+ return tarinfo2424+2525+ def add_data_as_file(tf: tarfile.TarFile, arcname: str, data: Union[str, bytes]) -> tarfile.TarInfo:2626+--2727+2.36.0
···8899buildPythonPackage rec {1010 pname = "bc-python-hcl2";1111- version = "0.3.41";1111+ version = "0.3.42";1212 format = "setuptools";13131414 disabled = pythonOlder "3.6";15151616 src = fetchPypi {1717 inherit pname version;1818- hash = "sha256-TrQtG2MWc4prr8grEE1XifjjLq7GPe6JPRMgpNNGfPY=";1818+ hash = "sha256-s4O2xoNafYHFBToxkKzgJ5NjQH4M5D7PcpsmiAZqR/8=";1919 };20202121 # Nose is required during build process, so can not use `checkInputs`.
···6677buildPythonPackage {88 pname = "Flask-Silk";99- version = "2018-06-28";99+ version = "unstable-2018-06-28";10101111 # master fixes flask import syntax and has no major changes1212 # new release requested: https://github.com/sublee/flask-silk/pull/6
···88, dask99, distributed1010, pytestCheckHook1111+, pythonOlder1112}:12131314buildPythonPackage rec {1415 pname = "stumpy";1515- version = "1.10.2";1616+ version = "1.11.1";1717+ format = "setuptools";1818+1919+ disabled = pythonOlder "3.7";16201721 src = fetchFromGitHub {1822 owner = "TDAmeritrade";1923 repo = "stumpy";2020- rev = "v${version}";2121- sha256 = "1v17lxqgvkd3n33c2y1j1zy74xy92vsx2l89yhan89msnnb7aafr";2424+ rev = "refs/tags/v${version}";2525+ hash = "sha256-ARpXqZpWkbvIEDVkxA1SwlWoxq+3WO6tvv/e7WZ/25c=";2226 };23272428 propagatedBuildInputs = [···3834 pytestCheckHook3935 ];40363737+ pythonImportsCheck = [3838+ "stumpy"3939+ ];4040+4141 pytestFlagsArray = [4242 # whole testsuite is very CPU intensive, only run core tests4343 # TODO: move entire test suite to passthru.tests···4941 ];50425143 meta = with lib; {5252- description = "A powerful and scalable library that can be used for a variety of time series data mining tasks";4444+ description = "Library that can be used for a variety of time series data mining tasks";5345 homepage = "https://github.com/TDAmeritrade/stumpy";5446 license = licenses.bsd3;5555- maintainers = [ maintainers.costrouc ];4747+ maintainers = with maintainers; [ costrouc ];5648 };5749}
···1919, libXrender2020, libglvnd2121, libpulseaudio2222+, perl2223, zlib2324, udev # for libudev2425}:···5554 libXrender5655 libglvnd5756 libpulseaudio5757+ perl5858 zlib5959 udev6060 ];···7169 categories = [ "Game" ];7270 })7371 ];7272+7373+ # patch shebangs so that e.g. the fake-editor script works:7474+ # error: /usr/bin/env 'perl': No such file or directory7575+ # error: There was a problem with the editor7676+ postPatch = ''7777+ patchShebangs scripts7878+ '';74797580 buildPhase = ''7681 runHook preBuild
+55-28
pkgs/games/openxray/default.nix
···11-{ lib, stdenv, fetchFromGitHub, cmake, glew, freeimage, liblockfile22-, openal, libtheora, SDL2, lzo, libjpeg, libogg, tbb33-, pcre, makeWrapper, fetchpatch }:11+{ lib22+, stdenv33+, fetchFromGitHub44+, cmake55+, glew66+, freeimage77+, liblockfile88+, openal99+, libtheora1010+, SDL21111+, lzo1212+, libjpeg1313+, libogg1414+, pcre1515+, makeWrapper1616+, enableMultiplayer ? false # Requires old, insecure Crypto++ version1717+}:418519let66- version = "822-december-preview";2020+ version = "1144-december-2021-rc1";721822 src = fetchFromGitHub {923 owner = "OpenXRay";1024 repo = "xray-16";1125 rev = version;1226 fetchSubmodules = true;1313- sha256 = "06f3zjnib7hipyl3hnc6mwcj9f50kbwn522wzdjydz8qgdg60h3m";2727+ sha256 = "07qj1lpp21g4p583gvz5h66y2q71ymbsz4g5nr6dcys0vm7ph88v";1428 };15291630 # https://github.com/OpenXRay/xray-16/issues/5181717- cryptopp = stdenv.mkDerivation {3131+ ancientCryptopp = stdenv.mkDerivation {1832 pname = "cryptopp";1933 version = "5.6.5";2034···36223723 sourceRoot = "source/Externals/cryptopp";38243939- makeFlags = [ "PREFIX=${placeholder "out"}" ];2525+ installFlags = [ "PREFIX=${placeholder "out"}" ];2626+4027 enableParallelBuilding = true;41284229 doCheck = true;3030+3131+ dontStrip = true;43324433 meta = with lib; {4534 description = "Crypto++, a free C++ class library of cryptographic schemes";4635 homepage = "https://cryptopp.com/";4736 license = with licenses; [ boost publicDomain ];4837 platforms = platforms.all;3838+ knownVulnerabilities = [3939+ "CVE-2019-14318"4040+ ];4941 };5042 };5151-in stdenv.mkDerivation rec {4343+in4444+stdenv.mkDerivation rec {5245 pname = "openxray";4646+5347 inherit version src;54485555- # TODO https://github.com/OpenXRay/GameSpy/pull/6, check if merged in version > 8225656- # Fixes format hardening5757- patches = [5858- (fetchpatch {5959- url = "https://github.com/OpenXRay/GameSpy/pull/6/commits/155af876281f5d94f0142886693314d97deb2d4c.patch";6060- sha256 = "1l0vcgvzzx8n56shpblpfdhvpr6c12fcqf35r0mflaiql8q7wn88";6161- stripLen = 1;6262- extraPrefix = "Externals/GameSpy/";6363- })4949+ nativeBuildInputs = [5050+ cmake5151+ makeWrapper6452 ];6565-6666- cmakeFlags = [ "-DCMAKE_INCLUDE_PATH=${cryptopp}/include/cryptopp" ];67536854 buildInputs = [6969- glew freeimage liblockfile openal cryptopp libtheora SDL2 lzo7070- libjpeg libogg tbb pcre5555+ glew5656+ freeimage5757+ liblockfile5858+ openal5959+ libtheora6060+ SDL26161+ lzo6262+ libjpeg6363+ libogg6464+ pcre6565+ ] ++ lib.optionals enableMultiplayer [6666+ ancientCryptopp7167 ];72687373- nativeBuildInputs = [ cmake makeWrapper ];6969+ # Crashes can happen, we'd like them to be reasonably debuggable7070+ cmakeBuildType = "RelWithDebInfo";7171+ dontStrip = true;74727575- # https://github.com/OpenXRay/xray-16/issues/7867676- preConfigure = ''7777- substituteInPlace src/xrCore/xrCore.cpp \7878- --replace /usr/share $out/share7979- '';7373+ cmakeFlags = [7474+ "-DUSE_CRYPTOPP=${if enableMultiplayer then "ON" else "OFF"}"7575+ ] ++ lib.optionals enableMultiplayer [7676+ "-DCMAKE_INCLUDE_PATH=${ancientCryptopp}/include/cryptopp"7777+ ];80788179 postInstall = ''8280 # needed because of SDL_LoadObject library loading code···9771 '';98729973 meta = with lib; {7474+ mainProgram = "xray-16";10075 description = "Improved version of the X-Ray Engine, the game engine used in the world-famous S.T.A.L.K.E.R. game series by GSC Game World";101101- homepage = src.meta.homepage;7676+ homepage = "https://github.com/OpenXRay/xray-16/";10277 license = licenses.unfree // {10378 url = "https://github.com/OpenXRay/xray-16/blob/xd_dev/License.txt";10479 };
···2424 ];25252626 # skips tests with external dependencies, e.g. on mysqld2727- checkFlags = [ "-short" ];2727+ preCheck = ''2828+ buildFlagsArray+="-short"2929+ '';28302931 meta = with lib; {3032 description = "Prometheus exporter for MySQL server metrics";
···2233stdenv.mkDerivation rec {44 pname = "stunnel";55- version = "5.63";55+ version = "5.64";6677 src = fetchurl {88 url = "https://www.stunnel.org/downloads/${pname}-${version}.tar.gz";99- sha256 = "sha256-x0xOFRRKOuNLi4kLsxyQkgcwFJC9HlG/qqX/6wqZRhc=";99+ sha256 = "sha256-7r5T7RFrpDsueGdisMK5FRHnt0hXrUdlgk5xmeb6+IM=";1010 # please use the contents of "https://www.stunnel.org/downloads/${name}.tar.gz.sha256",1111 # not the output of `nix-prefetch-url`1212 };
···3737 sed -i '/\(chown\|chmod\)/d' GNUmakefile3838 '';39394040- buildInputs = [ bison pam ];4040+ nativeBuildInputs = [ bison ];4141+ buildInputs = [ pam ];41424243 meta = with lib; {4344 description = "Executes the given command as another user";
+4-3
pkgs/tools/security/gpg-tui/default.nix
···16161717rustPlatform.buildRustPackage rec {1818 pname = "gpg-tui";1919- version = "0.8.3";1919+ version = "0.9.0";20202121 src = fetchFromGitHub {2222 owner = "orhun";2323 repo = "gpg-tui";2424 rev = "v${version}";2525- hash = "sha256-lqV09FEZAw1ir2cJr8ABhbgSoZoWnxhbxyA1HAufLQA=";2525+ hash = "sha256-iIMpAAIw6djLNP9lnrHV7D198VcHspQP4OHcr2LNKOA=";2626 };27272828- cargoHash = "sha256-RMF4/WJRcpHuXKMvDYAGaJxUazcpkQCpv//u5XOd9Dg=";2828+ cargoHash = "sha256-xrv1tFzPReHDA+gr/RPCvSM7Sa7v8OKAEY+fSUjPT50=";29293030 nativeBuildInputs = [3131 gpgme # for gpgme-config···4949 meta = with lib; {5050 description = "Terminal user interface for GnuPG";5151 homepage = "https://github.com/orhun/gpg-tui";5252+ changelog = "https://github.com/orhun/gpg-tui/blob/${src.rev}/CHANGELOG.md";5253 license = licenses.mit;5354 maintainers = with maintainers; [ dotlambda ];5455 };
+44-46
pkgs/tools/security/honggfuzz/default.nix
···11{ lib, stdenv, fetchFromGitHub, callPackage, makeWrapper, clang, llvm, libbfd22, libopcodes, libunwind, libblocksruntime }:3344-let55- honggfuzz = stdenv.mkDerivation rec {66- pname = "honggfuzz";77- version = "2.5";44+stdenv.mkDerivation rec {55+ pname = "honggfuzz";66+ version = "2.5";8799- src = fetchFromGitHub {1010- owner = "google";1111- repo = pname;1212- rev = version;1313- sha256 = "sha256-TkyUKmiiSAfCnfQhSOUxuce6+dRyMmHy7vFK59jPIxM=";1414- };1515-1616- postPatch = ''1717- substituteInPlace hfuzz_cc/hfuzz-cc.c \1818- --replace '"clang' '"${clang}/bin/clang'1919- '';2020-2121- enableParallelBuilding = true;2222-2323- nativeBuildInputs = [ makeWrapper ];2424- buildInputs = [ llvm ];2525- propagatedBuildInputs = [ libbfd libopcodes libunwind libblocksruntime ];2626-2727- makeFlags = [ "PREFIX=$(out)" ];2828-2929- meta = {3030- description =3131- "A security oriented, feedback-driven, evolutionary, easy-to-use fuzzer";3232- longDescription = ''3333- Honggfuzz is a security oriented, feedback-driven, evolutionary,3434- easy-to-use fuzzer with interesting analysis options. It is3535- multi-process and multi-threaded, blazingly fast when the persistent3636- fuzzing mode is used and has a solid track record of uncovered security3737- bugs.3838-3939- Honggfuzz uses low-level interfaces to monitor processes and it will4040- discover and report hijacked/ignored signals from crashes. Feed it4141- a simple corpus directory (can even be empty for the feedback-driven4242- fuzzing), and it will work its way up, expanding it by utilizing4343- feedback-based coverage metrics.4444- '';4545- homepage = "https://honggfuzz.dev/";4646- license = lib.licenses.asl20;4747- platforms = [ "x86_64-linux" ];4848- maintainers = with lib.maintainers; [ cpu chivay ];4949- };88+ src = fetchFromGitHub {99+ owner = "google";1010+ repo = pname;1111+ rev = version;1212+ sha256 = "sha256-TkyUKmiiSAfCnfQhSOUxuce6+dRyMmHy7vFK59jPIxM=";5013 };5151-in honggfuzz1414+1515+ postPatch = ''1616+ substituteInPlace hfuzz_cc/hfuzz-cc.c \1717+ --replace '"clang' '"${clang}/bin/clang'1818+ '';1919+2020+ enableParallelBuilding = true;2121+2222+ nativeBuildInputs = [ makeWrapper ];2323+ buildInputs = [ llvm ];2424+ propagatedBuildInputs = [ libbfd libopcodes libunwind libblocksruntime ];2525+2626+ makeFlags = [ "PREFIX=$(out)" ];2727+2828+ meta = {2929+ description =3030+ "A security oriented, feedback-driven, evolutionary, easy-to-use fuzzer";3131+ longDescription = ''3232+ Honggfuzz is a security oriented, feedback-driven, evolutionary,3333+ easy-to-use fuzzer with interesting analysis options. It is3434+ multi-process and multi-threaded, blazingly fast when the persistent3535+ fuzzing mode is used and has a solid track record of uncovered security3636+ bugs.3737+3838+ Honggfuzz uses low-level interfaces to monitor processes and it will3939+ discover and report hijacked/ignored signals from crashes. Feed it4040+ a simple corpus directory (can even be empty for the feedback-driven4141+ fuzzing), and it will work its way up, expanding it by utilizing4242+ feedback-based coverage metrics.4343+ '';4444+ homepage = "https://honggfuzz.dev/";4545+ license = lib.licenses.asl20;4646+ platforms = [ "x86_64-linux" ];4747+ maintainers = with lib.maintainers; [ cpu chivay ];4848+ };4949+}
+3-3
pkgs/tools/security/step-cli/default.nix
···5566buildGoModule rec {77 pname = "step-cli";88- version = "0.19.0";88+ version = "0.20.0";991010 src = fetchFromGitHub {1111 owner = "smallstep";1212 repo = "cli";1313 rev = "v${version}";1414- sha256 = "sha256-ZH3OrJGh7TekODW5rh8JShNHKfuxPr5HhVD7wsvi8M0=";1414+ sha256 = "sha256-CCtK7FuOOO6Ht4WjBpFVcfCL4XE3XR52WDahP4JDJ7M=";1515 };16161717 ldflags = [···2525 rm command/certificate/remote_test.go2626 '';27272828- vendorSha256 = "sha256-hJEL6kUc6aXKq7X23dRWhAni5oRDJ3CuNTx6JL049gA=";2828+ vendorSha256 = "sha256-O2B8NMsFxyRLsOi8Zznr2NaqktX9k8ZtWPeaFlkNUnE=";29293030 meta = with lib; {3131 description = "A zero trust swiss army knife for working with X509, OAuth, JWT, OATH OTP, etc";
···5566rustPlatform.buildRustPackage rec {77 pname = "each";88- version = "0.1.3";88+ version = "0.2.0";991010 src = fetchFromGitHub {1111 owner = "arraypad";1212 repo = pname;1313 rev = "v${version}";1414- sha256 = "04rx8jf871l4darfx6029dhpnbpmzwjgzazayp1qcaadsk8207z5";1414+ sha256 = "sha256-5Aa/uHWrU4bpWd28Uddnuhmi6guHy09W9AU8sAfea6I=";1515 };16161717- cargoSha256 = "1r7nzfh7v2mlp0wdrcpqfj68h3zmip2m3d4z2nwxyikmw7c80car";1717+ cargoSha256 = "sha256-sH9rraPNAIlW2KQVaZfYa10c1HHQpDgedY1+9e94RLE=";18181919 meta = with lib; {2020 description = " A better way of working with structured data on the command line";