View on GitHub
File Changes
#!/usr/bin/env bash
-
nix build -f `dirname $0`/../default.nix nix-tools.tests.cardano-ledger.cardano-ledger-test -o cardano-ledger-test
+
nix build -f `dirname $0`/.. haskellPackages.cardano-ledger.components.tests.cardano-ledger-test -o cardano-ledger-test
cd cardano-ledger && ../cardano-ledger-test/bin/cardano-ledger-test --scenario=QualityAssurance
steps:
+
  - label: 'hydra-eval-errors'
+
    command: 'nix-build ./nix -A iohkNix.hydraEvalErrors && ./result/bin/hydra-eval-errors.py'
+
    agents:
+
      system: x86_64-linux
+

                      
  - label: 'stack rebuild'
    env:
      STACK_ROOT: "/build/cardano-ledger.stack"
    command:
-
      # cache-s3 needs a build directory that is the same across all buildkite agents.
-
      # so copy the source into /build/cardano-ledger
      - "rm -rf /build/cardano-ledger"
      - "cp -R . /build/cardano-ledger"
      - "cd /build/cardano-ledger"
    agents:
      system: x86_64-linux

                      
-
  - label: Check Hydra evaluation of release.nix
-
    command: 'nix-build -A _lib.check-hydra -o check-hydra.sh && ./check-hydra.sh'
-
    agents:
-
      system: x86_64-linux
-

                      
-
  - label: Check auto-generated Nix
-
    command: 'nix-build -A _lib.check-nix-tools -o check-nix-tools.sh && ./check-nix-tools.sh'
+
  - label: 'stack-cabal-sync'
+
    command: 'nix-shell ./nix -A iohkNix.stack-cabal-sync-shell --run scripts/buildkite/stack-cabal-sync.sh'
    agents:
      system: x86_64-linux

                      
-
  - label: Check that cabal.project and stack.yaml have consistent git hashes for dependencies
-
    command: 'nix-shell --run scripts/buildkite/stack-cabal_config_check.sh'
+
  - label: 'check-cabal-project'
+
    command: 'nix-build ./nix -A iohkNix.checkCabalProject -o check-cabal-project.sh && ./check-cabal-project.sh'
    agents:
      system: x86_64-linux
m
+26/-39
Alternatively you can use `nix` to install the external dependencies. For
`stack` simply add the `--nix` flag to your invocation of `stack build`. If
you're on `NixOS` this will happen automatically. For `cabal`, you can run
-
`nix-shell nix/stack-shell.nix` to enter a shell with the dependencies,
+
`nix-shell` to enter a shell with the dependencies,
and use `cabal new-build` as normal from there.

                      
You can build directly with `nix`, by running `nix-build -A
-
nix-tools.libs.cardano-ledger`. To run the test executable you must first build
-
it with `nix-build -A nix-tools.tests.cardano-ledger.cardano-ledger-test -o
+
libs.cardano-ledger`. To run the test executable you must first build
+
it with `nix-build -A tests.cardano-ledger.cardano-ledger-test -o
cardano-ledger-test` and then run it with `./cardano-ledger-test`.

                      

                      

                      
## Updating GHC and Package Dependencies

                      
-
`nix` building is handled by `nix-tools`, which generates `nix` infrastructure
+
`nix` building is handled by `haskell.nix`, which generates `nix` infrastructure
from `stack` and `cabal` files. To generate the infrastructure, run
`nix/regenerate.sh`.

                      
infrastructure were using to manage our dependencies and build on hydra. The
important files are:

                      
-
- `nix/iohk-nix-src.json`, which contains JSON pointing to the `iohk-nix` source
+
- `nix/sources.json`, which contains JSON pointing to external nix
+
  dependencies (eg. `iohk-nix`), designed to be updated with `niv`
+
  (available in `nix-shell`).

                      
-
- `nix/lib.nix`, which imports `iohk-nix` and creates and attribute set
-
  containing its `lib`, `pkgs`, and `nix-tools` attributes
+
- `nix/default.nix`, which imports `nixpkgs` with overlays
+
  including `iohkNix`, `commonLib` and `cardanoLedgerHaskellPackages`.

                      
-
- `nix/regenerate.sh`, which generates `nix` expressions for all the Haskell
-
  dependencies in the Stack project
+
- `nix/regenerate.sh`, which update `--sha256` in `cabal.project`.

                      
-
- `nix/update-iohk-nix.sh`, which updates the `iohk-nix-src.json` according to
-
the latest version of [`iohk-nix`](https://github.com/input-output-hk/iohk-nix/)
-

                      
-
- `nix/pkgs.nix`, which creates a package set from the generated `nix`
-
  expressions
+
- `nix/haskell.nix`, which creates a package set from the cabal.project
+
  using the [haskell.nix](https://github.com/input-output-hk/haskell.nix#quickstart)
+
  `cabalProject` function.

                      
- `default.nix`, the top-level `nix` expression for the project, based on the
  generated package set

                      
- `release.nix`, the specification for which packages to build on hydra

                      
There are a couple of common issues that developers run into while working with
-
`iohk-nix`:
-

                      
-
- `error: attribute 'ghc864' missing, at (string):1:43` is an error that you
-
  will usually get if you're trying to evaluate some `nix` expression using your
-
  system-wide `nixpkgs` and the version of `ghc` there doesn't match the one
-
  that you're trying to build with. This is usually solved by getting the
-
  offending `.nix` file to `import ./nix/lib.nix`. Sometime this occurs while
-
  running `stack` and this means `stack` is running with the `--nix` flag. In
-
  this case, you need to make sure you have a `shell.nix` file for `stack` that
-
  points to `nix/lib.nix`. Then add:
-
  ```
-
  nix:
-
    shell-file: nix/stack-shell.nix
-
  ```
-
  to your `stack.yaml`.
+
`haskell.nix`:

                      
-
- While evaluating `release.nix`, e.g. using the
-
  `scripts/buildkite/check-hydra.sh` script, you might see
+
- While evaluating `release.nix` or `default.nix`, you might see
  ```
-
  "error": "attribute '1.0.0.0' missing, at /path/to/nix/.stack.nix/default.nix:6:30"
+
  "error": "attribute '1.0.0.0' missing, at /nix/store/.../default.nix:6:30"
  ```
-
  which indicates that a package version is missing from the `iohk-nix` package
-
  set. This is usually because the version is new to Hackage, and so it has only
-
  recently made it into
+
  which indicates that a package version is missing from the `hackage.nix`
+
  package set. This is usually because the version is new to Hackage, and so
+
  it has only recently made it into
  [`hackage.nix`](https://github.com/input-output-hk/hackage.nix/), a set of
-
  `nix` expressions for all the packages on Hackage. This is pinned in
-
  `iohk-nix`, so to solve this, submit a PR to `iohk-nix` updating the revision
-
  of `pins/haskell-nix.json`, or get IOHK DevOps to submit this PR for you if
-
  you're unsure how to do that.
+
  `nix` expressions for all the packages on Hackage.
+
  `haskell.nix` is regularly updated with latest version of `hackage.nix`, so
+
  to solve this error use the following command:
+
  ```
+
  nix-shell -A devops --run 'niv update haskell.nix'
+
  ```
+

                      

                      

                      
<hr/>
m
+1/-1
  # Hydra: build for required jobset
  "ci/hydra:Cardano:cardano-ledger:required",
]
-
timeout_sec = 5400
+
timeout_sec = 10800
required_approvals = 1
delete_merged_branches = true
block_labels = [ "DO NOT MERGE", "wip" ]
m
+24/-2
+
index-state: 2020-01-31T00:00:00Z
+

                      
packages:
  cardano-ledger     cardano-ledger/test
  crypto crypto/test
  tests: True

                      
constraints:
-
  hashable == 1.2.*, network == 3.0.*, primitive == 0.6.*, cborg == 0.2.2.*
+
  ip < 1.5,
+
  hedgehog >= 1.0,
+
  bimap >= 0.4.0,
+
  brick >= 0.47,
+
  hashable == 1.2.*,
+
  network == 3.0.*,
+
  primitive == 0.6.*,
+
  cborg == 0.2.2.*
+

                      
+
allow-newer: katip:Win32

                      
source-repository-package
  type: git
  location: https://github.com/input-output-hk/cardano-prelude
  tag: 00487726c4bc21b4744e59d913334ebfeac7d68e
+
  --sha256: 0v4fcq5kdd2r5dgwys8kv46ff33qp756n26ycxrca10wq14zkwm5

                      
source-repository-package
  type: git
  location: https://github.com/input-output-hk/cardano-prelude
  tag: 00487726c4bc21b4744e59d913334ebfeac7d68e
+
  --sha256: 0v4fcq5kdd2r5dgwys8kv46ff33qp756n26ycxrca10wq14zkwm5
  subdir: test

                      
source-repository-package
  type: git
  location: https://github.com/input-output-hk/cardano-base
  tag: 4f24cf8d6686ac764c6ddbc188c88d9296497a50
+
  --sha256: 1ydv47r7b6vhmjxhr71111sbrpbn3mz0fp5266l4ngr8ca1f8i06
  subdir: binary

                      
source-repository-package
  type: git
  location: https://github.com/input-output-hk/cardano-base
  tag: 4f24cf8d6686ac764c6ddbc188c88d9296497a50
+
  --sha256: 1ydv47r7b6vhmjxhr71111sbrpbn3mz0fp5266l4ngr8ca1f8i06
  subdir: cardano-crypto-class

                      
source-repository-package
  type: git
  location: https://github.com/input-output-hk/cardano-base
  tag: 4f24cf8d6686ac764c6ddbc188c88d9296497a50
+
  --sha256: 1ydv47r7b6vhmjxhr71111sbrpbn3mz0fp5266l4ngr8ca1f8i06
  subdir: binary/test

                      
source-repository-package
  type: git
  location: https://github.com/input-output-hk/cardano-crypto
  tag: 4590efa638397e952a51a8994b5543e4ea3c1ecd
+
  --sha256: 0hl2n3bba5v2j0lmxhs7hs01z3aznh2bwf9cb434icq2g0bl8ms3

                      
source-repository-package
  type: git
  location: https://github.com/input-output-hk/cardano-ledger-specs
  tag: 2aa807f4a4b6fd0ae0a511289586a2c2d18b56fb
+
  --sha256: 0mb6r0sw1526m5cd4xjml8lc8vrjdql8plvfxhf9v6ifcv2218qz
  subdir: byron/semantics/executable-spec

                      
source-repository-package
  type: git
  location: https://github.com/input-output-hk/cardano-ledger-specs
  tag: 2aa807f4a4b6fd0ae0a511289586a2c2d18b56fb
+
  --sha256: 0mb6r0sw1526m5cd4xjml8lc8vrjdql8plvfxhf9v6ifcv2218qz
  subdir: byron/ledger/executable-spec

                      
source-repository-package
  type: git
  location: https://github.com/input-output-hk/cardano-ledger-specs
  tag: 2aa807f4a4b6fd0ae0a511289586a2c2d18b56fb
+
  --sha256: 0mb6r0sw1526m5cd4xjml8lc8vrjdql8plvfxhf9v6ifcv2218qz
  subdir: byron/chain/executable-spec

                      
source-repository-package
  type: git
  location: https://github.com/input-output-hk/iohk-monitoring-framework
-
  subdir:   contra-tracer
  tag: dd30455144e11efb435619383ba84ce02aee720d
+
  --sha256: 1g08bg99fvss99kg27l7pmxm7lh60573xln8l8x2rzvwfvfgk2i5
+
  subdir:   contra-tracer

                      
source-repository-package
  type: git
  location: https://github.com/input-output-hk/goblins
  tag: 26d35ad52fe9ade3391532dbfeb2f416f07650bc
+
  --sha256: 17p5x0hj6c67jkdqx0cysqlwq2zs2l87azihn1alzajy9ak6ii0b
+
#!/usr/bin/env bash
+

                      
+
eval "$(nix-build -A check-hydra lib.nix --no-out-link)"
m
+43/-43
-
#
-
# The default.nix file. This will generate targets for all
-
# buildables.  These include anything from stack.yaml
-
# (via nix-tools:stack-to-nix) or cabal.project (via
-
# nix-tools:plan-to-nix). As well as custom definitions
-
# on top.
-
#
-
# nix-tools stack-to-nix or plan-to-nix will generate
-
# the `nix/plan.nix` file. Where further customizations
-
# outside of the ones in stack.yaml/cabal.project can
-
# be specified as needed for nix/ci.
-
#
-

                      
-
# We will need to import the local lib, which will
-
# give us the iohk-nix tooling, which also includes
-
# the nix-tools tooling.
-
let
-
  localLib = import ./nix/lib.nix;
-
in
-
# This file needs to export a function that takes
-
# the arguments it is passed and forwards them to
-
# the default-nix template from iohk-nix. This is
-
# important so that the release.nix file can properly
-
# parameterize this file when targetting different
-
# hosts.
-
{ withHoogle ? true
-
, ... }@args:
-
# We will instantiate the default-nix template with the
-
# nix/pkgs.nix file...
+
{ system ? builtins.currentSystem
+
, crossSystem ? null
+
# allows to cutomize haskellNix (ghc and profiling, see ./nix/haskell.nix)
+
, config ? {}
+
# allows to override dependencies of the project without modifications,
+
# eg. to test build against local checkout of nixpkgs and iohk-nix:
+
# nix build -f default.nix cardano-ledger --arg sourcesOverride '{
+
#   iohk-nix = ../iohk-nix;
+
# }'
+
, sourcesOverride ? {}
+
# pinned version of nixpkgs augmented with overlays (iohk-nix and our packages).
+
, pkgs ? import ./nix { inherit system crossSystem config sourcesOverride; }
+
, gitrev ? pkgs.iohkNix.commitIdFromGitRepoOrZero ./.git
+
}:
+
with pkgs; with commonLib;
let
-
  defaultNix = localLib.nix-tools.default-nix ./nix/pkgs.nix args;
-
in defaultNix //
-
{
-
  shell = defaultNix.nix-tools.shellFor {
-
    inherit withHoogle;
-
    # env will provide the dependencies of cardano-shell
-
    packages = ps: with ps; [ cardano-ledger ];
-
    # This adds git to the shell, which is used by stack.
-
    buildInputs = [
-
      defaultNix.nix-tools._raw.cabal-install.components.exes.cabal
-
      localLib.iohkNix.cardano-repo-tool
-
    ];
-
  };
-
}
+

                      
+
  haskellPackages = recRecurseIntoAttrs
+
    # the Haskell.nix package set, reduced to local packages.
+
    (selectProjectPackages cardanoLedgerHaskellPackages);
+

                      
+
  self = {
+
    inherit haskellPackages;
+

                      
+
    inherit (haskellPackages.cardano-ledger.identifier) version;
+

                      
+
    # `tests` are the test suites which have been built.
+
    tests = collectComponents' "tests" haskellPackages;
+
    # `benchmarks` (only built, not run).
+
    benchmarks = collectComponents' "benchmarks" haskellPackages;
+

                      
+
    libs = collectComponents' "library" haskellPackages;
+

                      
+
    checks = recurseIntoAttrs {
+
      # `checks.tests` collect results of executing the tests:
+
      tests = collectChecks haskellPackages;
+
    };
+

                      
+
    shell = import ./shell.nix {
+
      inherit pkgs;
+
      withHoogle = true;
+
    };
+
};
+
in self
a
+41/-0
+
{ system ? builtins.currentSystem
+
, crossSystem ? null
+
, config ? {}
+
, overlays ? []
+
}:
+

                      
+
let
+
  sources = import ./nix/sources.nix;
+
  iohkNix = import sources.iohk-nix {
+
    sourcesOverride = sources;
+
  };
+
  haskellNix = import sources."haskell.nix";
+
  args = haskellNix // {
+
    inherit system crossSystem;
+
    overlays = (haskellNix.overlays or []) ++ overlays;
+
    config = (haskellNix.config or {}) // config;
+
  };
+
  nixpkgs = import sources.nixpkgs;
+
  pkgs = nixpkgs args;
+
  haskellPackages = import ./nix/pkgs.nix {
+
    inherit pkgs;
+
    src = ./.;
+
  };
+
  lib = pkgs.lib;
+
  niv = (import sources.niv {}).niv;
+
  isCardanoLedger = with lib; package:
+
    (package.isHaskell or false);
+
  filterCardanoPackages = pkgs.lib.filterAttrs (_: package: isCardanoLedger package);
+
  getPackageChecks = pkgs.lib.mapAttrs (_: package: package.checks);
+
in lib // {
+
  inherit (pkgs.haskell-nix.haskellLib) collectComponents;
+
  inherit
+
    niv
+
    sources
+
    haskellPackages
+
    pkgs
+
    iohkNix
+
    isCardanoLedger
+
    getPackageChecks
+
    filterCardanoPackages;
+
}
-
{ system, compiler, flags, pkgs, hsPkgs, pkgconfPkgs, ... }:
-
  {
-
    flags = { development = false; };
-
    package = {
-
      specVersion = "1.10";
-
      identifier = { name = "cardano-binary-test"; version = "1.3.0"; };
-
      license = "MIT";
-
      copyright = "2019 IOHK";
-
      maintainer = "[email protected]";
-
      author = "IOHK";
-
      homepage = "";
-
      url = "";
-
      synopsis = "Test helpers from cardano-binary exposed to other packages";
-
      description = "Test helpers from cardano-binary exposed to other packages";
-
      buildType = "Simple";
-
      };
-
    components = {
-
      "library" = {
-
        depends = [
-
          (hsPkgs.base)
-
          (hsPkgs.bytestring)
-
          (hsPkgs.cardano-binary)
-
          (hsPkgs.cardano-prelude)
-
          (hsPkgs.cardano-prelude-test)
-
          (hsPkgs.cborg)
-
          (hsPkgs.containers)
-
          (hsPkgs.formatting)
-
          (hsPkgs.hedgehog)
-
          (hsPkgs.hspec)
-
          (hsPkgs.pretty-show)
-
          (hsPkgs.QuickCheck)
-
          (hsPkgs.quickcheck-instances)
-
          (hsPkgs.text)
-
          (hsPkgs.vector)
-
          ];
-
        };
-
      };
-
    } // {
-
    src = (pkgs.lib).mkDefault (pkgs.fetchgit {
-
      url = "https://github.com/input-output-hk/cardano-base";
-
      rev = "4f24cf8d6686ac764c6ddbc188c88d9296497a50";
-
      sha256 = "1ydv47r7b6vhmjxhr71111sbrpbn3mz0fp5266l4ngr8ca1f8i06";
-
      });
-
    postUnpack = "sourceRoot+=/binary/test; echo source root reset to \$sourceRoot";
-
    }
\ No newline at end of file
-
{ system, compiler, flags, pkgs, hsPkgs, pkgconfPkgs, ... }:
-
  {
-
    flags = { development = false; };
-
    package = {
-
      specVersion = "1.10";
-
      identifier = { name = "cardano-binary"; version = "1.5.0"; };
-
      license = "Apache-2.0";
-
      copyright = "2019 IOHK";
-
      maintainer = "[email protected]";
-
      author = "IOHK";
-
      homepage = "";
-
      url = "";
-
      synopsis = "Binary serialization for Cardano";
-
      description = "This package includes the binary serialization format for Cardano";
-
      buildType = "Simple";
-
      };
-
    components = {
-
      "library" = {
-
        depends = [
-
          (hsPkgs.base)
-
          (hsPkgs.aeson)
-
          (hsPkgs.bytestring)
-
          (hsPkgs.cardano-prelude)
-
          (hsPkgs.cborg)
-
          (hsPkgs.containers)
-
          (hsPkgs.digest)
-
          (hsPkgs.formatting)
-
          (hsPkgs.recursion-schemes)
-
          (hsPkgs.safe-exceptions)
-
          (hsPkgs.tagged)
-
          (hsPkgs.text)
-
          (hsPkgs.time)
-
          (hsPkgs.vector)
-
          ];
-
        };
-
      tests = {
-
        "test" = {
-
          depends = [
-
            (hsPkgs.base)
-
            (hsPkgs.bytestring)
-
            (hsPkgs.cardano-binary)
-
            (hsPkgs.cardano-prelude)
-
            (hsPkgs.cardano-prelude-test)
-
            (hsPkgs.cborg)
-
            (hsPkgs.containers)
-
            (hsPkgs.formatting)
-
            (hsPkgs.hedgehog)
-
            (hsPkgs.hspec)
-
            (hsPkgs.pretty-show)
-
            (hsPkgs.QuickCheck)
-
            (hsPkgs.quickcheck-instances)
-
            (hsPkgs.tagged)
-
            (hsPkgs.text)
-
            (hsPkgs.vector)
-
            ];
-
          };
-
        };
-
      };
-
    } // {
-
    src = (pkgs.lib).mkDefault (pkgs.fetchgit {
-
      url = "https://github.com/input-output-hk/cardano-base";
-
      rev = "4f24cf8d6686ac764c6ddbc188c88d9296497a50";
-
      sha256 = "1ydv47r7b6vhmjxhr71111sbrpbn3mz0fp5266l4ngr8ca1f8i06";
-
      });
-
    postUnpack = "sourceRoot+=/binary; echo source root reset to \$sourceRoot";
-
    }
\ No newline at end of file
-
{ system, compiler, flags, pkgs, hsPkgs, pkgconfPkgs, ... }:
-
  {
-
    flags = { development = false; };
-
    package = {
-
      specVersion = "1.10";
-
      identifier = { name = "cardano-crypto-class"; version = "2.0.0"; };
-
      license = "Apache-2.0";
-
      copyright = "2019 IOHK";
-
      maintainer = "[email protected]";
-
      author = "IOHK";
-
      homepage = "";
-
      url = "";
-
      synopsis = "Type classes abstracting over cryptography primitives for Cardano";
-
      description = "Type classes abstracting over cryptography primitives for Cardano";
-
      buildType = "Simple";
-
      };
-
    components = {
-
      "library" = {
-
        depends = [
-
          (hsPkgs.base)
-
          (hsPkgs.base16-bytestring)
-
          (hsPkgs.bytestring)
-
          (hsPkgs.cardano-binary)
-
          (hsPkgs.cardano-prelude)
-
          (hsPkgs.cryptonite)
-
          (hsPkgs.deepseq)
-
          (hsPkgs.memory)
-
          (hsPkgs.reflection)
-
          (hsPkgs.vector)
-
          ];
-
        };
-
      tests = {
-
        "test-crypto" = {
-
          depends = [
-
            (hsPkgs.base)
-
            (hsPkgs.bytestring)
-
            (hsPkgs.cardano-binary)
-
            (hsPkgs.cardano-crypto-class)
-
            (hsPkgs.cborg)
-
            (hsPkgs.cryptonite)
-
            (hsPkgs.QuickCheck)
-
            (hsPkgs.tasty)
-
            (hsPkgs.tasty-quickcheck)
-
            ];
-
          };
-
        };
-
      };
-
    } // {
-
    src = (pkgs.lib).mkDefault (pkgs.fetchgit {
-
      url = "https://github.com/input-output-hk/cardano-base";
-
      rev = "4f24cf8d6686ac764c6ddbc188c88d9296497a50";
-
      sha256 = "1ydv47r7b6vhmjxhr71111sbrpbn3mz0fp5266l4ngr8ca1f8i06";
-
      });
-
    postUnpack = "sourceRoot+=/cardano-crypto-class; echo source root reset to \$sourceRoot";
-
    }
\ No newline at end of file
-
{ system, compiler, flags, pkgs, hsPkgs, pkgconfPkgs, ... }:
-
  {
-
    flags = { development = false; };
-
    package = {
-
      specVersion = "1.10";
-
      identifier = { name = "cardano-crypto-test"; version = "1.3.0"; };
-
      license = "Apache-2.0";
-
      copyright = "2018 IOHK";
-
      maintainer = "[email protected]";
-
      author = "IOHK";
-
      homepage = "";
-
      url = "";
-
      synopsis = "Test helpers from cardano-crypto exposed to other packages";
-
      description = "Test helpers from cardano-crypto exposed to other packages";
-
      buildType = "Simple";
-
      };
-
    components = {
-
      "library" = {
-
        depends = [
-
          (hsPkgs.base)
-
          (hsPkgs.bytestring)
-
          (hsPkgs.cardano-binary)
-
          (hsPkgs.cardano-binary-test)
-
          (hsPkgs.cardano-crypto)
-
          (hsPkgs.cardano-crypto-wrapper)
-
          (hsPkgs.cardano-prelude)
-
          (hsPkgs.cardano-prelude-test)
-
          (hsPkgs.cryptonite)
-
          (hsPkgs.hedgehog)
-
          (hsPkgs.memory)
-
          ];
-
        };
-
      };
-
    } // rec { src = (pkgs.lib).mkDefault ../.././crypto/test; }
\ No newline at end of file
-
{ system, compiler, flags, pkgs, hsPkgs, pkgconfPkgs, ... }:
-
  {
-
    flags = { development = false; };
-
    package = {
-
      specVersion = "1.10";
-
      identifier = { name = "cardano-crypto-wrapper"; version = "1.3.0"; };
-
      license = "Apache-2.0";
-
      copyright = "2019 IOHK";
-
      maintainer = "[email protected]";
-
      author = "IOHK";
-
      homepage = "";
-
      url = "";
-
      synopsis = "Cryptographic primitives used in the Cardano project";
-
      description = "Cryptographic primitives used in the Cardano project";
-
      buildType = "Simple";
-
      };
-
    components = {
-
      "library" = {
-
        depends = [
-
          (hsPkgs.base)
-
          (hsPkgs.aeson)
-
          (hsPkgs.base64-bytestring)
-
          (hsPkgs.base64-bytestring-type)
-
          (hsPkgs.binary)
-
          (hsPkgs.bytestring)
-
          (hsPkgs.canonical-json)
-
          (hsPkgs.cardano-binary)
-
          (hsPkgs.cardano-crypto)
-
          (hsPkgs.cardano-prelude)
-
          (hsPkgs.cryptonite)
-
          (hsPkgs.cryptonite-openssl)
-
          (hsPkgs.data-default)
-
          (hsPkgs.formatting)
-
          (hsPkgs.memory)
-
          (hsPkgs.mtl)
-
          (hsPkgs.text)
-
          ];
-
        };
-
      tests = {
-
        "test" = {
-
          depends = [
-
            (hsPkgs.base)
-
            (hsPkgs.bytestring)
-
            (hsPkgs.cardano-binary)
-
            (hsPkgs.cardano-binary-test)
-
            (hsPkgs.cardano-crypto)
-
            (hsPkgs.cardano-crypto-wrapper)
-
            (hsPkgs.cardano-prelude)
-
            (hsPkgs.cardano-prelude-test)
-
            (hsPkgs.cryptonite)
-
            (hsPkgs.formatting)
-
            (hsPkgs.hedgehog)
-
            (hsPkgs.memory)
-
            (hsPkgs.text)
-
            ];
-
          };
-
        };
-
      };
-
    } // rec { src = (pkgs.lib).mkDefault ../.././crypto; }
\ No newline at end of file
-
{ system, compiler, flags, pkgs, hsPkgs, pkgconfPkgs, ... }:
-
  {
-
    flags = { golden-tests = false; golden-tests-exe = false; };
-
    package = {
-
      specVersion = "1.10";
-
      identifier = { name = "cardano-crypto"; version = "1.1.0"; };
-
      license = "MIT";
-
      copyright = "2016-2017 IOHK";
-
      maintainer = "[email protected]";
-
      author = "Vincent Hanquez";
-
      homepage = "https://github.com/input-output-hk/cardano-crypto#readme";
-
      url = "";
-
      synopsis = "Cryptography primitives for cardano";
-
      description = "";
-
      buildType = "Simple";
-
      };
-
    components = {
-
      "library" = {
-
        depends = [
-
          (hsPkgs.base)
-
          (hsPkgs.memory)
-
          (hsPkgs.deepseq)
-
          (hsPkgs.bytestring)
-
          (hsPkgs.basement)
-
          (hsPkgs.foundation)
-
          (hsPkgs.cryptonite)
-
          (hsPkgs.cryptonite-openssl)
-
          (hsPkgs.hashable)
-
          (hsPkgs.integer-gmp)
-
          ];
-
        };
-
      exes = {
-
        "golden-tests" = {
-
          depends = [
-
            (hsPkgs.base)
-
            (hsPkgs.basement)
-
            (hsPkgs.foundation)
-
            (hsPkgs.memory)
-
            (hsPkgs.bytestring)
-
            (hsPkgs.cryptonite)
-
            (hsPkgs.cardano-crypto)
-
            ] ++ (pkgs.lib).optional (flags.golden-tests-exe) (hsPkgs.inspector);
-
          };
-
        };
-
      tests = {
-
        "cardano-crypto-test" = {
-
          depends = [
-
            (hsPkgs.base)
-
            (hsPkgs.bytestring)
-
            (hsPkgs.memory)
-
            (hsPkgs.cryptonite)
-
            (hsPkgs.cardano-crypto)
-
            (hsPkgs.basement)
-
            (hsPkgs.foundation)
-
            ];
-
          };
-
        "cardano-crypto-golden-tests" = {
-
          depends = [
-
            (hsPkgs.base)
-
            (hsPkgs.basement)
-
            (hsPkgs.foundation)
-
            (hsPkgs.memory)
-
            (hsPkgs.bytestring)
-
            (hsPkgs.cryptonite)
-
            (hsPkgs.cardano-crypto)
-
            ] ++ (pkgs.lib).optional (flags.golden-tests) (hsPkgs.inspector);
-
          };
-
        };
-
      benchmarks = {
-
        "cardano-crypto-bench" = {
-
          depends = [
-
            (hsPkgs.base)
-
            (hsPkgs.bytestring)
-
            (hsPkgs.memory)
-
            (hsPkgs.cryptonite)
-
            (hsPkgs.cardano-crypto)
-
            (hsPkgs.gauge)
-
            ];
-
          };
-
        };
-
      };
-
    } // {
-
    src = (pkgs.lib).mkDefault (pkgs.fetchgit {
-
      url = "https://github.com/input-output-hk/cardano-crypto";
-
      rev = "3c707936ba0a665375acf5bd240dc4b6eaa6c0bc";
-
      sha256 = "0g8ln8k8wx4csdv92bz09pr7v9dp4lcyv1334b09c9rgwdwhqg1b";
-
      });
-
    }
\ No newline at end of file
-
{ system, compiler, flags, pkgs, hsPkgs, pkgconfPkgs, ... }:
-
  {
-
    flags = { development = false; };
-
    package = {
-
      specVersion = "1.10";
-
      identifier = { name = "cardano-ledger-test"; version = "1.3.0"; };
-
      license = "Apache-2.0";
-
      copyright = "2018 IOHK";
-
      maintainer = "[email protected]";
-
      author = "IOHK";
-
      homepage = "";
-
      url = "";
-
      synopsis = "Test helpers from cardano-ledger exposed to other packages";
-
      description = "Test helpers from cardano-ledger exposed to other packages";
-
      buildType = "Simple";
-
      };
-
    components = {
-
      "library" = {
-
        depends = [
-
          (hsPkgs.base)
-
          (hsPkgs.base16-bytestring)
-
          (hsPkgs.bimap)
-
          (hsPkgs.bytestring)
-
          (hsPkgs.cardano-binary)
-
          (hsPkgs.cardano-binary-test)
-
          (hsPkgs.cardano-ledger)
-
          (hsPkgs.cardano-crypto)
-
          (hsPkgs.cardano-crypto-test)
-
          (hsPkgs.cardano-crypto-wrapper)
-
          (hsPkgs.cardano-prelude)
-
          (hsPkgs.cardano-prelude-test)
-
          (hsPkgs.containers)
-
          (hsPkgs.cryptonite)
-
          (hsPkgs.cs-blockchain)
-
          (hsPkgs.cs-ledger)
-
          (hsPkgs.directory)
-
          (hsPkgs.filepath)
-
          (hsPkgs.formatting)
-
          (hsPkgs.generic-monoid)
-
          (hsPkgs.hedgehog)
-
          (hsPkgs.lens)
-
          (hsPkgs.mtl)
-
          (hsPkgs.optparse-applicative)
-
          (hsPkgs.resourcet)
-
          (hsPkgs.small-steps)
-
          (hsPkgs.streaming)
-
          (hsPkgs.tasty)
-
          (hsPkgs.tasty-hedgehog)
-
          (hsPkgs.text)
-
          (hsPkgs.time)
-
          (hsPkgs.vector)
-
          ];
-
        };
-
      };
-
    } // rec { src = (pkgs.lib).mkDefault ../.././cardano-ledger/test; }
\ No newline at end of file
-
{ system, compiler, flags, pkgs, hsPkgs, pkgconfPkgs, ... }:
-
  {
-
    flags = { development = false; test-normal-form = false; };
-
    package = {
-
      specVersion = "1.10";
-
      identifier = { name = "cardano-ledger"; version = "0.1.0.0"; };
-
      license = "Apache-2.0";
-
      copyright = "2018 IOHK";
-
      maintainer = "[email protected]";
-
      author = "IOHK";
-
      homepage = "";
-
      url = "";
-
      synopsis = "The blockchain layer of Cardano";
-
      description = "The blockchain layer of Cardano";
-
      buildType = "Simple";
-
      };
-
    components = {
-
      "library" = {
-
        depends = [
-
          (hsPkgs.base)
-
          (hsPkgs.aeson)
-
          (hsPkgs.base58-bytestring)
-
          (hsPkgs.base64-bytestring-type)
-
          (hsPkgs.bimap)
-
          (hsPkgs.binary)
-
          (hsPkgs.bytestring)
-
          (hsPkgs.canonical-json)
-
          (hsPkgs.cardano-binary)
-
          (hsPkgs.cardano-crypto)
-
          (hsPkgs.cardano-crypto-wrapper)
-
          (hsPkgs.cardano-prelude)
-
          (hsPkgs.cborg)
-
          (hsPkgs.containers)
-
          (hsPkgs.contra-tracer)
-
          (hsPkgs.concurrency)
-
          (hsPkgs.cryptonite)
-
          (hsPkgs.Cabal)
-
          (hsPkgs.deepseq)
-
          (hsPkgs.digest)
-
          (hsPkgs.directory)
-
          (hsPkgs.filepath)
-
          (hsPkgs.formatting)
-
          (hsPkgs.megaparsec)
-
          (hsPkgs.memory)
-
          (hsPkgs.mtl)
-
          (hsPkgs.resourcet)
-
          (hsPkgs.streaming)
-
          (hsPkgs.streaming-binary)
-
          (hsPkgs.streaming-bytestring)
-
          (hsPkgs.text)
-
          (hsPkgs.time)
-
          (hsPkgs.vector)
-
          ];
-
        };
-
      tests = {
-
        "cardano-ledger-test" = {
-
          depends = [
-
            (hsPkgs.base)
-
            (hsPkgs.base16-bytestring)
-
            (hsPkgs.bimap)
-
            (hsPkgs.bytestring)
-
            (hsPkgs.cardano-binary)
-
            (hsPkgs.cardano-binary-test)
-
            (hsPkgs.cardano-ledger)
-
            (hsPkgs.cardano-crypto)
-
            (hsPkgs.cardano-crypto-test)
-
            (hsPkgs.cardano-crypto-wrapper)
-
            (hsPkgs.cardano-prelude)
-
            (hsPkgs.cardano-prelude-test)
-
            (hsPkgs.containers)
-
            (hsPkgs.contra-tracer)
-
            (hsPkgs.cryptonite)
-
            (hsPkgs.cs-blockchain)
-
            (hsPkgs.cs-ledger)
-
            (hsPkgs.directory)
-
            (hsPkgs.filepath)
-
            (hsPkgs.formatting)
-
            (hsPkgs.generic-monoid)
-
            (hsPkgs.hedgehog)
-
            (hsPkgs.lens)
-
            (hsPkgs.mtl)
-
            (hsPkgs.optparse-applicative)
-
            (hsPkgs.resourcet)
-
            (hsPkgs.small-steps)
-
            (hsPkgs.streaming)
-
            (hsPkgs.tasty)
-
            (hsPkgs.tasty-hedgehog)
-
            (hsPkgs.text)
-
            (hsPkgs.time)
-
            (hsPkgs.vector)
-
            ];
-
          };
-
        "epoch-validation-normal-form-test" = {
-
          depends = [
-
            (hsPkgs.base)
-
            (hsPkgs.bytestring)
-
            (hsPkgs.cardano-binary)
-
            (hsPkgs.cardano-ledger)
-
            (hsPkgs.cardano-crypto-test)
-
            (hsPkgs.cardano-crypto-wrapper)
-
            (hsPkgs.cardano-prelude)
-
            (hsPkgs.cardano-prelude-test)
-
            (hsPkgs.containers)
-
            (hsPkgs.contra-tracer)
-
            (hsPkgs.directory)
-
            (hsPkgs.filepath)
-
            (hsPkgs.formatting)
-
            (hsPkgs.hedgehog)
-
            (hsPkgs.optparse-applicative)
-
            (hsPkgs.resourcet)
-
            (hsPkgs.silently)
-
            (hsPkgs.streaming)
-
            (hsPkgs.tasty)
-
            (hsPkgs.tasty-hedgehog)
-
            ];
-
          };
-
        };
-
      };
-
    } // rec { src = (pkgs.lib).mkDefault ../.././cardano-ledger; }
\ No newline at end of file
-
{ system, compiler, flags, pkgs, hsPkgs, pkgconfPkgs, ... }:
-
  {
-
    flags = { development = false; };
-
    package = {
-
      specVersion = "1.10";
-
      identifier = { name = "cardano-prelude-test"; version = "0.1.0.0"; };
-
      license = "MIT";
-
      copyright = "2018 IOHK";
-
      maintainer = "[email protected]";
-
      author = "IOHK";
-
      homepage = "";
-
      url = "";
-
      synopsis = "Utility types and functions for testing Cardano";
-
      description = "Utility types and functions for testing Cardano";
-
      buildType = "Simple";
-
      };
-
    components = {
-
      "library" = {
-
        depends = [
-
          (hsPkgs.base)
-
          (hsPkgs.aeson)
-
          (hsPkgs.aeson-pretty)
-
          (hsPkgs.attoparsec)
-
          (hsPkgs.base16-bytestring)
-
          (hsPkgs.bytestring)
-
          (hsPkgs.canonical-json)
-
          (hsPkgs.cardano-prelude)
-
          (hsPkgs.containers)
-
          (hsPkgs.cryptonite)
-
          (hsPkgs.formatting)
-
          (hsPkgs.hedgehog)
-
          (hsPkgs.hspec)
-
          (hsPkgs.pretty-show)
-
          (hsPkgs.QuickCheck)
-
          (hsPkgs.quickcheck-instances)
-
          (hsPkgs.text)
-
          (hsPkgs.template-haskell)
-
          (hsPkgs.time)
-
          ];
-
        };
-
      };
-
    } // {
-
    src = (pkgs.lib).mkDefault (pkgs.fetchgit {
-
      url = "https://github.com/input-output-hk/cardano-prelude";
-
      rev = "00487726c4bc21b4744e59d913334ebfeac7d68e";
-
      sha256 = "0v4fcq5kdd2r5dgwys8kv46ff33qp756n26ycxrca10wq14zkwm5";
-
      });
-
    postUnpack = "sourceRoot+=/test; echo source root reset to \$sourceRoot";
-
    }
\ No newline at end of file
-
{ system, compiler, flags, pkgs, hsPkgs, pkgconfPkgs, ... }:
-
  {
-
    flags = { development = false; };
-
    package = {
-
      specVersion = "1.10";
-
      identifier = { name = "cardano-prelude"; version = "0.1.0.0"; };
-
      license = "MIT";
-
      copyright = "2018 IOHK";
-
      maintainer = "[email protected]";
-
      author = "IOHK";
-
      homepage = "";
-
      url = "";
-
      synopsis = "A Prelude replacement for the Cardano project";
-
      description = "A Prelude replacement for the Cardano project";
-
      buildType = "Simple";
-
      };
-
    components = {
-
      "library" = {
-
        depends = [
-
          (hsPkgs.base)
-
          (hsPkgs.aeson)
-
          (hsPkgs.array)
-
          (hsPkgs.base16-bytestring)
-
          (hsPkgs.bytestring)
-
          (hsPkgs.canonical-json)
-
          (hsPkgs.cborg)
-
          (hsPkgs.containers)
-
          (hsPkgs.fingertree)
-
          (hsPkgs.formatting)
-
          (hsPkgs.generic-deriving)
-
          (hsPkgs.ghc-heap)
-
          (hsPkgs.ghc-prim)
-
          (hsPkgs.hashable)
-
          (hsPkgs.integer-gmp)
-
          (hsPkgs.mtl)
-
          (hsPkgs.nonempty-containers)
-
          (hsPkgs.protolude)
-
          (hsPkgs.serialise)
-
          (hsPkgs.tagged)
-
          (hsPkgs.text)
-
          (hsPkgs.time)
-
          (hsPkgs.vector)
-
          ];
-
        };
-
      tests = {
-
        "cardano-prelude-test" = {
-
          depends = [
-
            (hsPkgs.base)
-
            (hsPkgs.aeson)
-
            (hsPkgs.aeson-pretty)
-
            (hsPkgs.attoparsec)
-
            (hsPkgs.base16-bytestring)
-
            (hsPkgs.bytestring)
-
            (hsPkgs.canonical-json)
-
            (hsPkgs.cardano-prelude)
-
            (hsPkgs.containers)
-
            (hsPkgs.cryptonite)
-
            (hsPkgs.formatting)
-
            (hsPkgs.ghc-heap)
-
            (hsPkgs.ghc-prim)
-
            (hsPkgs.hedgehog)
-
            (hsPkgs.hspec)
-
            (hsPkgs.pretty-show)
-
            (hsPkgs.QuickCheck)
-
            (hsPkgs.quickcheck-instances)
-
            (hsPkgs.random)
-
            (hsPkgs.text)
-
            (hsPkgs.template-haskell)
-
            (hsPkgs.time)
-
            ];
-
          };
-
        };
-
      };
-
    } // {
-
    src = (pkgs.lib).mkDefault (pkgs.fetchgit {
-
      url = "https://github.com/input-output-hk/cardano-prelude";
-
      rev = "00487726c4bc21b4744e59d913334ebfeac7d68e";
-
      sha256 = "0v4fcq5kdd2r5dgwys8kv46ff33qp756n26ycxrca10wq14zkwm5";
-
      });
-
    }
\ No newline at end of file
-
{ system, compiler, flags, pkgs, hsPkgs, pkgconfPkgs, ... }:
-
  {
-
    flags = {};
-
    package = {
-
      specVersion = "2.2";
-
      identifier = { name = "cardano-shell"; version = "0.1.0.0"; };
-
      license = "Apache-2.0";
-
      copyright = "2018 IOHK";
-
      maintainer = "[email protected]";
-
      author = "IOHK";
-
      homepage = "https://github.com/input-output-hk/cardano-shell#readme";
-
      url = "";
-
      synopsis = "";
-
      description = "Please see the README on GitHub at <https://github.com/githubuser/cardano-shell#readme>";
-
      buildType = "Simple";
-
      };
-
    components = {
-
      "library" = {
-
        depends = [
-
          (hsPkgs.aeson)
-
          (hsPkgs.base)
-
          (hsPkgs.binary)
-
          (hsPkgs.bytestring)
-
          (hsPkgs.Cabal)
-
          (hsPkgs.cardano-prelude)
-
          (hsPkgs.concurrency)
-
          (hsPkgs.containers)
-
          (hsPkgs.contravariant)
-
          (hsPkgs.dhall)
-
          (hsPkgs.directory)
-
          (hsPkgs.formatting)
-
          (hsPkgs.iohk-monitoring)
-
          (hsPkgs.optparse-applicative)
-
          (hsPkgs.process)
-
          (hsPkgs.QuickCheck)
-
          (hsPkgs.safe-exceptions)
-
          (hsPkgs.stm)
-
          (hsPkgs.async)
-
          (hsPkgs.text)
-
          (hsPkgs.transformers)
-
          (hsPkgs.generic-monoid)
-
          ] ++ (pkgs.lib).optional (system.isWindows) (hsPkgs.Win32);
-
        };
-
      exes = {
-
        "cardano-shell-exe" = {
-
          depends = [
-
            (hsPkgs.base)
-
            (hsPkgs.cardano-shell)
-
            (hsPkgs.cardano-prelude)
-
            (hsPkgs.pretty-show)
-
            (hsPkgs.optparse-applicative)
-
            (hsPkgs.safe-exceptions)
-
            (hsPkgs.stm)
-
            (hsPkgs.iohk-monitoring)
-
            ];
-
          };
-
        "node-ipc" = {
-
          depends = [
-
            (hsPkgs.base)
-
            (hsPkgs.cardano-shell)
-
            (hsPkgs.cardano-prelude)
-
            (hsPkgs.optparse-applicative)
-
            (hsPkgs.safe-exceptions)
-
            ];
-
          };
-
        "daedalus-ipc" = {
-
          depends = [
-
            (hsPkgs.base)
-
            (hsPkgs.cardano-shell)
-
            (hsPkgs.cardano-prelude)
-
            (hsPkgs.optparse-applicative)
-
            (hsPkgs.safe-exceptions)
-
            (hsPkgs.iohk-monitoring)
-
            ];
-
          };
-
        "cardano-launcher" = {
-
          depends = [
-
            (hsPkgs.base)
-
            (hsPkgs.cardano-shell)
-
            (hsPkgs.cardano-prelude)
-
            (hsPkgs.cardano-sl-x509)
-
            (hsPkgs.async)
-
            (hsPkgs.process)
-
            (hsPkgs.turtle)
-
            (hsPkgs.directory)
-
            (hsPkgs.filepath)
-
            (hsPkgs.formatting)
-
            (hsPkgs.safe-exceptions)
-
            (hsPkgs.optparse-applicative)
-
            ];
-
          };
-
        };
-
      tests = {
-
        "cardano-shell-test" = {
-
          depends = [
-
            (hsPkgs.aeson)
-
            (hsPkgs.base)
-
            (hsPkgs.cardano-shell)
-
            (hsPkgs.cardano-prelude)
-
            (hsPkgs.dhall)
-
            (hsPkgs.safe-exceptions)
-
            (hsPkgs.process)
-
            (hsPkgs.QuickCheck)
-
            (hsPkgs.quickcheck-state-machine)
-
            (hsPkgs.tree-diff)
-
            (hsPkgs.pretty-show)
-
            (hsPkgs.hspec)
-
            (hsPkgs.hspec-contrib)
-
            (hsPkgs.concurrency)
-
            (hsPkgs.dejafu)
-
            (hsPkgs.hunit-dejafu)
-
            ];
-
          build-tools = [
-
            (hsPkgs.buildPackages.cardano-shell or (pkgs.buildPackages.cardano-shell))
-
            ];
-
          };
-
        };
-
      };
-
    } // {
-
    src = (pkgs.lib).mkDefault (pkgs.fetchgit {
-
      url = "https://github.com/input-output-hk/cardano-shell";
-
      rev = "5c4e0b73f209631debd74795fa8cd4c92ed874fb";
-
      sha256 = "0202v25kc26fakc1x3xrzrp7bjza0yzpwx12fkdh7a3hsbm4f9hh";
-
      });
-
    }
\ No newline at end of file
-
{ system, compiler, flags, pkgs, hsPkgs, pkgconfPkgs, ... }:
-
  {
-
    flags = {};
-
    package = {
-
      specVersion = "1.10";
-
      identifier = { name = "cardano-sl-x509"; version = "3.0.0"; };
-
      license = "MIT";
-
      copyright = "2018 IOHK";
-
      maintainer = "[email protected]";
-
      author = "IOHK Engineering Team";
-
      homepage = "https://github.com/input-output-hk/cardano-sl/x509/README.md";
-
      url = "";
-
      synopsis = "Tool-suite for generating x509 certificates specialized for RSA with SHA-256";
-
      description = "See README";
-
      buildType = "Simple";
-
      };
-
    components = {
-
      "library" = {
-
        depends = [
-
          (hsPkgs.base)
-
          (hsPkgs.aeson)
-
          (hsPkgs.asn1-encoding)
-
          (hsPkgs.asn1-types)
-
          (hsPkgs.base64-bytestring)
-
          (hsPkgs.bytestring)
-
          (hsPkgs.cardano-prelude)
-
          (hsPkgs.cryptonite)
-
          (hsPkgs.data-default-class)
-
          (hsPkgs.directory)
-
          (hsPkgs.exceptions)
-
          (hsPkgs.filepath)
-
          (hsPkgs.hourglass)
-
          (hsPkgs.ip)
-
          (hsPkgs.text)
-
          (hsPkgs.unordered-containers)
-
          (hsPkgs.x509)
-
          (hsPkgs.x509-store)
-
          (hsPkgs.x509-validation)
-
          (hsPkgs.yaml)
-
          ];
-
        };
-
      tests = {
-
        "cardano-sl-x509-test" = {
-
          depends = [
-
            (hsPkgs.base)
-
            (hsPkgs.QuickCheck)
-
            (hsPkgs.cardano-prelude)
-
            (hsPkgs.cardano-sl-x509)
-
            (hsPkgs.exceptions)
-
            (hsPkgs.hedgehog)
-
            ];
-
          };
-
        };
-
      };
-
    } // {
-
    src = (pkgs.lib).mkDefault (pkgs.fetchgit {
-
      url = "https://github.com/input-output-hk/cardano-sl-x509";
-
      rev = "43a036c5bbe68ca2e9cbe611eab7982e2348fe49";
-
      sha256 = "1aw7ns8lv51fjf45k8yzils2j7a6bqzy8hn65kb3z0dn1qsm8x88";
-
      });
-
    }
\ No newline at end of file
Diff too large – View on GitHub