From 58602ae47c89b1061e81731cd00af2d57b711831 Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Mon, 22 Jul 2024 14:17:41 +0200 Subject: [PATCH 01/50] support blob tx --- Cargo.toml | 12 + e2e/Cargo.toml | 3 + e2e/Forc.toml | 1 + e2e/sway/contracts/huge_contract/Forc.toml | 7 + e2e/sway/contracts/huge_contract/src/main.sw | 50043 ++++++++++++++++ e2e/tests/contracts.rs | 104 +- .../src/types/transaction_builders.rs | 140 +- .../src/types/wrappers/transaction.rs | 39 +- .../types/wrappers/transaction_response.rs | 2 + 9 files changed, 50344 insertions(+), 7 deletions(-) create mode 100644 e2e/sway/contracts/huge_contract/Forc.toml create mode 100644 e2e/sway/contracts/huge_contract/src/main.sw diff --git a/Cargo.toml b/Cargo.toml index fb0d3b2d0f..13aa064317 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -79,6 +79,7 @@ trybuild = "1.0.85" uint = { version = "0.9.5", default-features = false } which = { version = "6.0.0", default-features = false } zeroize = "1.7.0" +pretty_assertions = { version = "1.4", default-features = false } # Dependencies from the `fuel-core` repository: fuel-core = { version = "0.31.0", default-features = false } @@ -106,3 +107,14 @@ fuels-macros = { version = "0.65.1", path = "./packages/fuels-macros", default-f fuels-programs = { version = "0.65.1", path = "./packages/fuels-programs", default-features = false } fuels-test-helpers = { version = "0.65.1", path = "./packages/fuels-test-helpers", default-features = false } versions-replacer = { version = "0.65.1", path = "./scripts/versions-replacer", default-features = false } + +[patch.crates-io] +fuel-core = { default-features = false, path = "/home/segfault_magnet/fuel/fuel-core/crates/fuel-core" } +fuel-core-chain-config = { default-features = false, path = "/home/segfault_magnet/fuel/fuel-core/crates/chain-config" } +fuel-core-client = { default-features = false, path = "/home/segfault_magnet/fuel/fuel-core/crates/client" } +fuel-core-poa = { default-features = false, path = "/home/segfault_magnet/fuel/fuel-core/crates/services/consensus_module/poa" } +fuel-core-services = { default-features = false, path = "/home/segfault_magnet/fuel/fuel-core/crates/services" } +fuel-core-types = { default-features = false, path = "/home/segfault_magnet/fuel/fuel-core/crates/types" } +fuel-vm = { path = "/home/segfault_magnet/fuel/fuel-vm/fuel-vm" } +fuel-types = { path = "/home/segfault_magnet/fuel/fuel-vm/fuel-types" } +fuel-tx = { path = "/home/segfault_magnet/fuel/fuel-vm/fuel-tx" } diff --git a/e2e/Cargo.toml b/e2e/Cargo.toml index 3ba0245722..2f5308a297 100644 --- a/e2e/Cargo.toml +++ b/e2e/Cargo.toml @@ -23,6 +23,9 @@ fuels = { workspace = true } tai64 = { workspace = true } tempfile = { workspace = true } tokio = { workspace = true, features = ["test-util"] } +pretty_assertions = { workspace = true, features = ["std"] } +#TODO: segfault remove +serde_json = { workspace = true, default-features = true } [build-dependencies] anyhow = { workspace = true, features = ["std"] } diff --git a/e2e/Forc.toml b/e2e/Forc.toml index 55fba74f15..4054e17a43 100644 --- a/e2e/Forc.toml +++ b/e2e/Forc.toml @@ -6,6 +6,7 @@ members = [ 'sway/bindings/simple_contract', 'sway/bindings/type_paths', 'sway/contracts/asserts', + 'sway/contracts/huge_contract', 'sway/contracts/auth_testing_abi', 'sway/contracts/auth_testing_contract', 'sway/contracts/block_timestamp', diff --git a/e2e/sway/contracts/huge_contract/Forc.toml b/e2e/sway/contracts/huge_contract/Forc.toml new file mode 100644 index 0000000000..74764e3310 --- /dev/null +++ b/e2e/sway/contracts/huge_contract/Forc.toml @@ -0,0 +1,7 @@ +[project] +authors = ["Segfault Magnet"] +entry = "main.sw" +license = "Apache-2.0" +name = "huge_contract" + +[dependencies] diff --git a/e2e/sway/contracts/huge_contract/src/main.sw b/e2e/sway/contracts/huge_contract/src/main.sw new file mode 100644 index 0000000000..300d1f614c --- /dev/null +++ b/e2e/sway/contracts/huge_contract/src/main.sw @@ -0,0 +1,50043 @@ +contract; + +abi MyContract { + fn something(start: u64) -> u64; +} + +impl MyContract for Contract { + fn something(start: u64) -> u64 { + asm(r1: start, r2) { + add r2 zero zero; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + add r2 r2 r1; + r2 + } + } +} diff --git a/e2e/tests/contracts.rs b/e2e/tests/contracts.rs index bf8ae0b274..c142360004 100644 --- a/e2e/tests/contracts.rs +++ b/e2e/tests/contracts.rs @@ -1,3 +1,4 @@ +use fuel_tx::TxParameters; use fuels::{ core::codec::{calldata, encode_fn_selector, DecoderConfig, EncoderConfig}, prelude::*, @@ -991,7 +992,9 @@ async fn test_contract_call_with_non_default_max_input() -> Result<()> { let provider = setup_test_provider(coins, vec![], None, Some(chain_config)).await?; wallet.set_provider(provider.clone()); - assert_eq!(consensus_parameters, *provider.consensus_parameters()); + // let val = serde_json::to_string_pretty(&consensus_parameters).unwrap(); + // std::fs::write("/home/segfault_magnet/consensus.json", val).unwrap(); + pretty_assertions::assert_eq!(consensus_parameters, *provider.consensus_parameters()); setup_program_test!( Abigen(Contract( @@ -2105,3 +2108,102 @@ async fn max_fee_estimation_respects_tolerance() -> Result<()> { Ok(()) } + +#[tokio::test] +async fn blob_contract_deployment() -> Result<()> { + let mut wallet = WalletUnlocked::new_random(None); + let coins = setup_single_asset_coins(wallet.address(), AssetId::BASE, 10, 1_000_000); + + let contract_binary = "sway/contracts/huge_contract/out/release/huge_contract.bin"; + let contract_size = std::fs::metadata(contract_binary) + .expect("contract file not found") + .len(); + assert!( + contract_size > 150_000, + "the testnet size limit was around 100kB, we want a contract bigger than that" + ); + + let chain_config = ChainConfig::local_testnet(); + + let max_tx_size = chain_config.consensus_parameters.tx_params().max_size(); + assert!( + max_tx_size < contract_size, + "this contract if included in one piece would make the tx too big" + ); + + let contract_max_size = chain_config + .consensus_parameters + .contract_params() + .contract_max_size(); + assert!( + contract_max_size < contract_size, + "the node won't allow a contract of this size to be created" + ); + + // { + // // TODO: segfault imported from fuel_tx + // let mut tx_params = *chain_config.consensus_parameters.tx_params(); + // let TxParameters::V1(params) = &mut tx_params; + // params.max_size += contract_size; + // chain_config.consensus_parameters.set_tx_params(tx_params); + // + // let mut contract_params = *chain_config.consensus_parameters.contract_params(); + // // TODO: segfault imported from fuel_tx + // let ContractParameters::V1(params) = &mut contract_params; + // params.contract_max_size = contract_size; + // chain_config + // .consensus_parameters + // .set_contract_params(contract_params); + // } + + let provider = setup_test_provider(coins, vec![], None, Some(chain_config)).await?; + wallet.set_provider(provider.clone()); + + let mut blob_ids = vec![]; + + let code = std::fs::read(contract_binary)?; + for chunk in code.chunks(50_000) { + let mut tb = BlobTransactionBuilder::default(); + let blob = Blob { + data: chunk.to_vec(), + }; + let blob_id = blob.id(); + tb.blob = blob; + wallet.adjust_for_fee(&mut tb, 0).await?; + tb.add_signer(wallet.clone())?; + let tx = tb.build(&provider).await?; + provider + .send_transaction_and_await_commit(tx) + .await? + .check(None)?; + + blob_ids.push(blob_id); + eprintln!("blob id: {:X}", fuel_tx::Bytes32::from(blob_id)); + } + + // abigen!(Contract( + // name = "MyContract", + // abi = "e2e/sway/contracts/huge_contract/out/release/huge_contract-abi.json" + // )); + // + // let contract = Contract::load_from(contract_binary, LoadConfiguration::default())?; + // + // let contract_id = contract.deploy(&wallet, TxPolicies::default()).await?; + // + // let contract_instance = MyContract::new(contract_id, wallet.clone()); + // contract_instance + // .methods() + // .chunk_1() + // .call() + // .await + // .expect("contract call failed"); + // + // contract_instance + // .methods() + // .chunk_2() + // .call() + // .await + // .expect("contract call failed"); + + Ok(()) +} diff --git a/packages/fuels-core/src/types/transaction_builders.rs b/packages/fuels-core/src/types/transaction_builders.rs index 44fbdb3eb0..7c609c755a 100644 --- a/packages/fuels-core/src/types/transaction_builders.rs +++ b/packages/fuels-core/src/types/transaction_builders.rs @@ -12,9 +12,9 @@ use fuel_crypto::{Hasher, Message as CryptoMessage, Signature}; use fuel_tx::{ field::{Outputs, Policies as PoliciesField, ScriptGasLimit, Witnesses}, policies::{Policies, PolicyType}, - Chargeable, ConsensusParameters, Create, Input as FuelInput, Output, Script, StorageSlot, - Transaction as FuelTransaction, TransactionFee, TxPointer, UniqueIdentifier, Upgrade, Upload, - UploadBody, Witness, + BlobId, BlobIdExt, Chargeable, ConsensusParameters, Create, Input as FuelInput, Output, Script, + StorageSlot, Transaction as FuelTransaction, TransactionFee, TxPointer, UniqueIdentifier, + Upgrade, Upload, UploadBody, Witness, }; pub use fuel_tx::{UpgradePurpose, UploadSubsection}; use fuel_types::{bytes::padded_len_usize, Bytes32, Salt}; @@ -40,6 +40,8 @@ use crate::{ utils::{calculate_witnesses_size, sealed}, }; +use super::transaction::BlobTransaction; + mod script_tx_estimator; #[derive(Debug, Clone, Default)] @@ -522,10 +524,142 @@ impl Default for UpgradeTransactionBuilder { } } +#[derive(Default, Clone, Debug, PartialEq)] +pub struct Blob { + pub data: Vec, +} + +impl Blob { + pub fn id(&self) -> [u8; 32] { + BlobId::compute(&self.data).into() + } + + fn as_blob_body(&self, witness_index: u16) -> fuel_tx::BlobBody { + fuel_tx::BlobBody { + id: self.id().into(), + witness_index, + } + } +} + +impl From for fuel_tx::Witness { + fn from(blob: Blob) -> Self { + blob.data.into() + } +} + +#[derive(Default)] +pub struct BlobTransactionBuilder { + pub inputs: Vec, + pub outputs: Vec, + pub witnesses: Vec, + pub tx_policies: TxPolicies, + pub gas_price_estimation_block_horizon: u32, + pub max_fee_estimation_tolerance: f32, + pub build_strategy: Strategy, + pub blob: Blob, + unresolved_witness_indexes: UnresolvedWitnessIndexes, + unresolved_signers: Vec>, +} + +impl BlobTransactionBuilder { + pub async fn build(mut self, provider: impl DryRunner) -> Result { + let is_using_predicates = self.is_using_predicates(); + + let tx = match self.build_strategy { + Strategy::Complete => self.resolve_fuel_tx(&provider).await?, + Strategy::NoSignatures => { + self.set_witness_indexes(); + self.unresolved_signers = Default::default(); + self.resolve_fuel_tx(&provider).await? + } + }; + + Ok(BlobTransaction { + is_using_predicates, + tx, + }) + } + + fn clone_without_signers(&self) -> Self { + Self { + inputs: self.inputs.clone(), + outputs: self.outputs.clone(), + witnesses: self.witnesses.clone(), + tx_policies: self.tx_policies, + unresolved_witness_indexes: self.unresolved_witness_indexes.clone(), + unresolved_signers: Default::default(), + gas_price_estimation_block_horizon: self.gas_price_estimation_block_horizon, + max_fee_estimation_tolerance: self.max_fee_estimation_tolerance, + build_strategy: self.build_strategy.clone(), + blob: self.blob.clone(), + } + } + + async fn resolve_fuel_tx(mut self, provider: &impl DryRunner) -> Result { + let chain_id = provider.consensus_parameters().chain_id(); + + // TODO: segfault + let blob_witness_index = self.witnesses.len() as u16; + let body = self.blob.as_blob_body(blob_witness_index); + let blob_witness = std::mem::take(&mut self.blob).into(); + self.witnesses.push(blob_witness); + + let num_witnesses = self.num_witnesses()?; + let policies = self.generate_fuel_policies()?; + let is_using_predicates = self.is_using_predicates(); + + let mut tx = FuelTransaction::blob( + body, + policies, + resolve_fuel_inputs(self.inputs, num_witnesses, &self.unresolved_witness_indexes)?, + self.outputs, + self.witnesses, + ); + + if let Some(max_fee) = self.tx_policies.max_fee() { + tx.policies_mut().set(PolicyType::MaxFee, Some(max_fee)); + } else { + Self::set_max_fee_policy( + &mut tx, + &provider, + self.gas_price_estimation_block_horizon, + is_using_predicates, + self.max_fee_estimation_tolerance, + ) + .await?; + } + + let signatures = + generate_missing_witnesses(tx.id(&chain_id), &self.unresolved_signers).await?; + tx.witnesses_mut().extend(signatures); + + Ok(tx) + } +} + +impl sealed::Sealed for BlobTransactionBuilder {} + +#[cfg_attr(not(target_arch = "wasm32"), async_trait)] +impl BuildableTransaction for BlobTransactionBuilder { + type TxType = BlobTransaction; + type Strategy = Strategy; + + fn with_build_strategy(mut self, strategy: Self::Strategy) -> Self { + self.build_strategy = strategy; + self + } + + async fn build(self, provider: impl DryRunner) -> Result { + BlobTransactionBuilder::build(self, provider).await + } +} + impl_tx_trait!(ScriptTransactionBuilder, ScriptTransaction); impl_tx_trait!(CreateTransactionBuilder, CreateTransaction); impl_tx_trait!(UploadTransactionBuilder, UploadTransaction); impl_tx_trait!(UpgradeTransactionBuilder, UpgradeTransaction); +impl_tx_trait!(BlobTransactionBuilder, BlobTransaction); impl ScriptTransactionBuilder { async fn build(mut self, provider: impl DryRunner) -> Result { diff --git a/packages/fuels-core/src/types/wrappers/transaction.rs b/packages/fuels-core/src/types/wrappers/transaction.rs index 5bd7baeb12..7a7c814eac 100644 --- a/packages/fuels-core/src/types/wrappers/transaction.rs +++ b/packages/fuels-core/src/types/wrappers/transaction.rs @@ -14,9 +14,9 @@ use fuel_tx::{ }, }, policies::PolicyType, - Bytes32, Cacheable, Chargeable, ConsensusParameters, Create, FormatValidityChecks, Input, Mint, - Output, Salt as FuelSalt, Script, StorageSlot, Transaction as FuelTransaction, TransactionFee, - UniqueIdentifier, Upgrade, Upload, Witness, + Blob, Bytes32, Cacheable, Chargeable, ConsensusParameters, Create, FormatValidityChecks, Input, + Mint, Output, Salt as FuelSalt, Script, StorageSlot, Transaction as FuelTransaction, + TransactionFee, UniqueIdentifier, Upgrade, Upload, Witness, }; use fuel_types::{bytes::padded_len_usize, AssetId, ChainId}; use fuel_vm::checked_transaction::{ @@ -190,6 +190,7 @@ pub enum TransactionType { Mint(MintTransaction), Upload(UploadTransaction), Upgrade(UpgradeTransaction), + Blob(BlobTransaction), } #[cfg_attr(target_arch = "wasm32", async_trait(?Send))] @@ -293,6 +294,7 @@ impl From for FuelTransaction { TransactionType::Mint(tx) => tx.into(), TransactionType::Upload(tx) => tx.into(), TransactionType::Upgrade(tx) => tx.into(), + TransactionType::Blob(tx) => tx.into(), } } } @@ -537,6 +539,7 @@ impl_tx_wrapper!(ScriptTransaction, Script); impl_tx_wrapper!(CreateTransaction, Create); impl_tx_wrapper!(UploadTransaction, Upload); impl_tx_wrapper!(UpgradeTransaction, Upgrade); +impl_tx_wrapper!(BlobTransaction, Blob); #[cfg_attr(target_arch = "wasm32", async_trait(?Send))] #[cfg_attr(not(target_arch = "wasm32"), async_trait)] @@ -650,6 +653,30 @@ impl EstimablePredicates for ScriptTransaction { } } +#[cfg_attr(target_arch = "wasm32", async_trait(?Send))] +#[cfg_attr(not(target_arch = "wasm32"), async_trait)] +impl EstimablePredicates for BlobTransaction { + async fn estimate_predicates( + &mut self, + provider: impl DryRunner, + latest_chain_executor_version: Option, + ) -> Result<()> { + if let Some(tx) = provider + .maybe_estimate_predicates(&self.tx.clone().into(), latest_chain_executor_version) + .await? + { + tx.as_blob().expect("is blob").clone_into(&mut self.tx); + } else { + self.tx.estimate_predicates( + &provider.consensus_parameters().into(), + MemoryInstance::new(), + )?; + } + + Ok(()) + } +} + impl GasValidation for CreateTransaction { fn validate_gas(&self, _gas_used: u64) -> Result<()> { Ok(()) @@ -668,6 +695,12 @@ impl GasValidation for UpgradeTransaction { } } +impl GasValidation for BlobTransaction { + fn validate_gas(&self, _gas_used: u64) -> Result<()> { + Ok(()) + } +} + impl GasValidation for ScriptTransaction { fn validate_gas(&self, gas_used: u64) -> Result<()> { if gas_used > *self.tx.script_gas_limit() { diff --git a/packages/fuels-core/src/types/wrappers/transaction_response.rs b/packages/fuels-core/src/types/wrappers/transaction_response.rs index 5b797057e1..df7e166287 100644 --- a/packages/fuels-core/src/types/wrappers/transaction_response.rs +++ b/packages/fuels-core/src/types/wrappers/transaction_response.rs @@ -44,6 +44,8 @@ impl From for TransactionResponse { Transaction::Mint(tx) => TransactionType::Mint(tx.into()), Transaction::Upgrade(tx) => TransactionType::Upgrade(tx.into()), Transaction::Upload(tx) => TransactionType::Upload(tx.into()), + // TODO: segfault + Transaction::Blob(_) => todo!(""), }; Self { From 5290ad9a8a38d06b407a1888f4d802c79e76780a Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Tue, 23 Jul 2024 22:11:04 +0200 Subject: [PATCH 02/50] chunked deployment of contracts works --- Cargo.toml | 1 + e2e/Cargo.toml | 2 + e2e/sway/contracts/huge_contract/src/main.sw | 50039 +---------------- e2e/tests/contracts.rs | 61 +- packages/fuels-programs/src/lib.rs | 136 + 5 files changed, 181 insertions(+), 50058 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 13aa064317..f1b96ff0f8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -118,3 +118,4 @@ fuel-core-types = { default-features = false, path = "/home/segfault_magnet/fuel fuel-vm = { path = "/home/segfault_magnet/fuel/fuel-vm/fuel-vm" } fuel-types = { path = "/home/segfault_magnet/fuel/fuel-vm/fuel-types" } fuel-tx = { path = "/home/segfault_magnet/fuel/fuel-vm/fuel-tx" } +fuel-asm = { path = "/home/segfault_magnet/fuel/fuel-vm/fuel-asm" } diff --git a/e2e/Cargo.toml b/e2e/Cargo.toml index 2f5308a297..19b3b8d6e1 100644 --- a/e2e/Cargo.toml +++ b/e2e/Cargo.toml @@ -26,6 +26,8 @@ tokio = { workspace = true, features = ["test-util"] } pretty_assertions = { workspace = true, features = ["std"] } #TODO: segfault remove serde_json = { workspace = true, default-features = true } +#TODO: segfault remove +hex = { workspace = true, default-features = true } [build-dependencies] anyhow = { workspace = true, features = ["std"] } diff --git a/e2e/sway/contracts/huge_contract/src/main.sw b/e2e/sway/contracts/huge_contract/src/main.sw index 300d1f614c..3dc4af3d05 100644 --- a/e2e/sway/contracts/huge_contract/src/main.sw +++ b/e2e/sway/contracts/huge_contract/src/main.sw @@ -1,50043 +1,14 @@ contract; abi MyContract { - fn something(start: u64) -> u64; + fn something() -> u64; } impl MyContract for Contract { - fn something(start: u64) -> u64 { - asm(r1: start, r2) { - add r2 zero zero; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - add r2 r2 r1; - r2 + fn something() -> u64 { + asm() { + blob i450000; } + 1001 } } diff --git a/e2e/tests/contracts.rs b/e2e/tests/contracts.rs index c142360004..fa3f738b3d 100644 --- a/e2e/tests/contracts.rs +++ b/e2e/tests/contracts.rs @@ -2,6 +2,7 @@ use fuel_tx::TxParameters; use fuels::{ core::codec::{calldata, encode_fn_selector, DecoderConfig, EncoderConfig}, prelude::*, + programs::loader_contract, tx::ContractParameters, types::{errors::transaction::Reason, input::Input, Bits256, Identity}, }; @@ -2162,7 +2163,7 @@ async fn blob_contract_deployment() -> Result<()> { let mut blob_ids = vec![]; let code = std::fs::read(contract_binary)?; - for chunk in code.chunks(50_000) { + for chunk in code.chunks(20_000) { let mut tb = BlobTransactionBuilder::default(); let blob = Blob { data: chunk.to_vec(), @@ -2180,30 +2181,42 @@ async fn blob_contract_deployment() -> Result<()> { blob_ids.push(blob_id); eprintln!("blob id: {:X}", fuel_tx::Bytes32::from(blob_id)); } + let contract = loader_contract(&blob_ids); - // abigen!(Contract( - // name = "MyContract", - // abi = "e2e/sway/contracts/huge_contract/out/release/huge_contract-abi.json" - // )); - // - // let contract = Contract::load_from(contract_binary, LoadConfiguration::default())?; - // - // let contract_id = contract.deploy(&wallet, TxPolicies::default()).await?; - // - // let contract_instance = MyContract::new(contract_id, wallet.clone()); - // contract_instance - // .methods() - // .chunk_1() - // .call() - // .await - // .expect("contract call failed"); - // - // contract_instance - // .methods() - // .chunk_2() - // .call() - // .await - // .expect("contract call failed"); + let contract_id = Contract::new(contract, Salt::zeroed(), vec![]) + .deploy(&wallet, Default::default()) + .await?; + eprintln!("The contract id is {contract_id}"); + + abigen!(Contract( + name = "MyContract", + abi = "e2e/sway/contracts/huge_contract/out/release/huge_contract-abi.json" + )); + + let contract_instance = MyContract::new(contract_id, wallet.clone()); + + let tx = contract_instance + .methods() + .something() + .build_tx() + .await + .expect("building a tx failed"); + + let receipts = provider + .send_transaction_and_await_commit(tx) + .await? + .take_receipts(); + eprintln!("{receipts:#?}"); + + let data = receipts + .into_iter() + .find_map(|r| match r { + Receipt::Return { val, .. } => Some(val.to_be_bytes().to_vec()), + Receipt::ReturnData { data, .. } => Some(data.unwrap()), + _ => None, + }) + .unwrap(); + eprintln!("Contract returned: {}", hex::encode(data)); Ok(()) } diff --git a/packages/fuels-programs/src/lib.rs b/packages/fuels-programs/src/lib.rs index 755e14c274..1290507883 100644 --- a/packages/fuels-programs/src/lib.rs +++ b/packages/fuels-programs/src/lib.rs @@ -1,3 +1,139 @@ +use fuel_asm::{op, Instruction, RegId}; + pub mod calls; pub mod contract; pub mod responses; + +// This is the contract from the tooling team +// configurable { +// TARGET_1: ContractId = ContractId::from(0x729ec21b3966e9105699aa6f10c07bec8af0b72c6fadd099961d8cfbea34e45f), +// TARGET_2: ContractId = ContractId::from(0x91fce82e763bbb94c788510a9249cb501460a53c9fe27a68365cee70b5bd6de2), +// TARGET_3: ContractId = ContractId::from(0x5c655e1c02612ea7743b857816226faee077bb357dc6966a234f1db5fca3c33f), +// TARGET_4: ContractId = ContractId::from(0x2b0a8a8fde26d345c5ec441fec7ab62fa080b0e1a0a7bf2817f0a6dcef827eda), +// } +// +// abi RunExternalTest { +// fn test_function() -> bool; +// } +// +// impl RunExternalTest for Contract { +// fn test_function() -> bool { +// run_external4(TARGET_1, TARGET_2, TARGET_3, TARGET_4) +// } +// } +// +// fn run_external4(load_target1: ContractId, load_target2: ContractId, load_target3: ContractId, load_target4: ContractId) -> ! { +// asm( +// load_target1: load_target1, +// load_target2: load_target2, +// load_target3: load_target3, +// load_target4: load_target4, +// load_target2_heap, +// load_target3_heap, +// load_target4_heap, +// heap_alloc_size, +// length1, +// length2, +// length3, +// length4, +// ssp_saved, +// cur_stack_size, +// ) { +// csiz length1 load_target1; +// csiz length2 load_target2; +// csiz length3 load_target3; +// csiz length4 load_target4; +// addi heap_alloc_size zero i32; +// aloc heap_alloc_size; +// mcp hp load_target2 heap_alloc_size; +// move load_target2_heap hp; +// addi heap_alloc_size zero i32; +// aloc heap_alloc_size; +// mcp hp load_target3 heap_alloc_size; +// move load_target3_heap hp; +// addi heap_alloc_size zero i32; +// aloc heap_alloc_size; +// mcp hp load_target4 heap_alloc_size; +// move load_target4_heap hp; +// move ssp_saved ssp; +// sub cur_stack_size sp ssp; +// cfs cur_stack_size; +// ldc load_target1 zero length1; +// ldc load_target2_heap zero length2; +// ldc load_target3_heap zero length3; +// ldc load_target4_heap zero length4; +// addi heap_alloc_size zero i64; +// aloc heap_alloc_size; +// sw hp ssp_saved i0; +// } +// __jmp_mem() +// } +pub fn loader_contract(blob_ids: &[[u8; 32]]) -> Vec { + const BLOB_ID_SIZE: u16 = 32; + let get_instructions = |num_of_instructions, num_of_blobs| { + [ + // 0x12 is going to hold the total size of the contract + op::move_(0x12, RegId::ZERO), + // find the start of the hardcoded blob ids, which are located after the code ends + op::move_(0x10, RegId::IS), + // 0x10 to hold the address of the current blob id + op::addi(0x10, 0x10, num_of_instructions * Instruction::SIZE as u16), + // loop counter + op::addi(0x13, RegId::ZERO, num_of_blobs), + // LOOP starts here + // 0x11 to hold the size of the current blob + op::bsiz(0x11, 0x10), + // update the total size of the contract + op::add(0x12, 0x12, 0x11), + // move on to the next blob + op::addi(0x10, 0x10, BLOB_ID_SIZE), + // decrement the loop counter + op::subi(0x13, 0x13, 1), + // Jump backwards 3 instructions if the counter has not reached 0 + op::jneb(0x13, RegId::ZERO, RegId::ZERO, 3), + // move the stack pointer by the contract size since we need to write the contract on the stack + op::cfe(0x12), + // find the start of the hardcoded blob ids, which are located after the code ends + op::move_(0x10, RegId::IS), + // 0x10 to hold the address of the current blob id + op::addi(0x10, 0x10, num_of_instructions * Instruction::SIZE as u16), + // 0x12 is going to hold the total bytes loaded of the contract + op::move_(0x12, RegId::ZERO), + // loop counter + op::addi(0x13, RegId::ZERO, num_of_blobs), + // LOOP starts here + // 0x11 to hold the size of the current blob + op::bsiz(0x11, 0x10), + // the location where to load the current blob (start of stack) + op::move_(0x14, RegId::SSP), + // move to where this blob should be loaded by adding the total bytes loaded + op::add(0x14, 0x14, 0x12), + // load the current blob + op::bldd(0x14, 0x10, RegId::ZERO, 0x11), + // update the total bytes loaded + op::add(0x12, 0x12, 0x11), + // move on to the next blob + op::addi(0x10, 0x10, BLOB_ID_SIZE), + // decrement the loop counter + op::subi(0x13, 0x13, 1), + // Jump backwards 6 instructions if the counter has not reached 0 + op::jneb(0x13, RegId::ZERO, RegId::ZERO, 6), + // what follows is called _jmp_mem by the sway compiler + op::move_(0x16, RegId::SSP), + op::sub(0x16, 0x16, RegId::IS), + op::divi(0x16, 0x16, 4), + op::jmp(0x16), + ] + }; + + let real_num_of_instructions = get_instructions(0, blob_ids.len() as u16).len() as u16; + + let instruction_bytes: Vec = + get_instructions(real_num_of_instructions, blob_ids.len() as u16) + .into_iter() + .collect(); + + let blob_bytes: Vec = blob_ids.iter().flatten().copied().collect(); + + [instruction_bytes, blob_bytes].concat() +} From 51c74460dea35750dca3e381f0919cb36b425375 Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Tue, 23 Jul 2024 22:32:01 +0200 Subject: [PATCH 03/50] move blob tx to separate module --- e2e/tests/contracts.rs | 17 +- .../src/types/transaction_builders.rs | 172 +++------------- .../src/types/transaction_builders/blob.rs | 191 ++++++++++++++++++ 3 files changed, 225 insertions(+), 155 deletions(-) create mode 100644 packages/fuels-core/src/types/transaction_builders/blob.rs diff --git a/e2e/tests/contracts.rs b/e2e/tests/contracts.rs index fa3f738b3d..ce3bda16c6 100644 --- a/e2e/tests/contracts.rs +++ b/e2e/tests/contracts.rs @@ -2165,9 +2165,7 @@ async fn blob_contract_deployment() -> Result<()> { let code = std::fs::read(contract_binary)?; for chunk in code.chunks(20_000) { let mut tb = BlobTransactionBuilder::default(); - let blob = Blob { - data: chunk.to_vec(), - }; + let blob = Blob::new(chunk.to_vec()); let blob_id = blob.id(); tb.blob = blob; wallet.adjust_for_fee(&mut tb, 0).await?; @@ -2210,13 +2208,16 @@ async fn blob_contract_deployment() -> Result<()> { let data = receipts .into_iter() - .find_map(|r| match r { - Receipt::Return { val, .. } => Some(val.to_be_bytes().to_vec()), - Receipt::ReturnData { data, .. } => Some(data.unwrap()), - _ => None, + .find_map(|r| { + if let Receipt::ReturnData { data, .. } = r { + Some(data.unwrap()) + } else { + None + } }) + .map(|data| u64::from_be_bytes(data.as_slice().try_into().unwrap())) .unwrap(); - eprintln!("Contract returned: {}", hex::encode(data)); + assert_eq!(data, 1001); Ok(()) } diff --git a/packages/fuels-core/src/types/transaction_builders.rs b/packages/fuels-core/src/types/transaction_builders.rs index 7c609c755a..a83133bb52 100644 --- a/packages/fuels-core/src/types/transaction_builders.rs +++ b/packages/fuels-core/src/types/transaction_builders.rs @@ -12,9 +12,9 @@ use fuel_crypto::{Hasher, Message as CryptoMessage, Signature}; use fuel_tx::{ field::{Outputs, Policies as PoliciesField, ScriptGasLimit, Witnesses}, policies::{Policies, PolicyType}, - BlobId, BlobIdExt, Chargeable, ConsensusParameters, Create, Input as FuelInput, Output, Script, - StorageSlot, Transaction as FuelTransaction, TransactionFee, TxPointer, UniqueIdentifier, - Upgrade, Upload, UploadBody, Witness, + Chargeable, ConsensusParameters, Create, Input as FuelInput, Output, Script, StorageSlot, + Transaction as FuelTransaction, TransactionFee, TxPointer, UniqueIdentifier, Upgrade, Upload, + UploadBody, Witness, }; pub use fuel_tx::{UpgradePurpose, UploadSubsection}; use fuel_types::{bytes::padded_len_usize, Bytes32, Salt}; @@ -40,10 +40,11 @@ use crate::{ utils::{calculate_witnesses_size, sealed}, }; -use super::transaction::BlobTransaction; - +mod blob; mod script_tx_estimator; +pub use blob::*; + #[derive(Debug, Clone, Default)] struct UnresolvedWitnessIndexes { owner_to_idx_offset: HashMap, @@ -173,10 +174,10 @@ pub trait TransactionBuilder: BuildableTransaction + Send + sealed::Sealed { fn with_estimation_horizon(self, block_horizon: u32) -> Self; } -macro_rules! impl_tx_trait { +macro_rules! impl_tx_builder_trait { ($ty: ty, $tx_ty: ident) => { #[cfg_attr(not(target_arch = "wasm32"), async_trait)] - impl TransactionBuilder for $ty { + impl $crate::types::transaction_builders::TransactionBuilder for $ty { type TxType = $tx_ty; fn add_signer(&mut self, signer: impl Signer + Send + Sync) -> Result<&mut Self> { @@ -213,7 +214,11 @@ macro_rules! impl_tx_trait { .witnesses_mut() .extend(repeat(witness).take(self.unresolved_signers.len())); - let mut tx = BuildableTransaction::build(fee_estimation_tb, &provider).await?; + let mut tx = $crate::types::transaction_builders::BuildableTransaction::build( + fee_estimation_tb, + &provider, + ) + .await?; if tx.is_using_predicates() { tx.estimate_predicates(&provider, None).await?; @@ -225,7 +230,7 @@ macro_rules! impl_tx_trait { .estimate_gas_price(self.gas_price_estimation_block_horizon) .await?; - estimate_max_fee_w_tolerance( + $crate::types::transaction_builders::estimate_max_fee_w_tolerance( tx.tx, self.max_fee_estimation_tolerance, gas_price, @@ -287,6 +292,7 @@ macro_rules! impl_tx_trait { impl $ty { fn set_witness_indexes(&mut self) { + use $crate::types::transaction_builders::TransactionBuilder; self.unresolved_witness_indexes.owner_to_idx_offset = self .inputs() .iter() @@ -317,12 +323,14 @@ macro_rules! impl_tx_trait { } fn is_using_predicates(&self) -> bool { + use $crate::types::transaction_builders::TransactionBuilder; self.inputs() .iter() .any(|input| matches!(input, Input::ResourcePredicate { .. })) } fn num_witnesses(&self) -> Result { + use $crate::types::transaction_builders::TransactionBuilder; let num_witnesses = self.witnesses().len(); if num_witnesses + self.unresolved_signers.len() > u16::MAX as usize { @@ -361,7 +369,7 @@ macro_rules! impl_tx_trait { let gas_price = provider.estimate_gas_price(block_horizon).await?; let consensus_parameters = provider.consensus_parameters(); - let max_fee = estimate_max_fee_w_tolerance( + let max_fee = $crate::types::transaction_builders::estimate_max_fee_w_tolerance( wrapper_tx.tx, max_fee_estimation_tolerance, gas_price, @@ -376,7 +384,9 @@ macro_rules! impl_tx_trait { }; } -fn estimate_max_fee_w_tolerance( +pub(crate) use impl_tx_builder_trait; + +pub(crate) fn estimate_max_fee_w_tolerance( tx: T, tolerance: f32, gas_price: u64, @@ -524,142 +534,10 @@ impl Default for UpgradeTransactionBuilder { } } -#[derive(Default, Clone, Debug, PartialEq)] -pub struct Blob { - pub data: Vec, -} - -impl Blob { - pub fn id(&self) -> [u8; 32] { - BlobId::compute(&self.data).into() - } - - fn as_blob_body(&self, witness_index: u16) -> fuel_tx::BlobBody { - fuel_tx::BlobBody { - id: self.id().into(), - witness_index, - } - } -} - -impl From for fuel_tx::Witness { - fn from(blob: Blob) -> Self { - blob.data.into() - } -} - -#[derive(Default)] -pub struct BlobTransactionBuilder { - pub inputs: Vec, - pub outputs: Vec, - pub witnesses: Vec, - pub tx_policies: TxPolicies, - pub gas_price_estimation_block_horizon: u32, - pub max_fee_estimation_tolerance: f32, - pub build_strategy: Strategy, - pub blob: Blob, - unresolved_witness_indexes: UnresolvedWitnessIndexes, - unresolved_signers: Vec>, -} - -impl BlobTransactionBuilder { - pub async fn build(mut self, provider: impl DryRunner) -> Result { - let is_using_predicates = self.is_using_predicates(); - - let tx = match self.build_strategy { - Strategy::Complete => self.resolve_fuel_tx(&provider).await?, - Strategy::NoSignatures => { - self.set_witness_indexes(); - self.unresolved_signers = Default::default(); - self.resolve_fuel_tx(&provider).await? - } - }; - - Ok(BlobTransaction { - is_using_predicates, - tx, - }) - } - - fn clone_without_signers(&self) -> Self { - Self { - inputs: self.inputs.clone(), - outputs: self.outputs.clone(), - witnesses: self.witnesses.clone(), - tx_policies: self.tx_policies, - unresolved_witness_indexes: self.unresolved_witness_indexes.clone(), - unresolved_signers: Default::default(), - gas_price_estimation_block_horizon: self.gas_price_estimation_block_horizon, - max_fee_estimation_tolerance: self.max_fee_estimation_tolerance, - build_strategy: self.build_strategy.clone(), - blob: self.blob.clone(), - } - } - - async fn resolve_fuel_tx(mut self, provider: &impl DryRunner) -> Result { - let chain_id = provider.consensus_parameters().chain_id(); - - // TODO: segfault - let blob_witness_index = self.witnesses.len() as u16; - let body = self.blob.as_blob_body(blob_witness_index); - let blob_witness = std::mem::take(&mut self.blob).into(); - self.witnesses.push(blob_witness); - - let num_witnesses = self.num_witnesses()?; - let policies = self.generate_fuel_policies()?; - let is_using_predicates = self.is_using_predicates(); - - let mut tx = FuelTransaction::blob( - body, - policies, - resolve_fuel_inputs(self.inputs, num_witnesses, &self.unresolved_witness_indexes)?, - self.outputs, - self.witnesses, - ); - - if let Some(max_fee) = self.tx_policies.max_fee() { - tx.policies_mut().set(PolicyType::MaxFee, Some(max_fee)); - } else { - Self::set_max_fee_policy( - &mut tx, - &provider, - self.gas_price_estimation_block_horizon, - is_using_predicates, - self.max_fee_estimation_tolerance, - ) - .await?; - } - - let signatures = - generate_missing_witnesses(tx.id(&chain_id), &self.unresolved_signers).await?; - tx.witnesses_mut().extend(signatures); - - Ok(tx) - } -} - -impl sealed::Sealed for BlobTransactionBuilder {} - -#[cfg_attr(not(target_arch = "wasm32"), async_trait)] -impl BuildableTransaction for BlobTransactionBuilder { - type TxType = BlobTransaction; - type Strategy = Strategy; - - fn with_build_strategy(mut self, strategy: Self::Strategy) -> Self { - self.build_strategy = strategy; - self - } - - async fn build(self, provider: impl DryRunner) -> Result { - BlobTransactionBuilder::build(self, provider).await - } -} - -impl_tx_trait!(ScriptTransactionBuilder, ScriptTransaction); -impl_tx_trait!(CreateTransactionBuilder, CreateTransaction); -impl_tx_trait!(UploadTransactionBuilder, UploadTransaction); -impl_tx_trait!(UpgradeTransactionBuilder, UpgradeTransaction); -impl_tx_trait!(BlobTransactionBuilder, BlobTransaction); +impl_tx_builder_trait!(ScriptTransactionBuilder, ScriptTransaction); +impl_tx_builder_trait!(CreateTransactionBuilder, CreateTransaction); +impl_tx_builder_trait!(UploadTransactionBuilder, UploadTransaction); +impl_tx_builder_trait!(UpgradeTransactionBuilder, UpgradeTransaction); impl ScriptTransactionBuilder { async fn build(mut self, provider: impl DryRunner) -> Result { diff --git a/packages/fuels-core/src/types/transaction_builders/blob.rs b/packages/fuels-core/src/types/transaction_builders/blob.rs new file mode 100644 index 0000000000..a30e43524d --- /dev/null +++ b/packages/fuels-core/src/types/transaction_builders/blob.rs @@ -0,0 +1,191 @@ +use std::{ + collections::HashMap, + fmt::{Debug, Formatter}, + iter::repeat, +}; + +use async_trait::async_trait; +use fuel_asm::{op, GTFArgs, RegId}; +use fuel_crypto::{Hasher, Message as CryptoMessage, Signature}; +use fuel_tx::{ + field::{Outputs, Policies as PoliciesField, ScriptGasLimit, Witnesses}, + policies::{Policies, PolicyType}, + BlobId, BlobIdExt, Chargeable, ConsensusParameters, Create, Input as FuelInput, Output, Script, + StorageSlot, Transaction as FuelTransaction, TransactionFee, TxPointer, UniqueIdentifier, + Upgrade, Upload, UploadBody, Witness, +}; +pub use fuel_tx::{UpgradePurpose, UploadSubsection}; +use fuel_types::{bytes::padded_len_usize, Bytes32, Salt}; +use itertools::Itertools; + +use crate::{ + constants::{SIGNATURE_WITNESS_SIZE, WORD_SIZE}, + traits::Signer, + types::{ + bech32::Bech32Address, + coin::Coin, + coin_type::CoinType, + errors::{error, error_transaction, Result}, + input::Input, + message::Message, + transaction::{ + BlobTransaction, CreateTransaction, EstimablePredicates, ScriptTransaction, + Transaction, TxPolicies, UpgradeTransaction, UploadTransaction, + }, + Address, AssetId, ContractId, DryRunner, + }, + utils::{calculate_witnesses_size, sealed}, +}; + +use super::{ + generate_missing_witnesses, impl_tx_builder_trait, resolve_fuel_inputs, BuildableTransaction, + Strategy, UnresolvedWitnessIndexes, +}; + +#[derive(Default, Clone, Debug, PartialEq)] +pub struct Blob { + pub data: Vec, +} + +impl From> for Blob { + fn from(data: Vec) -> Self { + Self { data } + } +} + +impl AsRef<[u8]> for Blob { + fn as_ref(&self) -> &[u8] { + &self.data + } +} + +impl Blob { + pub fn new(data: Vec) -> Self { + Self { data } + } + + pub fn id(&self) -> [u8; 32] { + BlobId::compute(&self.data).into() + } + + fn as_blob_body(&self, witness_index: u16) -> fuel_tx::BlobBody { + fuel_tx::BlobBody { + id: self.id().into(), + witness_index, + } + } +} + +impl From for fuel_tx::Witness { + fn from(blob: Blob) -> Self { + blob.data.into() + } +} + +#[derive(Default)] +pub struct BlobTransactionBuilder { + pub inputs: Vec, + pub outputs: Vec, + pub witnesses: Vec, + pub tx_policies: TxPolicies, + pub gas_price_estimation_block_horizon: u32, + pub max_fee_estimation_tolerance: f32, + pub build_strategy: Strategy, + pub blob: Blob, + unresolved_witness_indexes: UnresolvedWitnessIndexes, + unresolved_signers: Vec>, +} +impl_tx_builder_trait!(BlobTransactionBuilder, BlobTransaction); + +impl BlobTransactionBuilder { + pub async fn build(mut self, provider: impl DryRunner) -> Result { + let is_using_predicates = self.is_using_predicates(); + + let tx = match self.build_strategy { + Strategy::Complete => self.resolve_fuel_tx(&provider).await?, + Strategy::NoSignatures => { + self.set_witness_indexes(); + self.unresolved_signers = Default::default(); + self.resolve_fuel_tx(&provider).await? + } + }; + + Ok(BlobTransaction { + is_using_predicates, + tx, + }) + } + + fn clone_without_signers(&self) -> Self { + Self { + inputs: self.inputs.clone(), + outputs: self.outputs.clone(), + witnesses: self.witnesses.clone(), + tx_policies: self.tx_policies, + unresolved_witness_indexes: self.unresolved_witness_indexes.clone(), + unresolved_signers: Default::default(), + gas_price_estimation_block_horizon: self.gas_price_estimation_block_horizon, + max_fee_estimation_tolerance: self.max_fee_estimation_tolerance, + build_strategy: self.build_strategy.clone(), + blob: self.blob.clone(), + } + } + + async fn resolve_fuel_tx(mut self, provider: &impl DryRunner) -> Result { + let chain_id = provider.consensus_parameters().chain_id(); + + // TODO: segfault + let blob_witness_index = self.witnesses.len() as u16; + let body = self.blob.as_blob_body(blob_witness_index); + let blob_witness = std::mem::take(&mut self.blob).into(); + self.witnesses.push(blob_witness); + + let num_witnesses = self.num_witnesses()?; + let policies = self.generate_fuel_policies()?; + let is_using_predicates = self.is_using_predicates(); + + let mut tx = FuelTransaction::blob( + body, + policies, + resolve_fuel_inputs(self.inputs, num_witnesses, &self.unresolved_witness_indexes)?, + self.outputs, + self.witnesses, + ); + + if let Some(max_fee) = self.tx_policies.max_fee() { + tx.policies_mut().set(PolicyType::MaxFee, Some(max_fee)); + } else { + Self::set_max_fee_policy( + &mut tx, + &provider, + self.gas_price_estimation_block_horizon, + is_using_predicates, + self.max_fee_estimation_tolerance, + ) + .await?; + } + + let signatures = + generate_missing_witnesses(tx.id(&chain_id), &self.unresolved_signers).await?; + tx.witnesses_mut().extend(signatures); + + Ok(tx) + } +} + +impl sealed::Sealed for BlobTransactionBuilder {} + +#[cfg_attr(not(target_arch = "wasm32"), async_trait)] +impl BuildableTransaction for BlobTransactionBuilder { + type TxType = BlobTransaction; + type Strategy = Strategy; + + fn with_build_strategy(mut self, strategy: Self::Strategy) -> Self { + self.build_strategy = strategy; + self + } + + async fn build(self, provider: impl DryRunner) -> Result { + BlobTransactionBuilder::build(self, provider).await + } +} From eccff6819ee7da65adc024463ab4d380c4ef87e8 Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Wed, 24 Jul 2024 00:58:45 +0200 Subject: [PATCH 04/50] predicates fixed --- e2e/tests/contracts.rs | 65 +++++--- .../src/provider/retryable_client.rs | 2 + .../src/types/transaction_builders/blob.rs | 47 +++--- .../src/types/wrappers/transaction.rs | 14 +- .../types/wrappers/transaction_response.rs | 3 +- packages/fuels-programs/Cargo.toml | 2 + packages/fuels-programs/src/contract.rs | 142 +++++++++++++++++- packages/fuels-programs/src/lib.rs | 69 --------- 8 files changed, 215 insertions(+), 129 deletions(-) diff --git a/e2e/tests/contracts.rs b/e2e/tests/contracts.rs index ce3bda16c6..479d35414b 100644 --- a/e2e/tests/contracts.rs +++ b/e2e/tests/contracts.rs @@ -1,8 +1,6 @@ -use fuel_tx::TxParameters; use fuels::{ core::codec::{calldata, encode_fn_selector, DecoderConfig, EncoderConfig}, prelude::*, - programs::loader_contract, tx::ContractParameters, types::{errors::transaction::Reason, input::Input, Bits256, Identity}, }; @@ -2160,30 +2158,10 @@ async fn blob_contract_deployment() -> Result<()> { let provider = setup_test_provider(coins, vec![], None, Some(chain_config)).await?; wallet.set_provider(provider.clone()); - let mut blob_ids = vec![]; - - let code = std::fs::read(contract_binary)?; - for chunk in code.chunks(20_000) { - let mut tb = BlobTransactionBuilder::default(); - let blob = Blob::new(chunk.to_vec()); - let blob_id = blob.id(); - tb.blob = blob; - wallet.adjust_for_fee(&mut tb, 0).await?; - tb.add_signer(wallet.clone())?; - let tx = tb.build(&provider).await?; - provider - .send_transaction_and_await_commit(tx) - .await? - .check(None)?; - - blob_ids.push(blob_id); - eprintln!("blob id: {:X}", fuel_tx::Bytes32::from(blob_id)); - } - let contract = loader_contract(&blob_ids); - - let contract_id = Contract::new(contract, Salt::zeroed(), vec![]) - .deploy(&wallet, Default::default()) + let contract_id = Contract::load_from(contract_binary, LoadConfiguration::default())? + .deploy_as_loader(&wallet, TxPolicies::default(), 20_000) .await?; + eprintln!("The contract id is {contract_id}"); abigen!(Contract( @@ -2221,3 +2199,40 @@ async fn blob_contract_deployment() -> Result<()> { Ok(()) } + +#[tokio::test] +async fn mini_example() -> Result<()> { + setup_program_test!( + Wallets("wallet"), + Abigen(Predicate( + name = "MyPredicate", + project = "e2e/sway/types/predicates/u64" + ),), + ); + + let provider: Provider = wallet.try_provider()?.clone(); + let data = MyPredicateEncoder::default().encode_data(32768)?; + let predicate = Predicate::load_from("sway/types/predicates/u64/out/release/u64.bin")? + .with_data(data) + .with_provider(provider.clone()); + + wallet + .transfer( + predicate.address(), + 10_000, + AssetId::zeroed(), + TxPolicies::default(), + ) + .await?; + + let blob_data = vec![1u8; 10]; + let mut tb = BlobTransactionBuilder::default().with_blob(blob_data.into()); + predicate.adjust_for_fee(&mut tb, 0).await?; + let tx = tb.build(provider.clone()).await?; + provider + .send_transaction_and_await_commit(tx) + .await? + .check(None)?; + + Ok(()) +} diff --git a/packages/fuels-accounts/src/provider/retryable_client.rs b/packages/fuels-accounts/src/provider/retryable_client.rs index 7c65acd0a8..009e8c7a05 100644 --- a/packages/fuels-accounts/src/provider/retryable_client.rs +++ b/packages/fuels-accounts/src/provider/retryable_client.rs @@ -125,6 +125,8 @@ impl RetryableClient { &self, tx: &Transaction, ) -> RequestResult { + eprintln!("submit_and_await_commit: {tx:#?}"); + self.wrap(|| self.client.submit_and_await_commit(tx)).await } diff --git a/packages/fuels-core/src/types/transaction_builders/blob.rs b/packages/fuels-core/src/types/transaction_builders/blob.rs index a30e43524d..d4bdc99c00 100644 --- a/packages/fuels-core/src/types/transaction_builders/blob.rs +++ b/packages/fuels-core/src/types/transaction_builders/blob.rs @@ -1,38 +1,23 @@ -use std::{ - collections::HashMap, - fmt::{Debug, Formatter}, - iter::repeat, -}; +use std::{fmt::Debug, iter::repeat}; use async_trait::async_trait; -use fuel_asm::{op, GTFArgs, RegId}; -use fuel_crypto::{Hasher, Message as CryptoMessage, Signature}; +use fuel_crypto::Signature; use fuel_tx::{ - field::{Outputs, Policies as PoliciesField, ScriptGasLimit, Witnesses}, + field::{Policies as PoliciesField, Witnesses}, policies::{Policies, PolicyType}, - BlobId, BlobIdExt, Chargeable, ConsensusParameters, Create, Input as FuelInput, Output, Script, - StorageSlot, Transaction as FuelTransaction, TransactionFee, TxPointer, UniqueIdentifier, - Upgrade, Upload, UploadBody, Witness, + BlobIdExt, Chargeable, Output, Transaction as FuelTransaction, UniqueIdentifier, Witness, }; -pub use fuel_tx::{UpgradePurpose, UploadSubsection}; -use fuel_types::{bytes::padded_len_usize, Bytes32, Salt}; +use fuel_types::bytes::padded_len_usize; use itertools::Itertools; use crate::{ - constants::{SIGNATURE_WITNESS_SIZE, WORD_SIZE}, + constants::SIGNATURE_WITNESS_SIZE, traits::Signer, types::{ - bech32::Bech32Address, - coin::Coin, - coin_type::CoinType, errors::{error, error_transaction, Result}, input::Input, - message::Message, - transaction::{ - BlobTransaction, CreateTransaction, EstimablePredicates, ScriptTransaction, - Transaction, TxPolicies, UpgradeTransaction, UploadTransaction, - }, - Address, AssetId, ContractId, DryRunner, + transaction::{BlobTransaction, EstimablePredicates, Transaction, TxPolicies}, + DryRunner, }, utils::{calculate_witnesses_size, sealed}, }; @@ -47,6 +32,8 @@ pub struct Blob { pub data: Vec, } +pub type BlobId = [u8; 32]; + impl From> for Blob { fn from(data: Vec) -> Self { Self { data } @@ -64,8 +51,8 @@ impl Blob { Self { data } } - pub fn id(&self) -> [u8; 32] { - BlobId::compute(&self.data).into() + pub fn id(&self) -> BlobId { + fuel_tx::BlobId::compute(&self.data).into() } fn as_blob_body(&self, witness_index: u16) -> fuel_tx::BlobBody { @@ -171,6 +158,16 @@ impl BlobTransactionBuilder { Ok(tx) } + + pub fn with_blob(mut self, blob: Blob) -> Self { + self.blob = blob; + self + } + + pub fn with_max_fee_estimation_tolerance(mut self, max_fee_estimation_tolerance: f32) -> Self { + self.max_fee_estimation_tolerance = max_fee_estimation_tolerance; + self + } } impl sealed::Sealed for BlobTransactionBuilder {} diff --git a/packages/fuels-core/src/types/wrappers/transaction.rs b/packages/fuels-core/src/types/wrappers/transaction.rs index 7a7c814eac..9b45cfc326 100644 --- a/packages/fuels-core/src/types/wrappers/transaction.rs +++ b/packages/fuels-core/src/types/wrappers/transaction.rs @@ -381,12 +381,14 @@ macro_rules! impl_tx_wrapper { consensus_parameters: &ConsensusParameters, block_height: u32, ) -> Result<()> { - let checked = self - .tx - .into_checked(block_height.into(), consensus_parameters)?; - let check_predicates_parameters: CheckPredicateParams = consensus_parameters.into(); - checked.check_predicates(&check_predicates_parameters, MemoryInstance::new())?; - + // let checked = self + // .tx + // .into_checked(block_height.into(), consensus_parameters)?; + // + // let check_predicates_parameters: CheckPredicateParams = consensus_parameters.into(); + // + // checked.check_predicates(&check_predicates_parameters, MemoryInstance::new())?; + // Ok(()) } } diff --git a/packages/fuels-core/src/types/wrappers/transaction_response.rs b/packages/fuels-core/src/types/wrappers/transaction_response.rs index df7e166287..c0711a4a36 100644 --- a/packages/fuels-core/src/types/wrappers/transaction_response.rs +++ b/packages/fuels-core/src/types/wrappers/transaction_response.rs @@ -44,8 +44,7 @@ impl From for TransactionResponse { Transaction::Mint(tx) => TransactionType::Mint(tx.into()), Transaction::Upgrade(tx) => TransactionType::Upgrade(tx.into()), Transaction::Upload(tx) => TransactionType::Upload(tx.into()), - // TODO: segfault - Transaction::Blob(_) => todo!(""), + Transaction::Blob(tx) => TransactionType::Blob(tx.into()), }; Self { diff --git a/packages/fuels-programs/Cargo.toml b/packages/fuels-programs/Cargo.toml index 3799f8b085..f12f483fb9 100644 --- a/packages/fuels-programs/Cargo.toml +++ b/packages/fuels-programs/Cargo.toml @@ -21,6 +21,8 @@ itertools = { workspace = true } rand = { workspace = true } serde_json = { workspace = true } tokio = { workspace = true } +# TODO: segfault remove this +hex = { workspace = true, default-features = true } [dev-dependencies] tempfile = "3.8.1" diff --git a/packages/fuels-programs/src/contract.rs b/packages/fuels-programs/src/contract.rs index b0889356c5..4ac369a8e2 100644 --- a/packages/fuels-programs/src/contract.rs +++ b/packages/fuels-programs/src/contract.rs @@ -7,13 +7,16 @@ use std::{ path::{Path, PathBuf}, }; +use fuel_asm::{op, Instruction, RegId}; use fuel_tx::{Bytes32, Contract as FuelContract, ContractId, Salt, StorageSlot}; use fuels_accounts::Account; use fuels_core::types::{ bech32::Bech32ContractId, errors::{error, Result}, transaction::TxPolicies, - transaction_builders::CreateTransactionBuilder, + transaction_builders::{ + Blob, BlobId, BlobTransactionBuilder, CreateTransactionBuilder, TransactionBuilder, + }, }; pub use load::*; pub use storage::*; @@ -45,6 +48,125 @@ impl Contract { } } + pub fn new_loader(blob_ids: &[[u8; 32]], salt: Salt, storage_slots: Vec) -> Self { + let code = Self::loader_contract(blob_ids); + Self::new(code, salt, storage_slots) + } + + pub async fn deploy_as_loader( + self, + account: &impl Account, + tx_policies: TxPolicies, + max_blob_size: usize, + ) -> Result { + let provider = account.try_provider()?; + + let blobs = self.generate_blobs(max_blob_size); + let blob_ids = blobs.iter().map(|blob| blob.id()).collect::>(); + for blob_id in &blob_ids { + eprintln!("blob_id: {}", hex::encode(blob_id)); + } + + for blob in blobs { + let mut tb = BlobTransactionBuilder::default() + .with_blob(blob) + .with_tx_policies(tx_policies) + .with_max_fee_estimation_tolerance(0.05); + + account.adjust_for_fee(&mut tb, 0).await?; + account.add_witnesses(&mut tb)?; + + let tx = tb.build(provider).await?; + eprintln!("sending blob tx"); + provider + .send_transaction_and_await_commit(tx) + .await? + .check(None)?; + eprintln!("blob tx succeeded"); + } + + let contract = Self::new_loader(&blob_ids, self.salt, self.storage_slots); + + contract._deploy(account, tx_policies).await + } + + pub fn generate_blobs(&self, max_size: usize) -> Vec { + self.binary + .chunks(max_size) + .map(|chunk| Blob::new(chunk.to_vec())) + .collect() + } + + fn loader_contract(blob_ids: &[[u8; 32]]) -> Vec { + const BLOB_ID_SIZE: u16 = 32; + let get_instructions = |num_of_instructions, num_of_blobs| { + [ + // 0x12 is going to hold the total size of the contract + op::move_(0x12, RegId::ZERO), + // find the start of the hardcoded blob ids, which are located after the code ends + op::move_(0x10, RegId::IS), + // 0x10 to hold the address of the current blob id + op::addi(0x10, 0x10, num_of_instructions * Instruction::SIZE as u16), + // loop counter + op::addi(0x13, RegId::ZERO, num_of_blobs), + // LOOP starts here + // 0x11 to hold the size of the current blob + op::bsiz(0x11, 0x10), + // update the total size of the contract + op::add(0x12, 0x12, 0x11), + // move on to the next blob + op::addi(0x10, 0x10, BLOB_ID_SIZE), + // decrement the loop counter + op::subi(0x13, 0x13, 1), + // Jump backwards 3 instructions if the counter has not reached 0 + op::jneb(0x13, RegId::ZERO, RegId::ZERO, 3), + // move the stack pointer by the contract size since we need to write the contract on the stack + op::cfe(0x12), + // find the start of the hardcoded blob ids, which are located after the code ends + op::move_(0x10, RegId::IS), + // 0x10 to hold the address of the current blob id + op::addi(0x10, 0x10, num_of_instructions * Instruction::SIZE as u16), + // 0x12 is going to hold the total bytes loaded of the contract + op::move_(0x12, RegId::ZERO), + // loop counter + op::addi(0x13, RegId::ZERO, num_of_blobs), + // LOOP starts here + // 0x11 to hold the size of the current blob + op::bsiz(0x11, 0x10), + // the location where to load the current blob (start of stack) + op::move_(0x14, RegId::SSP), + // move to where this blob should be loaded by adding the total bytes loaded + op::add(0x14, 0x14, 0x12), + // load the current blob + op::bldd(0x14, 0x10, RegId::ZERO, 0x11), + // update the total bytes loaded + op::add(0x12, 0x12, 0x11), + // move on to the next blob + op::addi(0x10, 0x10, BLOB_ID_SIZE), + // decrement the loop counter + op::subi(0x13, 0x13, 1), + // Jump backwards 6 instructions if the counter has not reached 0 + op::jneb(0x13, RegId::ZERO, RegId::ZERO, 6), + // what follows is called _jmp_mem by the sway compiler + op::move_(0x16, RegId::SSP), + op::sub(0x16, 0x16, RegId::IS), + op::divi(0x16, 0x16, 4), + op::jmp(0x16), + ] + }; + + let real_num_of_instructions = get_instructions(0, blob_ids.len() as u16).len() as u16; + + let instruction_bytes: Vec = + get_instructions(real_num_of_instructions, blob_ids.len() as u16) + .into_iter() + .collect(); + + let blob_bytes: Vec = blob_ids.iter().flatten().copied().collect(); + + [instruction_bytes, blob_bytes].concat() + } + fn compute_contract_id_and_state_root( binary: &[u8], salt: &Salt, @@ -75,10 +197,18 @@ impl Contract { self.code_root } + pub async fn deploy( + self, + account: &impl Account, + tx_policies: TxPolicies, + ) -> Result { + self.deploy_as_loader(account, tx_policies, 10_000).await + } + /// Deploys a compiled contract to a running node /// To deploy a contract, you need an account with enough assets to pay for deployment. /// This account will also receive the change. - pub async fn deploy( + pub async fn _deploy( self, account: &impl Account, tx_policies: TxPolicies, @@ -142,6 +272,14 @@ impl Contract { Ok(slots) } + + pub fn salt(&self) -> Salt { + self.salt + } + + pub fn storage_slots(&self) -> &[StorageSlot] { + &self.storage_slots + } } fn autoload_storage_slots(contract_binary: &Path) -> Result { diff --git a/packages/fuels-programs/src/lib.rs b/packages/fuels-programs/src/lib.rs index 1290507883..dcf85d155e 100644 --- a/packages/fuels-programs/src/lib.rs +++ b/packages/fuels-programs/src/lib.rs @@ -68,72 +68,3 @@ pub mod responses; // } // __jmp_mem() // } -pub fn loader_contract(blob_ids: &[[u8; 32]]) -> Vec { - const BLOB_ID_SIZE: u16 = 32; - let get_instructions = |num_of_instructions, num_of_blobs| { - [ - // 0x12 is going to hold the total size of the contract - op::move_(0x12, RegId::ZERO), - // find the start of the hardcoded blob ids, which are located after the code ends - op::move_(0x10, RegId::IS), - // 0x10 to hold the address of the current blob id - op::addi(0x10, 0x10, num_of_instructions * Instruction::SIZE as u16), - // loop counter - op::addi(0x13, RegId::ZERO, num_of_blobs), - // LOOP starts here - // 0x11 to hold the size of the current blob - op::bsiz(0x11, 0x10), - // update the total size of the contract - op::add(0x12, 0x12, 0x11), - // move on to the next blob - op::addi(0x10, 0x10, BLOB_ID_SIZE), - // decrement the loop counter - op::subi(0x13, 0x13, 1), - // Jump backwards 3 instructions if the counter has not reached 0 - op::jneb(0x13, RegId::ZERO, RegId::ZERO, 3), - // move the stack pointer by the contract size since we need to write the contract on the stack - op::cfe(0x12), - // find the start of the hardcoded blob ids, which are located after the code ends - op::move_(0x10, RegId::IS), - // 0x10 to hold the address of the current blob id - op::addi(0x10, 0x10, num_of_instructions * Instruction::SIZE as u16), - // 0x12 is going to hold the total bytes loaded of the contract - op::move_(0x12, RegId::ZERO), - // loop counter - op::addi(0x13, RegId::ZERO, num_of_blobs), - // LOOP starts here - // 0x11 to hold the size of the current blob - op::bsiz(0x11, 0x10), - // the location where to load the current blob (start of stack) - op::move_(0x14, RegId::SSP), - // move to where this blob should be loaded by adding the total bytes loaded - op::add(0x14, 0x14, 0x12), - // load the current blob - op::bldd(0x14, 0x10, RegId::ZERO, 0x11), - // update the total bytes loaded - op::add(0x12, 0x12, 0x11), - // move on to the next blob - op::addi(0x10, 0x10, BLOB_ID_SIZE), - // decrement the loop counter - op::subi(0x13, 0x13, 1), - // Jump backwards 6 instructions if the counter has not reached 0 - op::jneb(0x13, RegId::ZERO, RegId::ZERO, 6), - // what follows is called _jmp_mem by the sway compiler - op::move_(0x16, RegId::SSP), - op::sub(0x16, 0x16, RegId::IS), - op::divi(0x16, 0x16, 4), - op::jmp(0x16), - ] - }; - - let real_num_of_instructions = get_instructions(0, blob_ids.len() as u16).len() as u16; - - let instruction_bytes: Vec = - get_instructions(real_num_of_instructions, blob_ids.len() as u16) - .into_iter() - .collect(); - - let blob_bytes: Vec = blob_ids.iter().flatten().copied().collect(); - - [instruction_bytes, blob_bytes].concat() -} From 9187f55720fe407ed5037b37ef6ab47af5f4e4a5 Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Wed, 24 Jul 2024 00:59:48 +0200 Subject: [PATCH 05/50] turn on validation, remove repro --- e2e/tests/contracts.rs | 37 ------------------- .../src/types/wrappers/transaction.rs | 16 ++++---- 2 files changed, 8 insertions(+), 45 deletions(-) diff --git a/e2e/tests/contracts.rs b/e2e/tests/contracts.rs index 479d35414b..f4e9df1250 100644 --- a/e2e/tests/contracts.rs +++ b/e2e/tests/contracts.rs @@ -2199,40 +2199,3 @@ async fn blob_contract_deployment() -> Result<()> { Ok(()) } - -#[tokio::test] -async fn mini_example() -> Result<()> { - setup_program_test!( - Wallets("wallet"), - Abigen(Predicate( - name = "MyPredicate", - project = "e2e/sway/types/predicates/u64" - ),), - ); - - let provider: Provider = wallet.try_provider()?.clone(); - let data = MyPredicateEncoder::default().encode_data(32768)?; - let predicate = Predicate::load_from("sway/types/predicates/u64/out/release/u64.bin")? - .with_data(data) - .with_provider(provider.clone()); - - wallet - .transfer( - predicate.address(), - 10_000, - AssetId::zeroed(), - TxPolicies::default(), - ) - .await?; - - let blob_data = vec![1u8; 10]; - let mut tb = BlobTransactionBuilder::default().with_blob(blob_data.into()); - predicate.adjust_for_fee(&mut tb, 0).await?; - let tx = tb.build(provider.clone()).await?; - provider - .send_transaction_and_await_commit(tx) - .await? - .check(None)?; - - Ok(()) -} diff --git a/packages/fuels-core/src/types/wrappers/transaction.rs b/packages/fuels-core/src/types/wrappers/transaction.rs index 9b45cfc326..a8a59daef2 100644 --- a/packages/fuels-core/src/types/wrappers/transaction.rs +++ b/packages/fuels-core/src/types/wrappers/transaction.rs @@ -381,14 +381,14 @@ macro_rules! impl_tx_wrapper { consensus_parameters: &ConsensusParameters, block_height: u32, ) -> Result<()> { - // let checked = self - // .tx - // .into_checked(block_height.into(), consensus_parameters)?; - // - // let check_predicates_parameters: CheckPredicateParams = consensus_parameters.into(); - // - // checked.check_predicates(&check_predicates_parameters, MemoryInstance::new())?; - // + let checked = self + .tx + .into_checked(block_height.into(), consensus_parameters)?; + + let check_predicates_parameters: CheckPredicateParams = consensus_parameters.into(); + + checked.check_predicates(&check_predicates_parameters, MemoryInstance::new())?; + Ok(()) } } From f0ec31d9e172ed695aae1e9355236ff5a4f7a991 Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Wed, 24 Jul 2024 20:21:28 +0200 Subject: [PATCH 06/50] crude estimation available --- e2e/tests/contracts.rs | 73 ++++++++-------- .../src/provider/retryable_client.rs | 3 +- .../src/types/transaction_builders/blob.rs | 18 ++++ .../src/types/wrappers/transaction.rs | 7 ++ packages/fuels-programs/src/contract.rs | 86 ++++++++++++++----- packages/fuels/src/lib.rs | 2 +- 6 files changed, 127 insertions(+), 62 deletions(-) diff --git a/e2e/tests/contracts.rs b/e2e/tests/contracts.rs index f4e9df1250..78c5bce1ab 100644 --- a/e2e/tests/contracts.rs +++ b/e2e/tests/contracts.rs @@ -1,9 +1,11 @@ +use fuel_tx::TxParameters; use fuels::{ core::codec::{calldata, encode_fn_selector, DecoderConfig, EncoderConfig}, prelude::*, tx::ContractParameters, types::{errors::transaction::Reason, input::Input, Bits256, Identity}, }; +use pretty_assertions::assert_eq; use tokio::time::Instant; #[tokio::test] @@ -2122,7 +2124,7 @@ async fn blob_contract_deployment() -> Result<()> { "the testnet size limit was around 100kB, we want a contract bigger than that" ); - let chain_config = ChainConfig::local_testnet(); + let mut chain_config = ChainConfig::local_testnet(); let max_tx_size = chain_config.consensus_parameters.tx_params().max_size(); assert!( @@ -2130,6 +2132,11 @@ async fn blob_contract_deployment() -> Result<()> { "this contract if included in one piece would make the tx too big" ); + let max_tx_gas = chain_config + .consensus_parameters + .tx_params() + .max_gas_per_tx(); + let contract_max_size = chain_config .consensus_parameters .contract_params() @@ -2139,27 +2146,33 @@ async fn blob_contract_deployment() -> Result<()> { "the node won't allow a contract of this size to be created" ); - // { - // // TODO: segfault imported from fuel_tx - // let mut tx_params = *chain_config.consensus_parameters.tx_params(); - // let TxParameters::V1(params) = &mut tx_params; - // params.max_size += contract_size; - // chain_config.consensus_parameters.set_tx_params(tx_params); - // - // let mut contract_params = *chain_config.consensus_parameters.contract_params(); - // // TODO: segfault imported from fuel_tx - // let ContractParameters::V1(params) = &mut contract_params; - // params.contract_max_size = contract_size; - // chain_config - // .consensus_parameters - // .set_contract_params(contract_params); - // } + { + // TODO: segfault imported from fuel_tx + let mut tx_params = *chain_config.consensus_parameters.tx_params(); + let TxParameters::V1(params) = &mut tx_params; + params.max_size = 10_000; + chain_config.consensus_parameters.set_tx_params(tx_params); + + // let mut contract_params = *chain_config.consensus_parameters.contract_params(); + // // TODO: segfault imported from fuel_tx + // let ContractParameters::V1(params) = &mut contract_params; + // params.contract_max_size = contract_size; + // chain_config + // .consensus_parameters + // .set_contract_params(contract_params); + } let provider = setup_test_provider(coins, vec![], None, Some(chain_config)).await?; wallet.set_provider(provider.clone()); let contract_id = Contract::load_from(contract_binary, LoadConfiguration::default())? - .deploy_as_loader(&wallet, TxPolicies::default(), 20_000) + .deploy_as_loader( + &wallet, + TxPolicies::default(), + BlobSize::Estimate { + percentage_of_teoretical_max: 0.95, + }, + ) .await?; eprintln!("The contract id is {contract_id}"); @@ -2171,31 +2184,15 @@ async fn blob_contract_deployment() -> Result<()> { let contract_instance = MyContract::new(contract_id, wallet.clone()); - let tx = contract_instance + let response = contract_instance .methods() .something() - .build_tx() + .call() .await - .expect("building a tx failed"); + .expect("call failed") + .value; - let receipts = provider - .send_transaction_and_await_commit(tx) - .await? - .take_receipts(); - eprintln!("{receipts:#?}"); - - let data = receipts - .into_iter() - .find_map(|r| { - if let Receipt::ReturnData { data, .. } = r { - Some(data.unwrap()) - } else { - None - } - }) - .map(|data| u64::from_be_bytes(data.as_slice().try_into().unwrap())) - .unwrap(); - assert_eq!(data, 1001); + assert_eq!(response, 1001); Ok(()) } diff --git a/packages/fuels-accounts/src/provider/retryable_client.rs b/packages/fuels-accounts/src/provider/retryable_client.rs index 009e8c7a05..e0a30d67dc 100644 --- a/packages/fuels-accounts/src/provider/retryable_client.rs +++ b/packages/fuels-accounts/src/provider/retryable_client.rs @@ -125,7 +125,8 @@ impl RetryableClient { &self, tx: &Transaction, ) -> RequestResult { - eprintln!("submit_and_await_commit: {tx:#?}"); + use fuel_types::canonical::Serialize; + eprintln!("submit_and_await_commit: {}", tx.size()); self.wrap(|| self.client.submit_and_await_commit(tx)).await } diff --git a/packages/fuels-core/src/types/transaction_builders/blob.rs b/packages/fuels-core/src/types/transaction_builders/blob.rs index d4bdc99c00..e8b53f236f 100644 --- a/packages/fuels-core/src/types/transaction_builders/blob.rs +++ b/packages/fuels-core/src/types/transaction_builders/blob.rs @@ -3,6 +3,7 @@ use std::{fmt::Debug, iter::repeat}; use async_trait::async_trait; use fuel_crypto::Signature; use fuel_tx::{ + consensus_parameters, field::{Policies as PoliciesField, Witnesses}, policies::{Policies, PolicyType}, BlobIdExt, Chargeable, Output, Transaction as FuelTransaction, UniqueIdentifier, Witness, @@ -85,6 +86,23 @@ pub struct BlobTransactionBuilder { impl_tx_builder_trait!(BlobTransactionBuilder, BlobTransaction); impl BlobTransactionBuilder { + /// TODO: segfault add note about how fee is not taken into account and any later changes to + /// the tx + pub async fn estimate_max_blob_size(&self, provider: &impl DryRunner) -> Result { + let mut tb = self.clone_without_signers(); + tb.blob = Blob::new(vec![]); + + let tx = tb + .with_build_strategy(Strategy::NoSignatures) + .build(provider) + .await?; + + let current_tx_size = u64::try_from(tx.size()).unwrap_or(u64::MAX); + let max_tx_size = provider.consensus_parameters().tx_params().max_size(); + + Ok(max_tx_size.saturating_sub(current_tx_size)) + } + pub async fn build(mut self, provider: impl DryRunner) -> Result { let is_using_predicates = self.is_using_predicates(); diff --git a/packages/fuels-core/src/types/wrappers/transaction.rs b/packages/fuels-core/src/types/wrappers/transaction.rs index a8a59daef2..18ab3439a9 100644 --- a/packages/fuels-core/src/types/wrappers/transaction.rs +++ b/packages/fuels-core/src/types/wrappers/transaction.rs @@ -261,6 +261,8 @@ pub trait Transaction: fn max_fee(&self) -> Option; + fn size(&self) -> usize; + fn witness_limit(&self) -> Option; fn tip(&self) -> Option; @@ -467,6 +469,11 @@ macro_rules! impl_tx_wrapper { self.tx.policies().get(PolicyType::MaxFee) } + fn size(&self) -> usize { + use fuel_types::canonical::Serialize; + self.tx.size() + } + fn witness_limit(&self) -> Option { self.tx.policies().get(PolicyType::WitnessLimit) } diff --git a/packages/fuels-programs/src/contract.rs b/packages/fuels-programs/src/contract.rs index 4ac369a8e2..78709cafbe 100644 --- a/packages/fuels-programs/src/contract.rs +++ b/packages/fuels-programs/src/contract.rs @@ -9,13 +9,13 @@ use std::{ use fuel_asm::{op, Instruction, RegId}; use fuel_tx::{Bytes32, Contract as FuelContract, ContractId, Salt, StorageSlot}; -use fuels_accounts::Account; +use fuels_accounts::{provider::Provider, Account}; use fuels_core::types::{ bech32::Bech32ContractId, errors::{error, Result}, transaction::TxPolicies, transaction_builders::{ - Blob, BlobId, BlobTransactionBuilder, CreateTransactionBuilder, TransactionBuilder, + Blob, BlobTransactionBuilder, CreateTransactionBuilder, TransactionBuilder, }, }; pub use load::*; @@ -33,6 +33,29 @@ pub struct Contract { state_root: Bytes32, } +pub enum BlobSize { + AtMost { bytes: usize }, + Estimate { percentage_of_teoretical_max: f64 }, +} + +impl BlobSize { + async fn max_size(&self, provider: &Provider) -> Result { + let size = match self { + BlobSize::AtMost { bytes } => *bytes, + BlobSize::Estimate { + percentage_of_teoretical_max, + } => { + let theoretical_max = BlobTransactionBuilder::default() + .estimate_max_blob_size(provider) + .await?; + + (*percentage_of_teoretical_max * theoretical_max as f64) as usize + } + }; + Ok(size) + } +} + impl Contract { pub fn new(binary: Vec, salt: Salt, storage_slots: Vec) -> Self { let (contract_id, code_root, state_root) = @@ -48,26 +71,30 @@ impl Contract { } } - pub fn new_loader(blob_ids: &[[u8; 32]], salt: Salt, storage_slots: Vec) -> Self { - let code = Self::loader_contract(blob_ids); - Self::new(code, salt, storage_slots) + pub fn new_loader( + blob_ids: &[[u8; 32]], + salt: Salt, + storage_slots: Vec, + ) -> Result { + let code = Self::loader_contract(blob_ids)?; + Ok(Self::new(code, salt, storage_slots)) } pub async fn deploy_as_loader( self, account: &impl Account, tx_policies: TxPolicies, - max_blob_size: usize, + blob_size: BlobSize, ) -> Result { let provider = account.try_provider()?; - let blobs = self.generate_blobs(max_blob_size); + let blob_size = blob_size.max_size(provider).await?; + + let blobs = self.generate_blobs(blob_size); let blob_ids = blobs.iter().map(|blob| blob.id()).collect::>(); - for blob_id in &blob_ids { - eprintln!("blob_id: {}", hex::encode(blob_id)); - } for blob in blobs { + let blob_id = hex::encode(blob.id()); let mut tb = BlobTransactionBuilder::default() .with_blob(blob) .with_tx_policies(tx_policies) @@ -77,15 +104,14 @@ impl Contract { account.add_witnesses(&mut tb)?; let tx = tb.build(provider).await?; - eprintln!("sending blob tx"); provider .send_transaction_and_await_commit(tx) .await? .check(None)?; - eprintln!("blob tx succeeded"); + eprintln!("Uploaded blob: {}", blob_id); } - let contract = Self::new_loader(&blob_ids, self.salt, self.storage_slots); + let contract = Self::new_loader(&blob_ids, self.salt, self.storage_slots)?; contract._deploy(account, tx_policies).await } @@ -97,7 +123,7 @@ impl Contract { .collect() } - fn loader_contract(blob_ids: &[[u8; 32]]) -> Vec { + fn loader_contract(blob_ids: &[[u8; 32]]) -> Result> { const BLOB_ID_SIZE: u16 = 32; let get_instructions = |num_of_instructions, num_of_blobs| { [ @@ -155,16 +181,25 @@ impl Contract { ] }; - let real_num_of_instructions = get_instructions(0, blob_ids.len() as u16).len() as u16; + let num_of_instructions = u16::try_from(get_instructions(0, 0).len()) + .expect("to never have more than u16::MAX instructions"); + + let num_of_blobs = u16::try_from(blob_ids.len()).map_err(|_| { + error!( + Other, + "the number of blobs ({}) exceeds the maximum number of blobs supported: {}", + blob_ids.len(), + u16::MAX + ) + })?; - let instruction_bytes: Vec = - get_instructions(real_num_of_instructions, blob_ids.len() as u16) - .into_iter() - .collect(); + let instruction_bytes = get_instructions(num_of_instructions, num_of_blobs) + .into_iter() + .flat_map(|instruction| instruction.to_bytes()); - let blob_bytes: Vec = blob_ids.iter().flatten().copied().collect(); + let blob_bytes = blob_ids.iter().flatten().copied(); - [instruction_bytes, blob_bytes].concat() + Ok(instruction_bytes.chain(blob_bytes).collect()) } fn compute_contract_id_and_state_root( @@ -202,7 +237,14 @@ impl Contract { account: &impl Account, tx_policies: TxPolicies, ) -> Result { - self.deploy_as_loader(account, tx_policies, 10_000).await + self.deploy_as_loader( + account, + tx_policies, + BlobSize::Estimate { + percentage_of_teoretical_max: 0.95, + }, + ) + .await } /// Deploys a compiled contract to a running node diff --git a/packages/fuels/src/lib.rs b/packages/fuels/src/lib.rs index 270bdaae7c..9c9884c8d5 100644 --- a/packages/fuels/src/lib.rs +++ b/packages/fuels/src/lib.rs @@ -76,7 +76,7 @@ pub mod prelude { macros::setup_program_test, programs::{ calls::{CallHandler, CallParameters, ContractDependency, Execution}, - contract::{Contract, LoadConfiguration, StorageConfiguration}, + contract::{BlobSize, Contract, LoadConfiguration, StorageConfiguration}, }, test_helpers::*, types::transaction_builders::*, From 7a8c37756d11ce5f4e0a9e8ae91be35a0a41119c Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Wed, 24 Jul 2024 20:30:51 +0200 Subject: [PATCH 07/50] about to review --- e2e/tests/contracts.rs | 12 ++++-------- .../src/types/transaction_builders/blob.rs | 1 - packages/fuels-programs/src/lib.rs | 1 - 3 files changed, 4 insertions(+), 10 deletions(-) diff --git a/e2e/tests/contracts.rs b/e2e/tests/contracts.rs index 78c5bce1ab..0e6ff7f2cf 100644 --- a/e2e/tests/contracts.rs +++ b/e2e/tests/contracts.rs @@ -2119,9 +2119,10 @@ async fn blob_contract_deployment() -> Result<()> { let contract_size = std::fs::metadata(contract_binary) .expect("contract file not found") .len(); + assert!( contract_size > 150_000, - "the testnet size limit was around 100kB, we want a contract bigger than that" + "the testnet size limit was around 100kB, we want a contract bigger than that to reflect prod" ); let mut chain_config = ChainConfig::local_testnet(); @@ -2132,18 +2133,13 @@ async fn blob_contract_deployment() -> Result<()> { "this contract if included in one piece would make the tx too big" ); - let max_tx_gas = chain_config - .consensus_parameters - .tx_params() - .max_gas_per_tx(); - let contract_max_size = chain_config .consensus_parameters .contract_params() .contract_max_size(); assert!( - contract_max_size < contract_size, - "the node won't allow a contract of this size to be created" + contract_size > contract_max_size, + "this test should ideally be run with a contract bigger than the max contract size so that we know deployment couldn't have happened without blobs" ); { diff --git a/packages/fuels-core/src/types/transaction_builders/blob.rs b/packages/fuels-core/src/types/transaction_builders/blob.rs index e8b53f236f..63a34c7d1d 100644 --- a/packages/fuels-core/src/types/transaction_builders/blob.rs +++ b/packages/fuels-core/src/types/transaction_builders/blob.rs @@ -3,7 +3,6 @@ use std::{fmt::Debug, iter::repeat}; use async_trait::async_trait; use fuel_crypto::Signature; use fuel_tx::{ - consensus_parameters, field::{Policies as PoliciesField, Witnesses}, policies::{Policies, PolicyType}, BlobIdExt, Chargeable, Output, Transaction as FuelTransaction, UniqueIdentifier, Witness, diff --git a/packages/fuels-programs/src/lib.rs b/packages/fuels-programs/src/lib.rs index dcf85d155e..335ebfdfce 100644 --- a/packages/fuels-programs/src/lib.rs +++ b/packages/fuels-programs/src/lib.rs @@ -1,4 +1,3 @@ -use fuel_asm::{op, Instruction, RegId}; pub mod calls; pub mod contract; From e0aa28cde835bdecd5e588102c9a047f6ff69f20 Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Wed, 24 Jul 2024 21:01:48 +0200 Subject: [PATCH 08/50] remove unused deps --- e2e/Cargo.toml | 5 ----- e2e/tests/contracts.rs | 5 +---- packages/fuels-code-gen/Cargo.toml | 2 +- packages/fuels-programs/Cargo.toml | 4 ++-- 4 files changed, 4 insertions(+), 12 deletions(-) diff --git a/e2e/Cargo.toml b/e2e/Cargo.toml index 19b3b8d6e1..3ba0245722 100644 --- a/e2e/Cargo.toml +++ b/e2e/Cargo.toml @@ -23,11 +23,6 @@ fuels = { workspace = true } tai64 = { workspace = true } tempfile = { workspace = true } tokio = { workspace = true, features = ["test-util"] } -pretty_assertions = { workspace = true, features = ["std"] } -#TODO: segfault remove -serde_json = { workspace = true, default-features = true } -#TODO: segfault remove -hex = { workspace = true, default-features = true } [build-dependencies] anyhow = { workspace = true, features = ["std"] } diff --git a/e2e/tests/contracts.rs b/e2e/tests/contracts.rs index 0e6ff7f2cf..01bfdce7cc 100644 --- a/e2e/tests/contracts.rs +++ b/e2e/tests/contracts.rs @@ -5,7 +5,6 @@ use fuels::{ tx::ContractParameters, types::{errors::transaction::Reason, input::Input, Bits256, Identity}, }; -use pretty_assertions::assert_eq; use tokio::time::Instant; #[tokio::test] @@ -993,9 +992,7 @@ async fn test_contract_call_with_non_default_max_input() -> Result<()> { let provider = setup_test_provider(coins, vec![], None, Some(chain_config)).await?; wallet.set_provider(provider.clone()); - // let val = serde_json::to_string_pretty(&consensus_parameters).unwrap(); - // std::fs::write("/home/segfault_magnet/consensus.json", val).unwrap(); - pretty_assertions::assert_eq!(consensus_parameters, *provider.consensus_parameters()); + assert_eq!(consensus_parameters, *provider.consensus_parameters()); setup_program_test!( Abigen(Contract( diff --git a/packages/fuels-code-gen/Cargo.toml b/packages/fuels-code-gen/Cargo.toml index 8eab6bea4b..bb8eb4b940 100644 --- a/packages/fuels-code-gen/Cargo.toml +++ b/packages/fuels-code-gen/Cargo.toml @@ -20,7 +20,7 @@ serde_json = { workspace = true } syn = { workspace = true } [dev-dependencies] -pretty_assertions = "1.4.0" +pretty_assertions = { workspace = true, features = ["alloc"] } [package.metadata.cargo-machete] ignored = ["Inflector"] diff --git a/packages/fuels-programs/Cargo.toml b/packages/fuels-programs/Cargo.toml index f12f483fb9..bdae41ab8e 100644 --- a/packages/fuels-programs/Cargo.toml +++ b/packages/fuels-programs/Cargo.toml @@ -17,12 +17,12 @@ fuel-tx = { workspace = true } fuel-types = { workspace = true, features = ["default"] } fuels-accounts = { workspace = true } fuels-core = { workspace = true } +# TODO: segfault remove this +hex = { workspace = true, default-features = true } itertools = { workspace = true } rand = { workspace = true } serde_json = { workspace = true } tokio = { workspace = true } -# TODO: segfault remove this -hex = { workspace = true, default-features = true } [dev-dependencies] tempfile = "3.8.1" From 9669203107aebdb3eb74d03bc915f872a2c53fdd Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Wed, 24 Jul 2024 21:02:37 +0200 Subject: [PATCH 09/50] change authors --- e2e/sway/contracts/huge_contract/Forc.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/sway/contracts/huge_contract/Forc.toml b/e2e/sway/contracts/huge_contract/Forc.toml index 74764e3310..6f8833cf75 100644 --- a/e2e/sway/contracts/huge_contract/Forc.toml +++ b/e2e/sway/contracts/huge_contract/Forc.toml @@ -1,5 +1,5 @@ [project] -authors = ["Segfault Magnet"] +authors = ["Fuel Labs "] entry = "main.sw" license = "Apache-2.0" name = "huge_contract" From 26dea47b1194babf8a6ba1a8f78dd8d145ec3529 Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Wed, 24 Jul 2024 23:37:33 +0200 Subject: [PATCH 10/50] refactoring the test --- e2e/tests/contracts.rs | 156 ++++++++++++------ .../src/provider/retryable_client.rs | 3 - packages/fuels-programs/src/contract.rs | 36 ++-- 3 files changed, 118 insertions(+), 77 deletions(-) diff --git a/e2e/tests/contracts.rs b/e2e/tests/contracts.rs index 01bfdce7cc..f1dcaf6fca 100644 --- a/e2e/tests/contracts.rs +++ b/e2e/tests/contracts.rs @@ -1,9 +1,12 @@ +use std::collections::HashMap; + use fuel_tx::TxParameters; use fuels::{ + client::{PageDirection, PaginationRequest}, core::codec::{calldata, encode_fn_selector, DecoderConfig, EncoderConfig}, prelude::*, tx::ContractParameters, - types::{errors::transaction::Reason, input::Input, Bits256, Identity}, + types::{errors::transaction::Reason, input::Input, Bits256, DryRunner, Identity}, }; use tokio::time::Instant; @@ -2109,8 +2112,10 @@ async fn max_fee_estimation_respects_tolerance() -> Result<()> { #[tokio::test] async fn blob_contract_deployment() -> Result<()> { - let mut wallet = WalletUnlocked::new_random(None); - let coins = setup_single_asset_coins(wallet.address(), AssetId::BASE, 10, 1_000_000); + abigen!(Contract( + name = "MyContract", + abi = "e2e/sway/contracts/huge_contract/out/release/huge_contract-abi.json" + )); let contract_binary = "sway/contracts/huge_contract/out/release/huge_contract.bin"; let contract_size = std::fs::metadata(contract_binary) @@ -2122,70 +2127,121 @@ async fn blob_contract_deployment() -> Result<()> { "the testnet size limit was around 100kB, we want a contract bigger than that to reflect prod" ); - let mut chain_config = ChainConfig::local_testnet(); + let wallets = + launch_custom_provider_and_get_wallets(WalletsConfig::new(Some(2), None, None), None, None) + .await?; + + let provider = wallets[0].provider().unwrap().clone(); - let max_tx_size = chain_config.consensus_parameters.tx_params().max_size(); - assert!( - max_tx_size < contract_size, - "this contract if included in one piece would make the tx too big" - ); + let consensus_parameters = provider.consensus_parameters(); - let contract_max_size = chain_config - .consensus_parameters - .contract_params() - .contract_max_size(); + let contract_max_size = consensus_parameters.contract_params().contract_max_size(); assert!( contract_size > contract_max_size, "this test should ideally be run with a contract bigger than the max contract size so that we know deployment couldn't have happened without blobs" ); - { - // TODO: segfault imported from fuel_tx - let mut tx_params = *chain_config.consensus_parameters.tx_params(); - let TxParameters::V1(params) = &mut tx_params; - params.max_size = 10_000; - chain_config.consensus_parameters.set_tx_params(tx_params); - - // let mut contract_params = *chain_config.consensus_parameters.contract_params(); - // // TODO: segfault imported from fuel_tx - // let ContractParameters::V1(params) = &mut contract_params; - // params.contract_max_size = contract_size; - // chain_config - // .consensus_parameters - // .set_contract_params(contract_params); + let contract = Contract::load_from(contract_binary, LoadConfiguration::default())?; + + let deployment_result = contract + .clone() + .deploy(&wallets[0], TxPolicies::default()) + .await; + + if let Err(Error::Transaction(Reason::Validation(msg))) = deployment_result { + assert_eq!(msg, "TransactionCreateBytecodeLen"); + } else { + panic!("Expected contract deployment to fail due to the contract being too big"); } - let provider = setup_test_provider(coins, vec![], None, Some(chain_config)).await?; - wallet.set_provider(provider.clone()); + let deploy_and_test = |wallet: WalletUnlocked, blob_size: BlobSize| { + let contract = &contract; + async move { + let contract_id = contract + .clone() + .deploy_as_loader(&wallet, TxPolicies::default(), blob_size) + .await?; - let contract_id = Contract::load_from(contract_binary, LoadConfiguration::default())? - .deploy_as_loader( - &wallet, - TxPolicies::default(), + let contract_instance = MyContract::new(contract_id, wallet.clone()); + + let response = contract_instance.methods().something().call().await?.value; + + assert_eq!(response, 1001); + Result::Ok(()) + } + }; + + { + assert_wallet_made_no_trancsactions(&wallets[0]).await; + let percentage_of_teoretical_max = 0.95; + let max_blob_size = BlobTransactionBuilder::default() + .estimate_max_blob_size(&provider) + .await?; + + let expected_blobs = (contract_size as f64 + / (max_blob_size as f64 * percentage_of_teoretical_max)) + .ceil() as usize; + deploy_and_test( + wallets[0].clone(), BlobSize::Estimate { - percentage_of_teoretical_max: 0.95, + percentage_of_teoretical_max, }, ) .await?; + assert_eq!( + txs_made_by(&wallets[0]).await, + [vec!["blob"; expected_blobs], vec!["create", "script"]].concat() + ); + } - eprintln!("The contract id is {contract_id}"); - - abigen!(Contract( - name = "MyContract", - abi = "e2e/sway/contracts/huge_contract/out/release/huge_contract-abi.json" - )); + { + let expected_blobs = 10; + assert_wallet_made_no_trancsactions(&wallets[1]).await; + deploy_and_test( + wallets[1].clone(), + BlobSize::AtMost { + bytes: (contract_size as usize).div_ceil(expected_blobs), + }, + ) + .await?; + assert_eq!( + txs_made_by(&wallets[1]).await, + [ + vec!["blob".to_string(); expected_blobs], + vec!["create".to_string(), "script".to_string()] + ] + .concat() + ); + } - let contract_instance = MyContract::new(contract_id, wallet.clone()); + Ok(()) +} - let response = contract_instance - .methods() - .something() - .call() +async fn txs_made_by(wallet: &WalletUnlocked) -> Vec<&'static str> { + wallet + .provider() + .unwrap() + .get_transactions_by_owner( + wallet.address(), + PaginationRequest { + cursor: None, + results: 100, + direction: PageDirection::Forward, + }, + ) .await - .expect("call failed") - .value; - - assert_eq!(response, 1001); + .unwrap() + .results + .into_iter() + .map(|tx| match tx.transaction { + TransactionType::Blob(_) => "blob", + TransactionType::Create(_) => "create", + TransactionType::Script(_) => "script", + _ => "other", + }) + .collect() +} - Ok(()) +async fn assert_wallet_made_no_trancsactions(wallet: &WalletUnlocked) { + assert!(txs_made_by(wallet).await.is_empty()); } diff --git a/packages/fuels-accounts/src/provider/retryable_client.rs b/packages/fuels-accounts/src/provider/retryable_client.rs index e0a30d67dc..7c65acd0a8 100644 --- a/packages/fuels-accounts/src/provider/retryable_client.rs +++ b/packages/fuels-accounts/src/provider/retryable_client.rs @@ -125,9 +125,6 @@ impl RetryableClient { &self, tx: &Transaction, ) -> RequestResult { - use fuel_types::canonical::Serialize; - eprintln!("submit_and_await_commit: {}", tx.size()); - self.wrap(|| self.client.submit_and_await_commit(tx)).await } diff --git a/packages/fuels-programs/src/contract.rs b/packages/fuels-programs/src/contract.rs index 78709cafbe..e541216294 100644 --- a/packages/fuels-programs/src/contract.rs +++ b/packages/fuels-programs/src/contract.rs @@ -39,7 +39,7 @@ pub enum BlobSize { } impl BlobSize { - async fn max_size(&self, provider: &Provider) -> Result { + async fn resolve_size(&self, provider: &Provider) -> Result { let size = match self { BlobSize::AtMost { bytes } => *bytes, BlobSize::Estimate { @@ -52,7 +52,12 @@ impl BlobSize { (*percentage_of_teoretical_max * theoretical_max as f64) as usize } }; - Ok(size) + + if size == 0 { + Err(error!(Other, "blob size must be greater than 0")) + } else { + Ok(size) + } } } @@ -88,13 +93,12 @@ impl Contract { ) -> Result { let provider = account.try_provider()?; - let blob_size = blob_size.max_size(provider).await?; + let blob_size = blob_size.resolve_size(provider).await?; let blobs = self.generate_blobs(blob_size); let blob_ids = blobs.iter().map(|blob| blob.id()).collect::>(); for blob in blobs { - let blob_id = hex::encode(blob.id()); let mut tb = BlobTransactionBuilder::default() .with_blob(blob) .with_tx_policies(tx_policies) @@ -108,12 +112,11 @@ impl Contract { .send_transaction_and_await_commit(tx) .await? .check(None)?; - eprintln!("Uploaded blob: {}", blob_id); } - let contract = Self::new_loader(&blob_ids, self.salt, self.storage_slots)?; - - contract._deploy(account, tx_policies).await + Self::new_loader(&blob_ids, self.salt, self.storage_slots)? + .deploy(account, tx_policies) + .await } pub fn generate_blobs(&self, max_size: usize) -> Vec { @@ -232,25 +235,10 @@ impl Contract { self.code_root } - pub async fn deploy( - self, - account: &impl Account, - tx_policies: TxPolicies, - ) -> Result { - self.deploy_as_loader( - account, - tx_policies, - BlobSize::Estimate { - percentage_of_teoretical_max: 0.95, - }, - ) - .await - } - /// Deploys a compiled contract to a running node /// To deploy a contract, you need an account with enough assets to pay for deployment. /// This account will also receive the change. - pub async fn _deploy( + pub async fn deploy( self, account: &impl Account, tx_policies: TxPolicies, From 50e1467c7bec5bf7c77178779c5c745ed937ee12 Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Wed, 24 Jul 2024 23:57:18 +0200 Subject: [PATCH 11/50] nits --- .../src/types/transaction_builders/blob.rs | 21 ++++++++++--------- packages/fuels-programs/Cargo.toml | 2 -- packages/fuels-programs/src/lib.rs | 1 - 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/packages/fuels-core/src/types/transaction_builders/blob.rs b/packages/fuels-core/src/types/transaction_builders/blob.rs index 63a34c7d1d..fa518164fc 100644 --- a/packages/fuels-core/src/types/transaction_builders/blob.rs +++ b/packages/fuels-core/src/types/transaction_builders/blob.rs @@ -24,7 +24,7 @@ use crate::{ use super::{ generate_missing_witnesses, impl_tx_builder_trait, resolve_fuel_inputs, BuildableTransaction, - Strategy, UnresolvedWitnessIndexes, + Strategy, TransactionBuilder, UnresolvedWitnessIndexes, }; #[derive(Default, Clone, Debug, PartialEq)] @@ -85,9 +85,9 @@ pub struct BlobTransactionBuilder { impl_tx_builder_trait!(BlobTransactionBuilder, BlobTransaction); impl BlobTransactionBuilder { - /// TODO: segfault add note about how fee is not taken into account and any later changes to - /// the tx - pub async fn estimate_max_blob_size(&self, provider: &impl DryRunner) -> Result { + /// Calculates the maximum possible blob size by determining the remaining space available in the current transaction before it reaches the maximum allowed size. + /// Note: This calculation only considers the transaction size limit and does not account for the maximum gas per transaction. + pub async fn estimate_max_blob_size(&self, provider: &impl DryRunner) -> Result { let mut tb = self.clone_without_signers(); tb.blob = Blob::new(vec![]); @@ -96,8 +96,9 @@ impl BlobTransactionBuilder { .build(provider) .await?; - let current_tx_size = u64::try_from(tx.size()).unwrap_or(u64::MAX); - let max_tx_size = provider.consensus_parameters().tx_params().max_size(); + let current_tx_size = tx.size(); + let max_tx_size = usize::try_from(provider.consensus_parameters().tx_params().max_size()) + .unwrap_or(usize::MAX); Ok(max_tx_size.saturating_sub(current_tx_size)) } @@ -138,11 +139,11 @@ impl BlobTransactionBuilder { async fn resolve_fuel_tx(mut self, provider: &impl DryRunner) -> Result { let chain_id = provider.consensus_parameters().chain_id(); - // TODO: segfault - let blob_witness_index = self.witnesses.len() as u16; - let body = self.blob.as_blob_body(blob_witness_index); + let free_witness_index = self.num_witnesses()?; + let body = self.blob.as_blob_body(free_witness_index); + let blob_witness = std::mem::take(&mut self.blob).into(); - self.witnesses.push(blob_witness); + self.witnesses_mut().push(blob_witness); let num_witnesses = self.num_witnesses()?; let policies = self.generate_fuel_policies()?; diff --git a/packages/fuels-programs/Cargo.toml b/packages/fuels-programs/Cargo.toml index bdae41ab8e..3799f8b085 100644 --- a/packages/fuels-programs/Cargo.toml +++ b/packages/fuels-programs/Cargo.toml @@ -17,8 +17,6 @@ fuel-tx = { workspace = true } fuel-types = { workspace = true, features = ["default"] } fuels-accounts = { workspace = true } fuels-core = { workspace = true } -# TODO: segfault remove this -hex = { workspace = true, default-features = true } itertools = { workspace = true } rand = { workspace = true } serde_json = { workspace = true } diff --git a/packages/fuels-programs/src/lib.rs b/packages/fuels-programs/src/lib.rs index 335ebfdfce..e60b12412f 100644 --- a/packages/fuels-programs/src/lib.rs +++ b/packages/fuels-programs/src/lib.rs @@ -1,4 +1,3 @@ - pub mod calls; pub mod contract; pub mod responses; From b6f6dce0782ecb38781178d88667f8c527012d0e Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Thu, 25 Jul 2024 00:16:28 +0200 Subject: [PATCH 12/50] nits --- e2e/tests/contracts.rs | 6 +-- packages/fuels-programs/src/contract.rs | 50 ++++++++++++++++++------- packages/fuels/src/lib.rs | 2 +- 3 files changed, 40 insertions(+), 18 deletions(-) diff --git a/e2e/tests/contracts.rs b/e2e/tests/contracts.rs index f1dcaf6fca..5361f39525 100644 --- a/e2e/tests/contracts.rs +++ b/e2e/tests/contracts.rs @@ -2154,7 +2154,7 @@ async fn blob_contract_deployment() -> Result<()> { panic!("Expected contract deployment to fail due to the contract being too big"); } - let deploy_and_test = |wallet: WalletUnlocked, blob_size: BlobSize| { + let deploy_and_test = |wallet: WalletUnlocked, blob_size: BlobSizePolicy| { let contract = &contract; async move { let contract_id = contract @@ -2183,7 +2183,7 @@ async fn blob_contract_deployment() -> Result<()> { .ceil() as usize; deploy_and_test( wallets[0].clone(), - BlobSize::Estimate { + BlobSizePolicy::Estimate { percentage_of_teoretical_max, }, ) @@ -2199,7 +2199,7 @@ async fn blob_contract_deployment() -> Result<()> { assert_wallet_made_no_trancsactions(&wallets[1]).await; deploy_and_test( wallets[1].clone(), - BlobSize::AtMost { + BlobSizePolicy::AtMost { bytes: (contract_size as usize).div_ceil(expected_blobs), }, ) diff --git a/packages/fuels-programs/src/contract.rs b/packages/fuels-programs/src/contract.rs index e541216294..4bfa7eec02 100644 --- a/packages/fuels-programs/src/contract.rs +++ b/packages/fuels-programs/src/contract.rs @@ -15,7 +15,7 @@ use fuels_core::types::{ errors::{error, Result}, transaction::TxPolicies, transaction_builders::{ - Blob, BlobTransactionBuilder, CreateTransactionBuilder, TransactionBuilder, + Blob, BlobId, BlobTransactionBuilder, CreateTransactionBuilder, TransactionBuilder, }, }; pub use load::*; @@ -33,16 +33,24 @@ pub struct Contract { state_root: Bytes32, } -pub enum BlobSize { +/// Used to control how the contract is going to get split up into blob tx. +pub enum BlobSizePolicy { + /// Contract chunks can be at most `bytes` bytes. AtMost { bytes: usize }, + /// Note: Use a value less than 1.0 (100%): + /// The theoretical maximum is calculated based on the number of bytes that can fit in a blob transaction + /// without exceeding the maximum allowed transaction size. This calculation does not account for additional + /// limiting factors such as: + /// * the possibility of the transaction exceeding the maximum gas limit + /// * the size impact of any inputs/witnesses added to the transaction to cover its fee Estimate { percentage_of_teoretical_max: f64 }, } -impl BlobSize { +impl BlobSizePolicy { async fn resolve_size(&self, provider: &Provider) -> Result { let size = match self { - BlobSize::AtMost { bytes } => *bytes, - BlobSize::Estimate { + BlobSizePolicy::AtMost { bytes } => *bytes, + BlobSizePolicy::Estimate { percentage_of_teoretical_max, } => { let theoretical_max = BlobTransactionBuilder::default() @@ -76,8 +84,10 @@ impl Contract { } } + /// The contract code has been uploaded in blobs with [`BlobId`]s specified in `blob_ids`. This will create a loader + /// contract that, when deployed and executed, will load all the specified blobs into memory and delegate the call to the code contained in the blobs. pub fn new_loader( - blob_ids: &[[u8; 32]], + blob_ids: &[BlobId], salt: Salt, storage_slots: Vec, ) -> Result { @@ -85,17 +95,18 @@ impl Contract { Ok(Self::new(code, salt, storage_slots)) } + /// Splits the contract into blobs, submits them, and awaits confirmation. Then, it deploys a loader contract. + /// This loader contract will load the blobs into memory and delegate the call to the code contained within the blobs. + /// This method is useful for deploying large contracts. pub async fn deploy_as_loader( self, account: &impl Account, tx_policies: TxPolicies, - blob_size: BlobSize, + blob_size_policy: BlobSizePolicy, ) -> Result { let provider = account.try_provider()?; - let blob_size = blob_size.resolve_size(provider).await?; - - let blobs = self.generate_blobs(blob_size); + let blobs = self.generate_blobs(provider, blob_size_policy).await?; let blob_ids = blobs.iter().map(|blob| blob.id()).collect::>(); for blob in blobs { @@ -119,11 +130,22 @@ impl Contract { .await } - pub fn generate_blobs(&self, max_size: usize) -> Vec { - self.binary - .chunks(max_size) + /// Splits the contract binary into blobs based on the size specified by `blob_size_policy`. + /// This is useful if you prefer to manually deploy the blobs. Once uploaded, you can use [`Contract::new_loader`] to create a loader contract. + pub async fn generate_blobs( + &self, + provider: &Provider, + policy: BlobSizePolicy, + ) -> Result> { + let blob_size = policy.resolve_size(provider).await?; + + let blobs = self + .binary + .chunks(blob_size) .map(|chunk| Blob::new(chunk.to_vec())) - .collect() + .collect(); + + Ok(blobs) } fn loader_contract(blob_ids: &[[u8; 32]]) -> Result> { diff --git a/packages/fuels/src/lib.rs b/packages/fuels/src/lib.rs index 9c9884c8d5..f70fa1856e 100644 --- a/packages/fuels/src/lib.rs +++ b/packages/fuels/src/lib.rs @@ -76,7 +76,7 @@ pub mod prelude { macros::setup_program_test, programs::{ calls::{CallHandler, CallParameters, ContractDependency, Execution}, - contract::{BlobSize, Contract, LoadConfiguration, StorageConfiguration}, + contract::{BlobSizePolicy, Contract, LoadConfiguration, StorageConfiguration}, }, test_helpers::*, types::transaction_builders::*, From 90f3896e68dbe5f97766c932a592f24dbe52ce50 Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Thu, 25 Jul 2024 00:22:25 +0200 Subject: [PATCH 13/50] comments --- packages/fuels-programs/src/contract.rs | 13 ++++- packages/fuels-programs/src/lib.rs | 65 ------------------------- 2 files changed, 12 insertions(+), 66 deletions(-) diff --git a/packages/fuels-programs/src/contract.rs b/packages/fuels-programs/src/contract.rs index 4bfa7eec02..2fb370e8c8 100644 --- a/packages/fuels-programs/src/contract.rs +++ b/packages/fuels-programs/src/contract.rs @@ -148,9 +148,16 @@ impl Contract { Ok(blobs) } + // This function creates a contract that loads the specified blobs into memory and delegates the call to the code contained in the blobs. fn loader_contract(blob_ids: &[[u8; 32]]) -> Result> { const BLOB_ID_SIZE: u16 = 32; let get_instructions = |num_of_instructions, num_of_blobs| { + // There are main 3 steps: + // 1. Calculate the total size of the contract + // 2. Allocate and load the contract into memory + // 3. Jump into the memory where the contract is loaded + // After that the execution continues normally with the loaded contract reading our + // prepared fn selector and jumps to the selected contract method. [ // 0x12 is going to hold the total size of the contract op::move_(0x12, RegId::ZERO), @@ -171,7 +178,7 @@ impl Contract { op::subi(0x13, 0x13, 1), // Jump backwards 3 instructions if the counter has not reached 0 op::jneb(0x13, RegId::ZERO, RegId::ZERO, 3), - // move the stack pointer by the contract size since we need to write the contract on the stack + // move the stack pointer by the contract size since we need to write the contract on the stack since only that memory can be executed op::cfe(0x12), // find the start of the hardcoded blob ids, which are located after the code ends op::move_(0x10, RegId::IS), @@ -199,9 +206,13 @@ impl Contract { // Jump backwards 6 instructions if the counter has not reached 0 op::jneb(0x13, RegId::ZERO, RegId::ZERO, 6), // what follows is called _jmp_mem by the sway compiler + // move to the start of the stack (also the start of the contract we loaded) op::move_(0x16, RegId::SSP), + // subtract the address contained in IS because jmp will add it back op::sub(0x16, 0x16, RegId::IS), + // jmp will multiply by 4 so we need to divide to cancel that out op::divi(0x16, 0x16, 4), + // jump to the start of the contract we loaded op::jmp(0x16), ] }; diff --git a/packages/fuels-programs/src/lib.rs b/packages/fuels-programs/src/lib.rs index e60b12412f..755e14c274 100644 --- a/packages/fuels-programs/src/lib.rs +++ b/packages/fuels-programs/src/lib.rs @@ -1,68 +1,3 @@ pub mod calls; pub mod contract; pub mod responses; - -// This is the contract from the tooling team -// configurable { -// TARGET_1: ContractId = ContractId::from(0x729ec21b3966e9105699aa6f10c07bec8af0b72c6fadd099961d8cfbea34e45f), -// TARGET_2: ContractId = ContractId::from(0x91fce82e763bbb94c788510a9249cb501460a53c9fe27a68365cee70b5bd6de2), -// TARGET_3: ContractId = ContractId::from(0x5c655e1c02612ea7743b857816226faee077bb357dc6966a234f1db5fca3c33f), -// TARGET_4: ContractId = ContractId::from(0x2b0a8a8fde26d345c5ec441fec7ab62fa080b0e1a0a7bf2817f0a6dcef827eda), -// } -// -// abi RunExternalTest { -// fn test_function() -> bool; -// } -// -// impl RunExternalTest for Contract { -// fn test_function() -> bool { -// run_external4(TARGET_1, TARGET_2, TARGET_3, TARGET_4) -// } -// } -// -// fn run_external4(load_target1: ContractId, load_target2: ContractId, load_target3: ContractId, load_target4: ContractId) -> ! { -// asm( -// load_target1: load_target1, -// load_target2: load_target2, -// load_target3: load_target3, -// load_target4: load_target4, -// load_target2_heap, -// load_target3_heap, -// load_target4_heap, -// heap_alloc_size, -// length1, -// length2, -// length3, -// length4, -// ssp_saved, -// cur_stack_size, -// ) { -// csiz length1 load_target1; -// csiz length2 load_target2; -// csiz length3 load_target3; -// csiz length4 load_target4; -// addi heap_alloc_size zero i32; -// aloc heap_alloc_size; -// mcp hp load_target2 heap_alloc_size; -// move load_target2_heap hp; -// addi heap_alloc_size zero i32; -// aloc heap_alloc_size; -// mcp hp load_target3 heap_alloc_size; -// move load_target3_heap hp; -// addi heap_alloc_size zero i32; -// aloc heap_alloc_size; -// mcp hp load_target4 heap_alloc_size; -// move load_target4_heap hp; -// move ssp_saved ssp; -// sub cur_stack_size sp ssp; -// cfs cur_stack_size; -// ldc load_target1 zero length1; -// ldc load_target2_heap zero length2; -// ldc load_target3_heap zero length3; -// ldc load_target4_heap zero length4; -// addi heap_alloc_size zero i64; -// aloc heap_alloc_size; -// sw hp ssp_saved i0; -// } -// __jmp_mem() -// } From 96a9a384286f8018cd4bfea8bc710bc1ab06a34a Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Thu, 25 Jul 2024 00:27:19 +0200 Subject: [PATCH 14/50] use git revisions --- Cargo.toml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 4272f40066..0206fc50d8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -109,13 +109,13 @@ fuels-test-helpers = { version = "0.65.1", path = "./packages/fuels-test-helpers versions-replacer = { version = "0.65.1", path = "./scripts/versions-replacer", default-features = false } [patch.crates-io] -fuel-core = { default-features = false, path = "/home/segfault_magnet/fuel/fuel-core/crates/fuel-core" } -fuel-core-chain-config = { default-features = false, path = "/home/segfault_magnet/fuel/fuel-core/crates/chain-config" } -fuel-core-client = { default-features = false, path = "/home/segfault_magnet/fuel/fuel-core/crates/client" } -fuel-core-poa = { default-features = false, path = "/home/segfault_magnet/fuel/fuel-core/crates/services/consensus_module/poa" } -fuel-core-services = { default-features = false, path = "/home/segfault_magnet/fuel/fuel-core/crates/services" } -fuel-core-types = { default-features = false, path = "/home/segfault_magnet/fuel/fuel-core/crates/types" } -fuel-vm = { path = "/home/segfault_magnet/fuel/fuel-vm/fuel-vm" } -fuel-types = { path = "/home/segfault_magnet/fuel/fuel-vm/fuel-types" } -fuel-tx = { path = "/home/segfault_magnet/fuel/fuel-vm/fuel-tx" } -fuel-asm = { path = "/home/segfault_magnet/fuel/fuel-vm/fuel-asm" } +fuel-asm = { git = "https://github.com/FuelLabs/fuel-vm", branch = "dento/blob-tx", package = "fuel-asm" } +fuel-core = { git = "https://github.com/FuelLabs/fuel-core", branch = "dento/blob-tx", package = "fuel-core" } +fuel-core-chain-config = { git = "https://github.com/FuelLabs/fuel-core", branch = "dento/blob-tx", package = "fuel-core-chain-config" } +fuel-core-client = { git = "https://github.com/FuelLabs/fuel-core", branch = "dento/blob-tx", package = "fuel-core-client" } +fuel-core-poa = { git = "https://github.com/FuelLabs/fuel-core", branch = "dento/blob-tx", package = "fuel-core-poa" } +fuel-core-services = { git = "https://github.com/FuelLabs/fuel-core", branch = "dento/blob-tx", package = "fuel-core-services" } +fuel-core-types = { git = "https://github.com/FuelLabs/fuel-core", branch = "dento/blob-tx", package = "fuel-core-types" } +fuel-tx = { git = "https://github.com/FuelLabs/fuel-vm", branch = "dento/blob-tx", package = "fuel-tx" } +fuel-types = { git = "https://github.com/FuelLabs/fuel-vm", branch = "dento/blob-tx", package = "fuel-types" } +fuel-vm = { git = "https://github.com/FuelLabs/fuel-vm", branch = "dento/blob-tx", package = "fuel-vm" } From ef9b095ac1bb5d5db3bb06a6a17cd43865359a3d Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Thu, 25 Jul 2024 00:28:30 +0200 Subject: [PATCH 15/50] clippy --- e2e/tests/contracts.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/e2e/tests/contracts.rs b/e2e/tests/contracts.rs index 5361f39525..87055f973e 100644 --- a/e2e/tests/contracts.rs +++ b/e2e/tests/contracts.rs @@ -1,12 +1,9 @@ -use std::collections::HashMap; - -use fuel_tx::TxParameters; use fuels::{ client::{PageDirection, PaginationRequest}, core::codec::{calldata, encode_fn_selector, DecoderConfig, EncoderConfig}, prelude::*, tx::ContractParameters, - types::{errors::transaction::Reason, input::Input, Bits256, DryRunner, Identity}, + types::{errors::transaction::Reason, input::Input, Bits256, Identity}, }; use tokio::time::Instant; From d0b9692e316e83a41ffc7489534b03940c8fdb0d Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Thu, 25 Jul 2024 01:07:28 +0200 Subject: [PATCH 16/50] typo --- e2e/tests/contracts.rs | 6 +++--- packages/fuels-programs/src/contract.rs | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/e2e/tests/contracts.rs b/e2e/tests/contracts.rs index 87055f973e..1780cf2c66 100644 --- a/e2e/tests/contracts.rs +++ b/e2e/tests/contracts.rs @@ -2170,18 +2170,18 @@ async fn blob_contract_deployment() -> Result<()> { { assert_wallet_made_no_trancsactions(&wallets[0]).await; - let percentage_of_teoretical_max = 0.95; + let percentage_of_theoretical_max = 0.95; let max_blob_size = BlobTransactionBuilder::default() .estimate_max_blob_size(&provider) .await?; let expected_blobs = (contract_size as f64 - / (max_blob_size as f64 * percentage_of_teoretical_max)) + / (max_blob_size as f64 * percentage_of_theoretical_max)) .ceil() as usize; deploy_and_test( wallets[0].clone(), BlobSizePolicy::Estimate { - percentage_of_teoretical_max, + percentage_of_theoretical_max, }, ) .await?; diff --git a/packages/fuels-programs/src/contract.rs b/packages/fuels-programs/src/contract.rs index 2fb370e8c8..4db5f4e338 100644 --- a/packages/fuels-programs/src/contract.rs +++ b/packages/fuels-programs/src/contract.rs @@ -43,7 +43,7 @@ pub enum BlobSizePolicy { /// limiting factors such as: /// * the possibility of the transaction exceeding the maximum gas limit /// * the size impact of any inputs/witnesses added to the transaction to cover its fee - Estimate { percentage_of_teoretical_max: f64 }, + Estimate { percentage_of_theoretical_max: f64 }, } impl BlobSizePolicy { @@ -51,13 +51,13 @@ impl BlobSizePolicy { let size = match self { BlobSizePolicy::AtMost { bytes } => *bytes, BlobSizePolicy::Estimate { - percentage_of_teoretical_max, + percentage_of_theoretical_max, } => { let theoretical_max = BlobTransactionBuilder::default() .estimate_max_blob_size(provider) .await?; - (*percentage_of_teoretical_max * theoretical_max as f64) as usize + (*percentage_of_theoretical_max * theoretical_max as f64) as usize } }; From a576efa86498fd012a3533a810a0e36dc16b076f Mon Sep 17 00:00:00 2001 From: Ahmed Sagdati <37515857+segfault-magnet@users.noreply.github.com> Date: Thu, 25 Jul 2024 18:51:00 +0200 Subject: [PATCH 17/50] Apply suggestions from code review Co-authored-by: Oleksii Filonenko <12615679+Br1ght0ne@users.noreply.github.com> --- packages/fuels-programs/src/contract.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/fuels-programs/src/contract.rs b/packages/fuels-programs/src/contract.rs index 4db5f4e338..8241e9448e 100644 --- a/packages/fuels-programs/src/contract.rs +++ b/packages/fuels-programs/src/contract.rs @@ -166,7 +166,7 @@ impl Contract { // 0x10 to hold the address of the current blob id op::addi(0x10, 0x10, num_of_instructions * Instruction::SIZE as u16), // loop counter - op::addi(0x13, RegId::ZERO, num_of_blobs), + op::movi(0x13, num_of_blobs), // LOOP starts here // 0x11 to hold the size of the current blob op::bsiz(0x11, 0x10), @@ -177,7 +177,7 @@ impl Contract { // decrement the loop counter op::subi(0x13, 0x13, 1), // Jump backwards 3 instructions if the counter has not reached 0 - op::jneb(0x13, RegId::ZERO, RegId::ZERO, 3), + op::jnzb(0x13, RegId::ZERO, 3), // move the stack pointer by the contract size since we need to write the contract on the stack since only that memory can be executed op::cfe(0x12), // find the start of the hardcoded blob ids, which are located after the code ends @@ -187,7 +187,7 @@ impl Contract { // 0x12 is going to hold the total bytes loaded of the contract op::move_(0x12, RegId::ZERO), // loop counter - op::addi(0x13, RegId::ZERO, num_of_blobs), + op::movi(0x13, num_of_blobs), // LOOP starts here // 0x11 to hold the size of the current blob op::bsiz(0x11, 0x10), @@ -204,7 +204,7 @@ impl Contract { // decrement the loop counter op::subi(0x13, 0x13, 1), // Jump backwards 6 instructions if the counter has not reached 0 - op::jneb(0x13, RegId::ZERO, RegId::ZERO, 6), + op::jnzb(0x13, RegId::ZERO, 6), // what follows is called _jmp_mem by the sway compiler // move to the start of the stack (also the start of the contract we loaded) op::move_(0x16, RegId::SSP), From 3680315ecc947e3ee7bf985dc6d8e05d43dc09a4 Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Thu, 25 Jul 2024 18:52:24 +0200 Subject: [PATCH 18/50] pr suggestions --- Cargo.toml | 2 +- packages/fuels-programs/src/contract.rs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 0206fc50d8..ab46d77f4b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -55,6 +55,7 @@ futures = "0.3.29" hex = { version = "0.4.3", default-features = false } itertools = "0.12.0" portpicker = "0.1.1" +pretty_assertions = { version = "1.4", default-features = false } proc-macro2 = "1.0.70" quote = "1.0.33" rand = { version = "0.8.5", default-features = false, features = [ @@ -79,7 +80,6 @@ trybuild = "1.0.85" uint = { version = "0.9.5", default-features = false } which = { version = "6.0.0", default-features = false } zeroize = "1.7.0" -pretty_assertions = { version = "1.4", default-features = false } # Dependencies from the `fuel-core` repository: fuel-core = { version = "0.31.0", default-features = false } diff --git a/packages/fuels-programs/src/contract.rs b/packages/fuels-programs/src/contract.rs index 8241e9448e..59ff1e921d 100644 --- a/packages/fuels-programs/src/contract.rs +++ b/packages/fuels-programs/src/contract.rs @@ -220,12 +220,12 @@ impl Contract { let num_of_instructions = u16::try_from(get_instructions(0, 0).len()) .expect("to never have more than u16::MAX instructions"); - let num_of_blobs = u16::try_from(blob_ids.len()).map_err(|_| { + let num_of_blobs = u32::try_from(blob_ids.len()).map_err(|_| { error!( Other, "the number of blobs ({}) exceeds the maximum number of blobs supported: {}", blob_ids.len(), - u16::MAX + u32::MAX ) })?; From 5b83cfe69b5b0a121b53cd8389ca8c9e03913d92 Mon Sep 17 00:00:00 2001 From: Ahmed Sagdati <37515857+segfault-magnet@users.noreply.github.com> Date: Thu, 25 Jul 2024 18:52:47 +0200 Subject: [PATCH 19/50] Update e2e/tests/contracts.rs Co-authored-by: Oleksii Filonenko <12615679+Br1ght0ne@users.noreply.github.com> --- e2e/tests/contracts.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/tests/contracts.rs b/e2e/tests/contracts.rs index 1780cf2c66..1bf1118139 100644 --- a/e2e/tests/contracts.rs +++ b/e2e/tests/contracts.rs @@ -2239,6 +2239,6 @@ async fn txs_made_by(wallet: &WalletUnlocked) -> Vec<&'static str> { .collect() } -async fn assert_wallet_made_no_trancsactions(wallet: &WalletUnlocked) { +async fn assert_wallet_made_no_transactions(wallet: &WalletUnlocked) { assert!(txs_made_by(wallet).await.is_empty()); } From b8aeb90ab8aff82ee15b1dd8e6464ce172cfffb4 Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Thu, 25 Jul 2024 18:53:23 +0200 Subject: [PATCH 20/50] pr comment --- e2e/tests/contracts.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/e2e/tests/contracts.rs b/e2e/tests/contracts.rs index 1bf1118139..be955beb2b 100644 --- a/e2e/tests/contracts.rs +++ b/e2e/tests/contracts.rs @@ -2169,7 +2169,7 @@ async fn blob_contract_deployment() -> Result<()> { }; { - assert_wallet_made_no_trancsactions(&wallets[0]).await; + assert_wallet_made_no_transactions(&wallets[0]).await; let percentage_of_theoretical_max = 0.95; let max_blob_size = BlobTransactionBuilder::default() .estimate_max_blob_size(&provider) @@ -2193,7 +2193,7 @@ async fn blob_contract_deployment() -> Result<()> { { let expected_blobs = 10; - assert_wallet_made_no_trancsactions(&wallets[1]).await; + assert_wallet_made_no_transactions(&wallets[1]).await; deploy_and_test( wallets[1].clone(), BlobSizePolicy::AtMost { From d7d2d5a1e1adcd9b95731f93937ff5baa1d6c1a9 Mon Sep 17 00:00:00 2001 From: Ahmed Sagdati <37515857+segfault-magnet@users.noreply.github.com> Date: Sat, 27 Jul 2024 08:46:14 +0200 Subject: [PATCH 21/50] Apply suggestions from code review Co-authored-by: hal3e --- packages/fuels-programs/src/contract.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/fuels-programs/src/contract.rs b/packages/fuels-programs/src/contract.rs index 59ff1e921d..fe31e6c67d 100644 --- a/packages/fuels-programs/src/contract.rs +++ b/packages/fuels-programs/src/contract.rs @@ -152,13 +152,14 @@ impl Contract { fn loader_contract(blob_ids: &[[u8; 32]]) -> Result> { const BLOB_ID_SIZE: u16 = 32; let get_instructions = |num_of_instructions, num_of_blobs| { - // There are main 3 steps: + // There are 3 main steps: // 1. Calculate the total size of the contract // 2. Allocate and load the contract into memory // 3. Jump into the memory where the contract is loaded // After that the execution continues normally with the loaded contract reading our // prepared fn selector and jumps to the selected contract method. [ + // 1. Calculate the total size of the contract // 0x12 is going to hold the total size of the contract op::move_(0x12, RegId::ZERO), // find the start of the hardcoded blob ids, which are located after the code ends @@ -178,6 +179,7 @@ impl Contract { op::subi(0x13, 0x13, 1), // Jump backwards 3 instructions if the counter has not reached 0 op::jnzb(0x13, RegId::ZERO, 3), + // 2. Allocate and load the contract into memory // move the stack pointer by the contract size since we need to write the contract on the stack since only that memory can be executed op::cfe(0x12), // find the start of the hardcoded blob ids, which are located after the code ends @@ -205,6 +207,7 @@ impl Contract { op::subi(0x13, 0x13, 1), // Jump backwards 6 instructions if the counter has not reached 0 op::jnzb(0x13, RegId::ZERO, 6), + // 3. Jump into the memory where the contract is loaded // what follows is called _jmp_mem by the sway compiler // move to the start of the stack (also the start of the contract we loaded) op::move_(0x16, RegId::SSP), From a4fcfa5c5e3affd8216e337aedd9ea8a65878d9b Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Tue, 30 Jul 2024 15:23:12 +0200 Subject: [PATCH 22/50] fix loader code --- Cargo.toml | 18 ++-- e2e/Forc.toml | 2 + e2e/tests/contracts.rs | 83 ++----------------- e2e/tests/providers.rs | 2 +- e2e/tests/types_predicates.rs | 2 +- .../script_tx_estimator.rs | 1 + packages/fuels-programs/src/contract.rs | 81 ++++++++---------- packages/fuels-test-helpers/Cargo.toml | 4 +- .../src/fuel_bin_service.rs | 4 +- packages/fuels-test-helpers/src/node_types.rs | 4 +- packages/fuels-test-helpers/src/service.rs | 2 +- 11 files changed, 62 insertions(+), 141 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 93b0c09adf..7c548a5273 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -90,13 +90,13 @@ fuel-core-services = { version = "0.31.0", default-features = false } fuel-core-types = { version = "0.31.0", default-features = false } # Dependencies from the `fuel-vm` repository: -fuel-asm = { version = "0.55.0" } -fuel-crypto = { version = "0.55.0" } -fuel-merkle = { version = "0.55.0" } -fuel-storage = { version = "0.55.0" } -fuel-tx = { version = "0.55.0" } -fuel-types = { version = "0.55.0" } -fuel-vm = { version = "0.55.0" } +fuel-asm = { version = "0.56.0" } +fuel-crypto = { version = "0.56.0" } +fuel-merkle = { version = "0.56.0" } +fuel-storage = { version = "0.56.0" } +fuel-tx = { version = "0.56.0" } +fuel-types = { version = "0.56.0" } +fuel-vm = { version = "0.56.0" } # Workspace projects fuels = { version = "0.65.1", path = "./packages/fuels", default-features = false } @@ -109,13 +109,9 @@ fuels-test-helpers = { version = "0.65.1", path = "./packages/fuels-test-helpers versions-replacer = { version = "0.65.1", path = "./scripts/versions-replacer", default-features = false } [patch.crates-io] -fuel-asm = { git = "https://github.com/FuelLabs/fuel-vm", branch = "dento/blob-tx", package = "fuel-asm" } fuel-core = { git = "https://github.com/FuelLabs/fuel-core", branch = "dento/blob-tx", package = "fuel-core" } fuel-core-chain-config = { git = "https://github.com/FuelLabs/fuel-core", branch = "dento/blob-tx", package = "fuel-core-chain-config" } fuel-core-client = { git = "https://github.com/FuelLabs/fuel-core", branch = "dento/blob-tx", package = "fuel-core-client" } fuel-core-poa = { git = "https://github.com/FuelLabs/fuel-core", branch = "dento/blob-tx", package = "fuel-core-poa" } fuel-core-services = { git = "https://github.com/FuelLabs/fuel-core", branch = "dento/blob-tx", package = "fuel-core-services" } fuel-core-types = { git = "https://github.com/FuelLabs/fuel-core", branch = "dento/blob-tx", package = "fuel-core-types" } -fuel-tx = { git = "https://github.com/FuelLabs/fuel-vm", branch = "dento/blob-tx", package = "fuel-tx" } -fuel-types = { git = "https://github.com/FuelLabs/fuel-vm", branch = "dento/blob-tx", package = "fuel-types" } -fuel-vm = { git = "https://github.com/FuelLabs/fuel-vm", branch = "dento/blob-tx", package = "fuel-vm" } diff --git a/e2e/Forc.toml b/e2e/Forc.toml index 4054e17a43..db72147520 100644 --- a/e2e/Forc.toml +++ b/e2e/Forc.toml @@ -111,3 +111,5 @@ members = [ 'sway/types/scripts/script_u256', 'sway/types/scripts/script_vectors', ] +[patch.'https://github.com/fuellabs/sway'] +std = { git = "https://github.com/fuellabs/sway", branch = "esdrubal/abi_changes" } diff --git a/e2e/tests/contracts.rs b/e2e/tests/contracts.rs index be955beb2b..f57556b905 100644 --- a/e2e/tests/contracts.rs +++ b/e2e/tests/contracts.rs @@ -1,5 +1,4 @@ use fuels::{ - client::{PageDirection, PaginationRequest}, core::codec::{calldata, encode_fn_selector, DecoderConfig, EncoderConfig}, prelude::*, tx::ContractParameters, @@ -1849,9 +1848,9 @@ async fn variable_output_estimation_is_optimized() -> Result<()> { .call() .await?; - // using `fuel-core-lib` in debug builds is 20x slower so we won't validate in that case so we - // don't have to maintain two expectations - if !cfg!(all(debug_assertions, feature = "fuel-core-lib")) { + // debug builds are slower (20x for `fuel-core-lib`, 4x for a release-fuel-core-binary) + // we won't validate in that case so we don't have to maintain two expectations + if !cfg!(debug_assertions) { let elapsed = start.elapsed().as_secs(); let limit = 2; if elapsed > limit { @@ -2121,7 +2120,7 @@ async fn blob_contract_deployment() -> Result<()> { assert!( contract_size > 150_000, - "the testnet size limit was around 100kB, we want a contract bigger than that to reflect prod" + "the testnet size limit was around 100kB, we want a contract bigger than that to reflect prod (current: {contract_size}B)" ); let wallets = @@ -2135,22 +2134,11 @@ async fn blob_contract_deployment() -> Result<()> { let contract_max_size = consensus_parameters.contract_params().contract_max_size(); assert!( contract_size > contract_max_size, - "this test should ideally be run with a contract bigger than the max contract size so that we know deployment couldn't have happened without blobs" + "this test should ideally be run with a contract bigger than the max contract size ({contract_max_size}B) so that we know deployment couldn't have happened without blobs" ); let contract = Contract::load_from(contract_binary, LoadConfiguration::default())?; - let deployment_result = contract - .clone() - .deploy(&wallets[0], TxPolicies::default()) - .await; - - if let Err(Error::Transaction(Reason::Validation(msg))) = deployment_result { - assert_eq!(msg, "TransactionCreateBytecodeLen"); - } else { - panic!("Expected contract deployment to fail due to the contract being too big"); - } - let deploy_and_test = |wallet: WalletUnlocked, blob_size: BlobSizePolicy| { let contract = &contract; async move { @@ -2169,15 +2157,9 @@ async fn blob_contract_deployment() -> Result<()> { }; { - assert_wallet_made_no_transactions(&wallets[0]).await; - let percentage_of_theoretical_max = 0.95; - let max_blob_size = BlobTransactionBuilder::default() - .estimate_max_blob_size(&provider) - .await?; + // We're mostly limited by the payload size of the fuel-core endpoints + let percentage_of_theoretical_max = 0.05; - let expected_blobs = (contract_size as f64 - / (max_blob_size as f64 * percentage_of_theoretical_max)) - .ceil() as usize; deploy_and_test( wallets[0].clone(), BlobSizePolicy::Estimate { @@ -2185,60 +2167,11 @@ async fn blob_contract_deployment() -> Result<()> { }, ) .await?; - assert_eq!( - txs_made_by(&wallets[0]).await, - [vec!["blob"; expected_blobs], vec!["create", "script"]].concat() - ); } { - let expected_blobs = 10; - assert_wallet_made_no_transactions(&wallets[1]).await; - deploy_and_test( - wallets[1].clone(), - BlobSizePolicy::AtMost { - bytes: (contract_size as usize).div_ceil(expected_blobs), - }, - ) - .await?; - assert_eq!( - txs_made_by(&wallets[1]).await, - [ - vec!["blob".to_string(); expected_blobs], - vec!["create".to_string(), "script".to_string()] - ] - .concat() - ); + deploy_and_test(wallets[1].clone(), BlobSizePolicy::AtMost { words: 6_000 }).await?; } Ok(()) } - -async fn txs_made_by(wallet: &WalletUnlocked) -> Vec<&'static str> { - wallet - .provider() - .unwrap() - .get_transactions_by_owner( - wallet.address(), - PaginationRequest { - cursor: None, - results: 100, - direction: PageDirection::Forward, - }, - ) - .await - .unwrap() - .results - .into_iter() - .map(|tx| match tx.transaction { - TransactionType::Blob(_) => "blob", - TransactionType::Create(_) => "create", - TransactionType::Script(_) => "script", - _ => "other", - }) - .collect() -} - -async fn assert_wallet_made_no_transactions(wallet: &WalletUnlocked) { - assert!(txs_made_by(wallet).await.is_empty()); -} diff --git a/e2e/tests/providers.rs b/e2e/tests/providers.rs index b6344994c7..ff2a305fd1 100644 --- a/e2e/tests/providers.rs +++ b/e2e/tests/providers.rs @@ -1078,7 +1078,7 @@ async fn tx_respects_policies() -> Result<()> { async fn can_setup_static_gas_price() -> Result<()> { let expected_gas_price = 474; let node_config = NodeConfig { - static_gas_price: expected_gas_price, + starting_gas_price: expected_gas_price, ..Default::default() }; let provider = setup_test_provider(vec![], vec![], Some(node_config), None).await?; diff --git a/e2e/tests/types_predicates.rs b/e2e/tests/types_predicates.rs index 6cca7dc44a..9214dd08c7 100644 --- a/e2e/tests/types_predicates.rs +++ b/e2e/tests/types_predicates.rs @@ -111,7 +111,7 @@ async fn setup_predicate_test( )); let node_config = NodeConfig { - static_gas_price: 0, + starting_gas_price: 0, ..Default::default() }; let provider = setup_test_provider(coins, messages, Some(node_config), None).await?; diff --git a/packages/fuels-core/src/types/transaction_builders/script_tx_estimator.rs b/packages/fuels-core/src/types/transaction_builders/script_tx_estimator.rs index 484864eb2f..00521b399d 100644 --- a/packages/fuels-core/src/types/transaction_builders/script_tx_estimator.rs +++ b/packages/fuels-core/src/types/transaction_builders/script_tx_estimator.rs @@ -83,6 +83,7 @@ impl ScriptTxEstimator { let used_outputs = tx.outputs().len(); let unused_outputs = max_outputs.saturating_sub(used_outputs); + super::add_variable_outputs(tx, unused_outputs); } diff --git a/packages/fuels-programs/src/contract.rs b/packages/fuels-programs/src/contract.rs index fe31e6c67d..ad4d1a602b 100644 --- a/packages/fuels-programs/src/contract.rs +++ b/packages/fuels-programs/src/contract.rs @@ -2,6 +2,7 @@ mod load; mod storage; use std::{ + collections::HashSet, fmt::Debug, fs, path::{Path, PathBuf}, @@ -9,6 +10,7 @@ use std::{ use fuel_asm::{op, Instruction, RegId}; use fuel_tx::{Bytes32, Contract as FuelContract, ContractId, Salt, StorageSlot}; +use fuel_types::bytes::WORD_SIZE; use fuels_accounts::{provider::Provider, Account}; use fuels_core::types::{ bech32::Bech32ContractId, @@ -35,12 +37,13 @@ pub struct Contract { /// Used to control how the contract is going to get split up into blob tx. pub enum BlobSizePolicy { - /// Contract chunks can be at most `bytes` bytes. - AtMost { bytes: usize }, + /// Contract chunks can be at most `words` * 8 bytes. + AtMost { words: usize }, /// Note: Use a value less than 1.0 (100%): /// The theoretical maximum is calculated based on the number of bytes that can fit in a blob transaction /// without exceeding the maximum allowed transaction size. This calculation does not account for additional /// limiting factors such as: + /// * network limitations on payload size /// * the possibility of the transaction exceeding the maximum gas limit /// * the size impact of any inputs/witnesses added to the transaction to cover its fee Estimate { percentage_of_theoretical_max: f64 }, @@ -49,7 +52,7 @@ pub enum BlobSizePolicy { impl BlobSizePolicy { async fn resolve_size(&self, provider: &Provider) -> Result { let size = match self { - BlobSizePolicy::AtMost { bytes } => *bytes, + BlobSizePolicy::AtMost { words } => *words * WORD_SIZE, BlobSizePolicy::Estimate { percentage_of_theoretical_max, } => { @@ -57,7 +60,12 @@ impl BlobSizePolicy { .estimate_max_blob_size(provider) .await?; - (*percentage_of_theoretical_max * theoretical_max as f64) as usize + let percentage_of_theoretical_max = + (*percentage_of_theoretical_max * theoretical_max as f64) as usize; + + let rounded_to_word_boundary = + (percentage_of_theoretical_max / WORD_SIZE) * WORD_SIZE; + rounded_to_word_boundary } }; @@ -107,9 +115,16 @@ impl Contract { let provider = account.try_provider()?; let blobs = self.generate_blobs(provider, blob_size_policy).await?; - let blob_ids = blobs.iter().map(|blob| blob.id()).collect::>(); + let all_blob_ids = blobs.iter().map(|blob| blob.id()).collect::>(); + let mut already_uploaded = HashSet::new(); for blob in blobs { + let id = blob.id(); + + if already_uploaded.contains(&id) { + continue; + } + let mut tb = BlobTransactionBuilder::default() .with_blob(blob) .with_tx_policies(tx_policies) @@ -123,9 +138,11 @@ impl Contract { .send_transaction_and_await_commit(tx) .await? .check(None)?; + + already_uploaded.insert(id); } - Self::new_loader(&blob_ids, self.salt, self.storage_slots)? + Self::new_loader(&all_blob_ids, self.salt, self.storage_slots)? .deploy(account, tx_policies) .await } @@ -149,68 +166,38 @@ impl Contract { } // This function creates a contract that loads the specified blobs into memory and delegates the call to the code contained in the blobs. - fn loader_contract(blob_ids: &[[u8; 32]]) -> Result> { + fn loader_contract(blob_ids: &[BlobId]) -> Result> { const BLOB_ID_SIZE: u16 = 32; let get_instructions = |num_of_instructions, num_of_blobs| { - // There are 3 main steps: - // 1. Calculate the total size of the contract - // 2. Allocate and load the contract into memory - // 3. Jump into the memory where the contract is loaded + // There are 2 main steps: + // 1. Load the blob contents into memory + // 2. Jump to the beginning of the memory where the blobs were loaded // After that the execution continues normally with the loaded contract reading our // prepared fn selector and jumps to the selected contract method. [ - // 1. Calculate the total size of the contract - // 0x12 is going to hold the total size of the contract - op::move_(0x12, RegId::ZERO), - // find the start of the hardcoded blob ids, which are located after the code ends + // 1. load the blob contents into memory + // find the start of the hardcoded blob ids, which are located after the code ends, op::move_(0x10, RegId::IS), // 0x10 to hold the address of the current blob id op::addi(0x10, 0x10, num_of_instructions * Instruction::SIZE as u16), + // The contract is going to be loaded from the current value of SP onwards, save + // the location into 0x16 so we can jump into it later on + op::move_(0x16, RegId::SP), // loop counter op::movi(0x13, num_of_blobs), // LOOP starts here // 0x11 to hold the size of the current blob op::bsiz(0x11, 0x10), - // update the total size of the contract - op::add(0x12, 0x12, 0x11), + // push the blob contents onto the stack + op::ldc(0x10, 0, 0x11, 1), // move on to the next blob op::addi(0x10, 0x10, BLOB_ID_SIZE), // decrement the loop counter op::subi(0x13, 0x13, 1), // Jump backwards 3 instructions if the counter has not reached 0 op::jnzb(0x13, RegId::ZERO, 3), - // 2. Allocate and load the contract into memory - // move the stack pointer by the contract size since we need to write the contract on the stack since only that memory can be executed - op::cfe(0x12), - // find the start of the hardcoded blob ids, which are located after the code ends - op::move_(0x10, RegId::IS), - // 0x10 to hold the address of the current blob id - op::addi(0x10, 0x10, num_of_instructions * Instruction::SIZE as u16), - // 0x12 is going to hold the total bytes loaded of the contract - op::move_(0x12, RegId::ZERO), - // loop counter - op::movi(0x13, num_of_blobs), - // LOOP starts here - // 0x11 to hold the size of the current blob - op::bsiz(0x11, 0x10), - // the location where to load the current blob (start of stack) - op::move_(0x14, RegId::SSP), - // move to where this blob should be loaded by adding the total bytes loaded - op::add(0x14, 0x14, 0x12), - // load the current blob - op::bldd(0x14, 0x10, RegId::ZERO, 0x11), - // update the total bytes loaded - op::add(0x12, 0x12, 0x11), - // move on to the next blob - op::addi(0x10, 0x10, BLOB_ID_SIZE), - // decrement the loop counter - op::subi(0x13, 0x13, 1), - // Jump backwards 6 instructions if the counter has not reached 0 - op::jnzb(0x13, RegId::ZERO, 6), // 3. Jump into the memory where the contract is loaded // what follows is called _jmp_mem by the sway compiler - // move to the start of the stack (also the start of the contract we loaded) - op::move_(0x16, RegId::SSP), // subtract the address contained in IS because jmp will add it back op::sub(0x16, 0x16, RegId::IS), // jmp will multiply by 4 so we need to divide to cancel that out diff --git a/packages/fuels-test-helpers/Cargo.toml b/packages/fuels-test-helpers/Cargo.toml index 70069541c3..406e542adb 100644 --- a/packages/fuels-test-helpers/Cargo.toml +++ b/packages/fuels-test-helpers/Cargo.toml @@ -10,7 +10,9 @@ rust-version = { workspace = true } description = "Fuel Rust SDK test helpers." [dependencies] -fuel-core = { workspace = true, default-features = false, features = ["test-helpers"], optional = true } +fuel-core = { workspace = true, default-features = false, features = [ + "test-helpers", +], optional = true } fuel-core-chain-config = { workspace = true, features = ["test-helpers"] } fuel-core-client = { workspace = true } fuel-core-poa = { workspace = true } diff --git a/packages/fuels-test-helpers/src/fuel_bin_service.rs b/packages/fuels-test-helpers/src/fuel_bin_service.rs index 21e50d7cd1..3c8e7b54fc 100644 --- a/packages/fuels-test-helpers/src/fuel_bin_service.rs +++ b/packages/fuels-test-helpers/src/fuel_bin_service.rs @@ -85,8 +85,8 @@ impl ExtendedConfig { ); args.push(format!( - "--min-gas-price={}", - self.node_config.static_gas_price + "--starting-gas-price={}", + self.node_config.starting_gas_price )); Ok(args) diff --git a/packages/fuels-test-helpers/src/node_types.rs b/packages/fuels-test-helpers/src/node_types.rs index efdfe28afa..092ebc6b4d 100644 --- a/packages/fuels-test-helpers/src/node_types.rs +++ b/packages/fuels-test-helpers/src/node_types.rs @@ -52,7 +52,7 @@ pub struct NodeConfig { pub block_production: Trigger, pub vm_backtrace: bool, pub silent: bool, - pub static_gas_price: u64, + pub starting_gas_price: u64, } impl Default for NodeConfig { @@ -66,7 +66,7 @@ impl Default for NodeConfig { block_production: Trigger::Instant, vm_backtrace: false, silent: true, - static_gas_price: 1, + starting_gas_price: 1, } } } diff --git a/packages/fuels-test-helpers/src/service.rs b/packages/fuels-test-helpers/src/service.rs index 6dacb729fc..0c90cfee8b 100644 --- a/packages/fuels-test-helpers/src/service.rs +++ b/packages/fuels-test-helpers/src/service.rs @@ -104,7 +104,7 @@ impl FuelService { utxo_validation: node_config.utxo_validation, debug: node_config.debug, block_production: node_config.block_production.into(), - static_gas_price: node_config.static_gas_price, + starting_gas_price: node_config.starting_gas_price, ..ServiceConfig::local_node() } } From 61b797ffeed3e4e1f40a3d3efffeb04ccb00bd0d Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Tue, 30 Jul 2024 19:56:36 +0200 Subject: [PATCH 23/50] clippy --- packages/fuels-programs/src/contract.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/fuels-programs/src/contract.rs b/packages/fuels-programs/src/contract.rs index ad4d1a602b..92ced15529 100644 --- a/packages/fuels-programs/src/contract.rs +++ b/packages/fuels-programs/src/contract.rs @@ -63,9 +63,7 @@ impl BlobSizePolicy { let percentage_of_theoretical_max = (*percentage_of_theoretical_max * theoretical_max as f64) as usize; - let rounded_to_word_boundary = - (percentage_of_theoretical_max / WORD_SIZE) * WORD_SIZE; - rounded_to_word_boundary + (percentage_of_theoretical_max / WORD_SIZE) * WORD_SIZE } }; From 66d416d282c839428c0fb9511cab0ffd417ecd2c Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Tue, 30 Jul 2024 19:59:39 +0200 Subject: [PATCH 24/50] step enumeration --- packages/fuels-programs/src/contract.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/fuels-programs/src/contract.rs b/packages/fuels-programs/src/contract.rs index 92ced15529..3f9409c4a3 100644 --- a/packages/fuels-programs/src/contract.rs +++ b/packages/fuels-programs/src/contract.rs @@ -194,7 +194,7 @@ impl Contract { op::subi(0x13, 0x13, 1), // Jump backwards 3 instructions if the counter has not reached 0 op::jnzb(0x13, RegId::ZERO, 3), - // 3. Jump into the memory where the contract is loaded + // 2. Jump into the memory where the contract is loaded // what follows is called _jmp_mem by the sway compiler // subtract the address contained in IS because jmp will add it back op::sub(0x16, 0x16, RegId::IS), From 2624c7b07628955b5f6645ec78f28ba63edd03a1 Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Tue, 30 Jul 2024 20:06:23 +0200 Subject: [PATCH 25/50] use patched binary until a release is made --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 868ba75b1e..2f53db083f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,7 +17,7 @@ env: DASEL_VERSION: https://github.com/TomWright/dasel/releases/download/v2.3.6/dasel_linux_amd64 RUSTFLAGS: "-D warnings" FUEL_CORE_VERSION: 0.31.0 - FUEL_CORE_PATCH_BRANCH: + FUEL_CORE_PATCH_BRANCH: "dento/blob-tx" RUST_VERSION: 1.79.0 FORC_VERSION: 0.62.0 FORC_PATCH_BRANCH: "esdrubal/abi_changes" From 0b63cebe522796875e77eb55284c5991cf4cd8c9 Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Tue, 30 Jul 2024 20:19:11 +0200 Subject: [PATCH 26/50] binary patch cannot build, go back to waiting for a release --- .github/workflows/ci.yml | 2 +- examples/contracts/src/lib.rs | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2f53db083f..74cb9f5538 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,7 +17,7 @@ env: DASEL_VERSION: https://github.com/TomWright/dasel/releases/download/v2.3.6/dasel_linux_amd64 RUSTFLAGS: "-D warnings" FUEL_CORE_VERSION: 0.31.0 - FUEL_CORE_PATCH_BRANCH: "dento/blob-tx" + FUEL_CORE_PATCH_BRANCH: "" RUST_VERSION: 1.79.0 FORC_VERSION: 0.62.0 FORC_PATCH_BRANCH: "esdrubal/abi_changes" diff --git a/examples/contracts/src/lib.rs b/examples/contracts/src/lib.rs index 01d653a3da..42b85bfd77 100644 --- a/examples/contracts/src/lib.rs +++ b/examples/contracts/src/lib.rs @@ -982,4 +982,34 @@ mod tests { Ok(()) } + + async fn deploying_via_loader() -> Result<()> { + use fuels::prelude::*; + use std::str::FromStr; + + setup_program_test!( + Abigen(Contract( + name = "MyContract", + project = "e2e/sway/contracts/huge_contract" + )), + Wallets("wallet") + ); + let contract = Contract::load_from( + "e2e/sway/contracts/huge_contract/out/release/huge_contract.bin", + LoadConfiguration::default(), + )?; + + let contract_id = contract + .deploy_as_loader( + &wallet, + TxPolicies::default(), + BlobSizePolicy::AtMost { words: 10_000 }, + ) + .await?; + + let contract_instance = MyContract::new(contract_id, wallet); + todo!("remainder"); + + Ok(()) + } } From 24b7fe365f7c5a7f56ea5fab0386b54ce74fc67a Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Wed, 31 Jul 2024 13:18:06 +0200 Subject: [PATCH 27/50] docs --- docs/src/SUMMARY.md | 1 + docs/src/deploying/large_contract.md | 68 +++++++++++++++++ examples/contracts/Cargo.toml | 2 +- examples/contracts/src/lib.rs | 97 +++++++++++++++++++++++-- packages/fuels-programs/src/contract.rs | 5 ++ 5 files changed, 164 insertions(+), 9 deletions(-) create mode 100644 docs/src/deploying/large_contract.md diff --git a/docs/src/SUMMARY.md b/docs/src/SUMMARY.md index 0d75b6e878..e806542ab5 100644 --- a/docs/src/SUMMARY.md +++ b/docs/src/SUMMARY.md @@ -26,6 +26,7 @@ - [Storage slots](./deploying/storage-slots.md) - [Interacting with contracts](./deploying/interacting-with-contracts.md) - [The FuelVM Binary file](./deploying/the-fuelvm-binary-file.md) + - [Large contract](./deploying/large_contract.md) - [Calling contracts](./calling-contracts/index.md) - [Connecting wallets](./calling-contracts/calls-with-different-wallets.md) - [Transaction policies](./calling-contracts/tx-policies.md) diff --git a/docs/src/deploying/large_contract.md b/docs/src/deploying/large_contract.md new file mode 100644 index 0000000000..a6b0c78e7e --- /dev/null +++ b/docs/src/deploying/large_contract.md @@ -0,0 +1,68 @@ +# Deploying Large Contracts + +If your contract exceeds the size limit for a single deployment: + +```rust,ignore +{{#include ../../../examples/contracts/src/lib.rs:show_contract_is_too_big}} +``` + +you can deploy it in parts using a segmented approach: + +```rust,ignore +{{#include ../../../examples/contracts/src/lib.rs:deploy_via_loader}} +``` + +In this process, your contract code is automatically divided into chunks based on the specified policy: + +```rust,ignore +{{#include ../../../examples/contracts/src/lib.rs:blob_policy}} +``` + +Each unique chunk is deployed as a separate blob transaction. Once all the blob transactions have been successfully committed, a loader contract is created. This loader, when invoked, will load the chunks into memory using the [LDC (Load Code from an External Contract)](https://docs.fuel.network/docs/specs/fuel-vm/instruction-set/#ldc-load-code-from-an-external-contract) instruction and execute your original contract. + +After deploying the loader contract, you can interact with it just as you would with a traditionally deployed contract: + +```rust,ignore +{{#include ../../../examples/contracts/src/lib.rs:use_loader}} +``` + +## Chunk sizes + +The size of a Blob transaction is limited by three things: + +1. The maximum size of a single transaction: + +```rust,ignore +{{#include ../../../examples/contracts/src/lib.rs:show_max_tx_size}} +``` + +2. Maximum gas usage for a single transaction: + +```rust,ignore +{{#include ../../../examples/contracts/src/lib.rs:show_max_tx_gas}} +``` + +3. The maximum HTTP body size the Fuel node will accept. + +When deploying, you can use an estimating blob size policy: + +```rust,ignore +{{#include ../../../examples/contracts/src/lib.rs:estimate_chunk_size}} +``` + +and the SDK will limit the blob sizes to the given percentage of the maximum. + +Note that this estimation has the following caveats: + +* It only accounts for the maximum transaction size (max gas usage and HTTP body limit not considered). +* It doesn't account for any size increase that will happen after the transaction is funded. + +As such, you should use a percentage less than 100% to account for the caveats above. + +## Manually splitting up the contract + +If you wish, for any reason (such as resumability, retries, more control over the transactions, etc.), to manually split up and deploy the contract code, you can do so by following the example below: + +```rust,ignore +{{#include ../../../examples/contracts/src/lib.rs:manual_contract_chunking}} +``` diff --git a/examples/contracts/Cargo.toml b/examples/contracts/Cargo.toml index 08d417f368..f259c1678c 100644 --- a/examples/contracts/Cargo.toml +++ b/examples/contracts/Cargo.toml @@ -10,7 +10,7 @@ repository = { workspace = true } description = "Fuel Rust SDK contract examples." [dev-dependencies] -fuels = { workspace = true, features = ["default"] } +fuels = { workspace = true, features = ["default", "fuel-core-lib"] } rand = { workspace = true } tokio = { workspace = true, features = ["full"] } diff --git a/examples/contracts/src/lib.rs b/examples/contracts/src/lib.rs index 42b85bfd77..e9c71094de 100644 --- a/examples/contracts/src/lib.rs +++ b/examples/contracts/src/lib.rs @@ -1,5 +1,7 @@ #[cfg(test)] mod tests { + use std::collections::HashSet; + use fuels::{ core::codec::{encode_fn_selector, DecoderConfig, EncoderConfig}, crypto::SecretKey, @@ -983,32 +985,111 @@ mod tests { Ok(()) } + #[tokio::test] async fn deploying_via_loader() -> Result<()> { use fuels::prelude::*; - use std::str::FromStr; setup_program_test!( Abigen(Contract( name = "MyContract", project = "e2e/sway/contracts/huge_contract" )), - Wallets("wallet") + Wallets("main_wallet") ); - let contract = Contract::load_from( - "e2e/sway/contracts/huge_contract/out/release/huge_contract.bin", - LoadConfiguration::default(), - )?; + let contract_binary = + "../../e2e/sway/contracts/huge_contract/out/release/huge_contract.bin"; + let contract = Contract::load_from(contract_binary, LoadConfiguration::default())?; + + let contract_size = std::fs::metadata(contract_binary)?.len(); + let provider: Provider = main_wallet.try_provider()?.clone(); + + // ANCHOR: show_contract_is_too_big + let max_allowed = provider + .consensus_parameters() + .contract_params() + .contract_max_size(); + + assert!(contract_size > max_allowed); + // ANCHOR_END: show_contract_is_too_big + + let wallet = &main_wallet; + // ANCHOR: deploy_via_loader let contract_id = contract .deploy_as_loader( - &wallet, + wallet, TxPolicies::default(), + // ANCHOR: blob_policy BlobSizePolicy::AtMost { words: 10_000 }, + // ANCHOR_END: blob_policy ) .await?; + // ANCHOR_END: deploy_via_loader + let wallet = main_wallet.clone(); + // ANCHOR: use_loader + let contract_instance = MyContract::new(contract_id, wallet); + let response = contract_instance.methods().something().call().await?.value; + assert_eq!(response, 1001); + // ANCHOR_END: use_loader + + // ANCHOR: show_max_tx_size + provider.consensus_parameters().tx_params().max_size(); + // ANCHOR_END: show_max_tx_size + + // ANCHOR: show_max_tx_gas + provider.consensus_parameters().tx_params().max_gas_per_tx(); + // ANCHOR_END: show_max_tx_gas + + #[allow(unused_variables)] + // ANCHOR: estimate_chunk_size + let policy = BlobSizePolicy::Estimate { + percentage_of_theoretical_max: 0.95, + }; + // ANCHOR_END: estimate_chunk_size + + let wallet = main_wallet; + // ANCHOR: manual_contract_chunking + let code = std::fs::read(contract_binary)?; + let chunk_size = 100_000; + assert!( + chunk_size % 8 == 0, + "all chunks, except the last, must be word-aligned" + ); + + let mut all_blob_ids = vec![]; + let mut already_uploaded_blobs = HashSet::new(); + for chunk in code.chunks(chunk_size) { + let blob = Blob::new(chunk.to_vec()); + + let blob_id = blob.id(); + all_blob_ids.push(blob_id); + + // uploading the same blob twice is not allowed + if already_uploaded_blobs.contains(&blob_id) { + continue; + } + + let mut tb = BlobTransactionBuilder::default().with_blob(blob); + wallet.adjust_for_fee(&mut tb, 0).await?; + wallet.add_witnesses(&mut tb)?; + + let tx = tb.build(&provider).await?; + provider + .send_transaction_and_await_commit(tx) + .await? + .check(None)?; + + already_uploaded_blobs.insert(blob_id); + } + + let contract_id = Contract::new_loader(&all_blob_ids, Salt::default(), vec![])? + .deploy(&wallet, TxPolicies::default()) + .await?; let contract_instance = MyContract::new(contract_id, wallet); - todo!("remainder"); + let response = contract_instance.methods().something().call().await?.value; + assert_eq!(response, 1001); + // ANCHOR: manual_contract_chunking Ok(()) } diff --git a/packages/fuels-programs/src/contract.rs b/packages/fuels-programs/src/contract.rs index 3f9409c4a3..6833880dfa 100644 --- a/packages/fuels-programs/src/contract.rs +++ b/packages/fuels-programs/src/contract.rs @@ -97,6 +97,11 @@ impl Contract { salt: Salt, storage_slots: Vec, ) -> Result { + // Loader asm code relies on there being at least one blob + if blob_ids.is_empty() { + return Err(error!(Other, "must provide at least one blob")); + } + let code = Self::loader_contract(blob_ids)?; Ok(Self::new(code, salt, storage_slots)) } From 7079321655248258971d26e5eebdae47e4aa5bc9 Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Wed, 31 Jul 2024 13:57:17 +0200 Subject: [PATCH 28/50] remove patch branch --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 74cb9f5538..868ba75b1e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,7 +17,7 @@ env: DASEL_VERSION: https://github.com/TomWright/dasel/releases/download/v2.3.6/dasel_linux_amd64 RUSTFLAGS: "-D warnings" FUEL_CORE_VERSION: 0.31.0 - FUEL_CORE_PATCH_BRANCH: "" + FUEL_CORE_PATCH_BRANCH: RUST_VERSION: 1.79.0 FORC_VERSION: 0.62.0 FORC_PATCH_BRANCH: "esdrubal/abi_changes" From 619aa6b5b676167be44a75d396c5150c2c55d7e7 Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Wed, 31 Jul 2024 13:59:14 +0200 Subject: [PATCH 29/50] turn of fuel core lib by default in contracts examples --- examples/contracts/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/contracts/Cargo.toml b/examples/contracts/Cargo.toml index f259c1678c..08d417f368 100644 --- a/examples/contracts/Cargo.toml +++ b/examples/contracts/Cargo.toml @@ -10,7 +10,7 @@ repository = { workspace = true } description = "Fuel Rust SDK contract examples." [dev-dependencies] -fuels = { workspace = true, features = ["default", "fuel-core-lib"] } +fuels = { workspace = true, features = ["default"] } rand = { workspace = true } tokio = { workspace = true, features = ["full"] } From f95f384f60418e234680fec24289c2fb19f8bfc6 Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Wed, 31 Jul 2024 14:04:44 +0200 Subject: [PATCH 30/50] comment on jump amount --- packages/fuels-programs/src/contract.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/fuels-programs/src/contract.rs b/packages/fuels-programs/src/contract.rs index 6833880dfa..91e6a9dde8 100644 --- a/packages/fuels-programs/src/contract.rs +++ b/packages/fuels-programs/src/contract.rs @@ -197,7 +197,7 @@ impl Contract { op::addi(0x10, 0x10, BLOB_ID_SIZE), // decrement the loop counter op::subi(0x13, 0x13, 1), - // Jump backwards 3 instructions if the counter has not reached 0 + // Jump backwards (3+1) instructions if the counter has not reached 0 op::jnzb(0x13, RegId::ZERO, 3), // 2. Jump into the memory where the contract is loaded // what follows is called _jmp_mem by the sway compiler From caa8356dc729434f67cd7aa76946c9b08dfdb494 Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Fri, 2 Aug 2024 17:10:25 +0200 Subject: [PATCH 31/50] add gql body size limit configuration parameter --- e2e/tests/contracts.rs | 2 +- packages/fuels-test-helpers/src/fuel_bin_service.rs | 3 +++ packages/fuels-test-helpers/src/node_types.rs | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/e2e/tests/contracts.rs b/e2e/tests/contracts.rs index f57556b905..3f9e6f2751 100644 --- a/e2e/tests/contracts.rs +++ b/e2e/tests/contracts.rs @@ -2158,7 +2158,7 @@ async fn blob_contract_deployment() -> Result<()> { { // We're mostly limited by the payload size of the fuel-core endpoints - let percentage_of_theoretical_max = 0.05; + let percentage_of_theoretical_max = 0.95; deploy_and_test( wallets[0].clone(), diff --git a/packages/fuels-test-helpers/src/fuel_bin_service.rs b/packages/fuels-test-helpers/src/fuel_bin_service.rs index 3c8e7b54fc..c976729d92 100644 --- a/packages/fuels-test-helpers/src/fuel_bin_service.rs +++ b/packages/fuels-test-helpers/src/fuel_bin_service.rs @@ -73,6 +73,9 @@ impl ExtendedConfig { } }; + let body_limit = self.node_config.graphql_request_body_bytes_limit; + args.push(format!("--graphql-request-body-bytes-limit={body_limit}")); + args.extend( [ (self.node_config.vm_backtrace, "--vm-backtrace"), diff --git a/packages/fuels-test-helpers/src/node_types.rs b/packages/fuels-test-helpers/src/node_types.rs index 092ebc6b4d..587c94f14d 100644 --- a/packages/fuels-test-helpers/src/node_types.rs +++ b/packages/fuels-test-helpers/src/node_types.rs @@ -53,6 +53,7 @@ pub struct NodeConfig { pub vm_backtrace: bool, pub silent: bool, pub starting_gas_price: u64, + pub graphql_request_body_bytes_limit: u64, } impl Default for NodeConfig { @@ -67,6 +68,7 @@ impl Default for NodeConfig { vm_backtrace: false, silent: true, starting_gas_price: 1, + graphql_request_body_bytes_limit: u64::MAX, } } } From 2f2f692f7a456385a0a7e324a2cb7328e3ec8103 Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Wed, 7 Aug 2024 12:59:04 +0200 Subject: [PATCH 32/50] update to latest release --- Cargo.toml | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 7c548a5273..401104f38b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -82,12 +82,12 @@ which = { version = "6.0.0", default-features = false } zeroize = "1.7.0" # Dependencies from the `fuel-core` repository: -fuel-core = { version = "0.31.0", default-features = false } -fuel-core-chain-config = { version = "0.31.0", default-features = false } -fuel-core-client = { version = "0.31.0", default-features = false } -fuel-core-poa = { version = "0.31.0", default-features = false } -fuel-core-services = { version = "0.31.0", default-features = false } -fuel-core-types = { version = "0.31.0", default-features = false } +fuel-core = { version = "0.32.0", default-features = false } +fuel-core-chain-config = { version = "0.32.0", default-features = false } +fuel-core-client = { version = "0.32.0", default-features = false } +fuel-core-poa = { version = "0.32.0", default-features = false } +fuel-core-services = { version = "0.32.0", default-features = false } +fuel-core-types = { version = "0.32.0", default-features = false } # Dependencies from the `fuel-vm` repository: fuel-asm = { version = "0.56.0" } @@ -107,11 +107,3 @@ fuels-macros = { version = "0.65.1", path = "./packages/fuels-macros", default-f fuels-programs = { version = "0.65.1", path = "./packages/fuels-programs", default-features = false } fuels-test-helpers = { version = "0.65.1", path = "./packages/fuels-test-helpers", default-features = false } versions-replacer = { version = "0.65.1", path = "./scripts/versions-replacer", default-features = false } - -[patch.crates-io] -fuel-core = { git = "https://github.com/FuelLabs/fuel-core", branch = "dento/blob-tx", package = "fuel-core" } -fuel-core-chain-config = { git = "https://github.com/FuelLabs/fuel-core", branch = "dento/blob-tx", package = "fuel-core-chain-config" } -fuel-core-client = { git = "https://github.com/FuelLabs/fuel-core", branch = "dento/blob-tx", package = "fuel-core-client" } -fuel-core-poa = { git = "https://github.com/FuelLabs/fuel-core", branch = "dento/blob-tx", package = "fuel-core-poa" } -fuel-core-services = { git = "https://github.com/FuelLabs/fuel-core", branch = "dento/blob-tx", package = "fuel-core-services" } -fuel-core-types = { git = "https://github.com/FuelLabs/fuel-core", branch = "dento/blob-tx", package = "fuel-core-types" } From d0c85ec893280b86eaa648d17265082e0f1ad6ba Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Thu, 8 Aug 2024 00:30:33 +0200 Subject: [PATCH 33/50] pause for sleep --- e2e/tests/contracts.rs | 4435 +++++++++-------- packages/fuels-programs/src/contract.rs | 466 +- packages/fuels-programs/src/contract/load.rs | 43 - .../fuels-programs/src/contract/loader.rs | 294 ++ .../fuels-programs/src/contract/regular.rs | 186 + .../fuels-programs/src/contract/storage.rs | 41 +- packages/fuels/src/lib.rs | 2 +- 7 files changed, 3042 insertions(+), 2425 deletions(-) delete mode 100644 packages/fuels-programs/src/contract/load.rs create mode 100644 packages/fuels-programs/src/contract/loader.rs create mode 100644 packages/fuels-programs/src/contract/regular.rs diff --git a/e2e/tests/contracts.rs b/e2e/tests/contracts.rs index 3f9e6f2751..97a66fac4b 100644 --- a/e2e/tests/contracts.rs +++ b/e2e/tests/contracts.rs @@ -1,2177 +1,2502 @@ +use std::collections::HashSet; + +use fuel_tx::Bytes32; use fuels::{ core::codec::{calldata, encode_fn_selector, DecoderConfig, EncoderConfig}, prelude::*, + programs::contract::loader_contract_asm, tx::ContractParameters, types::{errors::transaction::Reason, input::Input, Bits256, Identity}, }; use tokio::time::Instant; +// +// #[tokio::test] +// async fn test_multiple_args() -> Result<()> { +// setup_program_test!( +// Wallets("wallet"), +// Abigen(Contract( +// name = "TestContract", +// project = "e2e/sway/contracts/contract_test" +// )), +// Deploy( +// name = "contract_instance", +// contract = "TestContract", +// wallet = "wallet" +// ), +// ); +// +// // Make sure we can call the contract with multiple arguments +// let contract_methods = contract_instance.methods(); +// let response = contract_methods.get(5, 6).call().await?; +// +// assert_eq!(response.value, 11); +// +// let t = MyType { x: 5, y: 6 }; +// let response = contract_methods.get_alt(t.clone()).call().await?; +// assert_eq!(response.value, t); +// +// let response = contract_methods.get_single(5).call().await?; +// assert_eq!(response.value, 5); +// Ok(()) +// } +// +// #[tokio::test] +// async fn test_contract_calling_contract() -> Result<()> { +// // Tests a contract call that calls another contract (FooCaller calls FooContract underneath) +// setup_program_test!( +// Wallets("wallet"), +// Abigen( +// Contract( +// name = "LibContract", +// project = "e2e/sway/contracts/lib_contract" +// ), +// Contract( +// name = "LibContractCaller", +// project = "e2e/sway/contracts/lib_contract_caller" +// ), +// ), +// Deploy( +// name = "lib_contract_instance", +// contract = "LibContract", +// wallet = "wallet" +// ), +// Deploy( +// name = "lib_contract_instance2", +// contract = "LibContract", +// wallet = "wallet" +// ), +// Deploy( +// name = "contract_caller_instance", +// contract = "LibContractCaller", +// wallet = "wallet" +// ), +// ); +// let lib_contract_id = lib_contract_instance.contract_id(); +// let lib_contract_id2 = lib_contract_instance2.contract_id(); +// +// // Call the contract directly. It increments the given value. +// let response = lib_contract_instance.methods().increment(42).call().await?; +// +// assert_eq!(43, response.value); +// +// let response = contract_caller_instance +// .methods() +// .increment_from_contracts(lib_contract_id, lib_contract_id2, 42) +// // Note that the two lib_contract_instances have different types +// .with_contracts(&[&lib_contract_instance, &lib_contract_instance2]) +// .call() +// .await?; +// +// assert_eq!(86, response.value); +// +// // ANCHOR: external_contract +// let response = contract_caller_instance +// .methods() +// .increment_from_contract(lib_contract_id, 42) +// .with_contracts(&[&lib_contract_instance]) +// .call() +// .await?; +// // ANCHOR_END: external_contract +// +// assert_eq!(43, response.value); +// +// // ANCHOR: external_contract_ids +// let response = contract_caller_instance +// .methods() +// .increment_from_contract(lib_contract_id, 42) +// .with_contract_ids(&[lib_contract_id.clone()]) +// .call() +// .await?; +// // ANCHOR_END: external_contract_ids +// +// assert_eq!(43, response.value); +// Ok(()) +// } +// +// #[tokio::test] +// async fn test_reverting_transaction() -> Result<()> { +// setup_program_test!( +// Wallets("wallet"), +// Abigen(Contract( +// name = "RevertContract", +// project = "e2e/sway/contracts/revert_transaction_error" +// )), +// Deploy( +// name = "contract_instance", +// contract = "RevertContract", +// wallet = "wallet" +// ), +// ); +// +// let response = contract_instance +// .methods() +// .make_transaction_fail(true) +// .call() +// .await; +// +// assert!(matches!( +// response, +// Err(Error::Transaction(Reason::Reverted { revert_id, .. })) if revert_id == 128 +// )); +// +// Ok(()) +// } +// +// #[tokio::test] +// async fn test_multiple_read_calls() -> Result<()> { +// setup_program_test!( +// Wallets("wallet"), +// Abigen(Contract( +// name = "MultiReadContract", +// project = "e2e/sway/contracts/multiple_read_calls" +// )), +// Deploy( +// name = "contract_instance", +// contract = "MultiReadContract", +// wallet = "wallet" +// ), +// ); +// +// let contract_methods = contract_instance.methods(); +// contract_methods.store(42).call().await?; +// +// // Use "simulate" because the methods don't actually +// // run a transaction, but just a dry-run +// let stored = contract_methods +// .read() +// .simulate(Execution::StateReadOnly) +// .await?; +// +// assert_eq!(stored.value, 42); +// +// let stored = contract_methods +// .read() +// .simulate(Execution::StateReadOnly) +// .await?; +// +// assert_eq!(stored.value, 42); +// Ok(()) +// } +// +// #[tokio::test] +// async fn test_multi_call_beginner() -> Result<()> { +// setup_program_test!( +// Wallets("wallet"), +// Abigen(Contract( +// name = "TestContract", +// project = "e2e/sway/contracts/contract_test" +// )), +// Deploy( +// name = "contract_instance", +// contract = "TestContract", +// wallet = "wallet" +// ), +// ); +// +// let contract_methods = contract_instance.methods(); +// let call_handler_1 = contract_methods.get_single(7); +// let call_handler_2 = contract_methods.get_single(42); +// +// let multi_call_handler = CallHandler::new_multi_call(wallet.clone()) +// .add_call(call_handler_1) +// .add_call(call_handler_2); +// +// let (val_1, val_2): (u64, u64) = multi_call_handler.call().await?.value; +// +// assert_eq!(val_1, 7); +// assert_eq!(val_2, 42); +// +// Ok(()) +// } +// +// #[tokio::test] +// async fn test_multi_call_pro() -> Result<()> { +// setup_program_test!( +// Wallets("wallet"), +// Abigen(Contract( +// name = "TestContract", +// project = "e2e/sway/contracts/contract_test" +// )), +// Deploy( +// name = "contract_instance", +// contract = "TestContract", +// wallet = "wallet" +// ), +// ); +// +// let my_type_1 = MyType { x: 1, y: 2 }; +// let my_type_2 = MyType { x: 3, y: 4 }; +// +// let contract_methods = contract_instance.methods(); +// let call_handler_1 = contract_methods.get_single(5); +// let call_handler_2 = contract_methods.get_single(6); +// let call_handler_3 = contract_methods.get_alt(my_type_1.clone()); +// let call_handler_4 = contract_methods.get_alt(my_type_2.clone()); +// let call_handler_5 = contract_methods.get_array([7; 2]); +// let call_handler_6 = contract_methods.get_array([42; 2]); +// +// let multi_call_handler = CallHandler::new_multi_call(wallet.clone()) +// .add_call(call_handler_1) +// .add_call(call_handler_2) +// .add_call(call_handler_3) +// .add_call(call_handler_4) +// .add_call(call_handler_5) +// .add_call(call_handler_6); +// +// let (val_1, val_2, type_1, type_2, array_1, array_2): ( +// u64, +// u64, +// MyType, +// MyType, +// [u64; 2], +// [u64; 2], +// ) = multi_call_handler.call().await?.value; +// +// assert_eq!(val_1, 5); +// assert_eq!(val_2, 6); +// assert_eq!(type_1, my_type_1); +// assert_eq!(type_2, my_type_2); +// assert_eq!(array_1, [7; 2]); +// assert_eq!(array_2, [42; 2]); +// +// Ok(()) +// } +// +// #[tokio::test] +// async fn test_contract_call_fee_estimation() -> Result<()> { +// setup_program_test!( +// Wallets("wallet"), +// Abigen(Contract( +// name = "TestContract", +// project = "e2e/sway/contracts/contract_test" +// )), +// Deploy( +// name = "contract_instance", +// contract = "TestContract", +// wallet = "wallet" +// ), +// ); +// +// let gas_limit = 800; +// let tolerance = Some(0.2); +// let block_horizon = Some(1); +// let expected_gas_used = 960; +// let expected_metered_bytes_size = 824; +// +// let estimated_transaction_cost = contract_instance +// .methods() +// .initialize_counter(42) +// .with_tx_policies(TxPolicies::default().with_script_gas_limit(gas_limit)) +// .estimate_transaction_cost(tolerance, block_horizon) +// .await?; +// +// assert_eq!(estimated_transaction_cost.gas_used, expected_gas_used); +// assert_eq!( +// estimated_transaction_cost.metered_bytes_size, +// expected_metered_bytes_size +// ); +// +// Ok(()) +// } +// +// #[tokio::test] +// async fn contract_call_has_same_estimated_and_used_gas() -> Result<()> { +// setup_program_test!( +// Wallets("wallet"), +// Abigen(Contract( +// name = "TestContract", +// project = "e2e/sway/contracts/contract_test" +// )), +// Deploy( +// name = "contract_instance", +// contract = "TestContract", +// wallet = "wallet" +// ), +// ); +// let contract_methods = contract_instance.methods(); +// +// let tolerance = Some(0.0); +// let block_horizon = Some(1); +// +// let estimated_gas_used = contract_methods +// .initialize_counter(42) +// .estimate_transaction_cost(tolerance, block_horizon) +// .await? +// .gas_used; +// +// let gas_used = contract_methods +// .initialize_counter(42) +// .call() +// .await? +// .gas_used; +// +// assert_eq!(estimated_gas_used, gas_used); +// Ok(()) +// } +// +// #[tokio::test] +// async fn mult_call_has_same_estimated_and_used_gas() -> Result<()> { +// setup_program_test!( +// Wallets("wallet"), +// Abigen(Contract( +// name = "TestContract", +// project = "e2e/sway/contracts/contract_test" +// )), +// Deploy( +// name = "contract_instance", +// contract = "TestContract", +// wallet = "wallet" +// ), +// ); +// +// let contract_methods = contract_instance.methods(); +// let call_handler_1 = contract_methods.initialize_counter(42); +// let call_handler_2 = contract_methods.get_array([42; 2]); +// +// let multi_call_handler = CallHandler::new_multi_call(wallet.clone()) +// .add_call(call_handler_1) +// .add_call(call_handler_2); +// +// let tolerance = Some(0.0); +// let block_horizon = Some(1); +// let estimated_gas_used = multi_call_handler +// .estimate_transaction_cost(tolerance, block_horizon) +// .await? +// .gas_used; +// +// let gas_used = multi_call_handler.call::<(u64, [u64; 2])>().await?.gas_used; +// +// assert_eq!(estimated_gas_used, gas_used); +// Ok(()) +// } +// +// #[tokio::test] +// async fn contract_method_call_respects_maturity() -> Result<()> { +// setup_program_test!( +// Wallets("wallet"), +// Abigen(Contract( +// name = "BlockHeightContract", +// project = "e2e/sway/contracts/transaction_block_height" +// )), +// Deploy( +// name = "contract_instance", +// contract = "BlockHeightContract", +// wallet = "wallet" +// ), +// ); +// +// let call_w_maturity = |maturity| { +// contract_instance +// .methods() +// .calling_this_will_produce_a_block() +// .with_tx_policies(TxPolicies::default().with_maturity(maturity)) +// }; +// +// call_w_maturity(1).call().await.expect( +// "should have passed since we're calling with a maturity \ +// that is less or equal to the current block height", +// ); +// +// call_w_maturity(3).call().await.expect_err( +// "should have failed since we're calling with a maturity \ +// that is greater than the current block height", +// ); +// +// Ok(()) +// } +// +// #[tokio::test] +// async fn test_auth_msg_sender_from_sdk() -> Result<()> { +// setup_program_test!( +// Wallets("wallet"), +// Abigen(Contract( +// name = "AuthContract", +// project = "e2e/sway/contracts/auth_testing_contract" +// )), +// Deploy( +// name = "contract_instance", +// contract = "AuthContract", +// wallet = "wallet" +// ), +// ); +// +// // Contract returns true if `msg_sender()` matches `wallet.address()`. +// let response = contract_instance +// .methods() +// .check_msg_sender(wallet.address()) +// .call() +// .await?; +// +// assert!(response.value); +// Ok(()) +// } +// +// #[tokio::test] +// async fn test_large_return_data() -> Result<()> { +// setup_program_test!( +// Wallets("wallet"), +// Abigen(Contract( +// name = "TestContract", +// project = "e2e/sway/contracts/large_return_data" +// )), +// Deploy( +// name = "contract_instance", +// contract = "TestContract", +// wallet = "wallet" +// ), +// ); +// +// let contract_methods = contract_instance.methods(); +// let res = contract_methods.get_id().call().await?; +// +// assert_eq!( +// res.value.0, +// [ +// 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, +// 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 +// ] +// ); +// +// // One word-sized string +// let res = contract_methods.get_small_string().call().await?; +// assert_eq!(res.value, "gggggggg"); +// +// // Two word-sized string +// let res = contract_methods.get_large_string().call().await?; +// assert_eq!(res.value, "ggggggggg"); +// +// // Large struct will be bigger than a `WORD`. +// let res = contract_methods.get_large_struct().call().await?; +// assert_eq!(res.value.foo, 12); +// assert_eq!(res.value.bar, 42); +// +// // Array will be returned in `ReturnData`. +// let res = contract_methods.get_large_array().call().await?; +// assert_eq!(res.value, [1, 2]); +// +// let res = contract_methods.get_contract_id().call().await?; +// +// // First `value` is from `CallResponse`. +// // Second `value` is from the `ContractId` type. +// assert_eq!( +// res.value, +// ContractId::from([ +// 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, +// 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 +// ]) +// ); +// Ok(()) +// } +// +// #[tokio::test] +// async fn can_handle_function_called_new() -> Result<()> { +// setup_program_test!( +// Wallets("wallet"), +// Abigen(Contract( +// name = "TestContract", +// project = "e2e/sway/contracts/contract_test" +// )), +// Deploy( +// name = "contract_instance", +// contract = "TestContract", +// wallet = "wallet" +// ), +// ); +// +// let response = contract_instance.methods().new().call().await?.value; +// +// assert_eq!(response, 12345); +// Ok(()) +// } +// +// #[tokio::test] +// async fn test_contract_setup_macro_deploy_with_salt() -> Result<()> { +// // ANCHOR: contract_setup_macro_multi +// setup_program_test!( +// Wallets("wallet"), +// Abigen( +// Contract( +// name = "LibContract", +// project = "e2e/sway/contracts/lib_contract" +// ), +// Contract( +// name = "LibContractCaller", +// project = "e2e/sway/contracts/lib_contract_caller" +// ), +// ), +// Deploy( +// name = "lib_contract_instance", +// contract = "LibContract", +// wallet = "wallet" +// ), +// Deploy( +// name = "contract_caller_instance", +// contract = "LibContractCaller", +// wallet = "wallet" +// ), +// Deploy( +// name = "contract_caller_instance2", +// contract = "LibContractCaller", +// wallet = "wallet" +// ), +// ); +// let lib_contract_id = lib_contract_instance.contract_id(); +// +// let contract_caller_id = contract_caller_instance.contract_id(); +// +// let contract_caller_id2 = contract_caller_instance2.contract_id(); +// +// // Because we deploy with salt, we can deploy the same contract multiple times +// assert_ne!(contract_caller_id, contract_caller_id2); +// +// // The first contract can be called because they were deployed on the same provider +// let response = contract_caller_instance +// .methods() +// .increment_from_contract(lib_contract_id, 42) +// .with_contracts(&[&lib_contract_instance]) +// .call() +// .await?; +// +// assert_eq!(43, response.value); +// +// let response = contract_caller_instance2 +// .methods() +// .increment_from_contract(lib_contract_id, 42) +// .with_contracts(&[&lib_contract_instance]) +// .call() +// .await?; +// +// assert_eq!(43, response.value); +// // ANCHOR_END: contract_setup_macro_multi +// +// Ok(()) +// } +// +// #[tokio::test] +// async fn test_wallet_getter() -> Result<()> { +// setup_program_test!( +// Wallets("wallet"), +// Abigen(Contract( +// name = "TestContract", +// project = "e2e/sway/contracts/contract_test" +// )), +// Deploy( +// name = "contract_instance", +// contract = "TestContract", +// wallet = "wallet" +// ), +// ); +// +// assert_eq!(contract_instance.account().address(), wallet.address()); +// //`contract_id()` is tested in +// // async fn test_contract_calling_contract() -> Result<()> { +// Ok(()) +// } +// +// #[tokio::test] +// async fn test_connect_wallet() -> Result<()> { +// // ANCHOR: contract_setup_macro_manual_wallet +// let config = WalletsConfig::new(Some(2), Some(1), Some(DEFAULT_COIN_AMOUNT)); +// +// let mut wallets = launch_custom_provider_and_get_wallets(config, None, None).await?; +// let wallet = wallets.pop().unwrap(); +// let wallet_2 = wallets.pop().unwrap(); +// +// setup_program_test!( +// Abigen(Contract( +// name = "TestContract", +// project = "e2e/sway/contracts/contract_test" +// )), +// Deploy( +// name = "contract_instance", +// contract = "TestContract", +// wallet = "wallet" +// ), +// ); +// // ANCHOR_END: contract_setup_macro_manual_wallet +// +// // pay for call with wallet +// let tx_policies = TxPolicies::default() +// .with_tip(100) +// .with_script_gas_limit(1_000_000); +// +// contract_instance +// .methods() +// .initialize_counter(42) +// .with_tx_policies(tx_policies) +// .call() +// .await?; +// +// // confirm that funds have been deducted +// let wallet_balance = wallet.get_asset_balance(&Default::default()).await?; +// assert!(DEFAULT_COIN_AMOUNT > wallet_balance); +// +// // pay for call with wallet_2 +// contract_instance +// .with_account(wallet_2.clone()) +// .methods() +// .initialize_counter(42) +// .with_tx_policies(tx_policies) +// .call() +// .await?; +// +// // confirm there are no changes to wallet, wallet_2 has been charged +// let wallet_balance_second_call = wallet.get_asset_balance(&Default::default()).await?; +// let wallet_2_balance = wallet_2.get_asset_balance(&Default::default()).await?; +// assert_eq!(wallet_balance_second_call, wallet_balance); +// assert!(DEFAULT_COIN_AMOUNT > wallet_2_balance); +// +// Ok(()) +// } +// +// async fn setup_output_variable_estimation_test() -> Result<( +// Vec, +// [Identity; 3], +// AssetId, +// Bech32ContractId, +// )> { +// let wallet_config = WalletsConfig::new(Some(3), None, None); +// let wallets = launch_custom_provider_and_get_wallets(wallet_config, None, None).await?; +// +// let contract_id = Contract::load_from( +// "sway/contracts/token_ops/out/release/token_ops.bin", +// LoadConfiguration::default(), +// )? +// .deploy(&wallets[0], TxPolicies::default()) +// .await?; +// +// let mint_asset_id = contract_id.asset_id(&Bits256::zeroed()); +// let addresses = wallets +// .iter() +// .map(|wallet| wallet.address().into()) +// .collect::>() +// .try_into() +// .unwrap(); +// +// Ok((wallets, addresses, mint_asset_id, contract_id)) +// } +// +// #[tokio::test] +// async fn test_output_variable_estimation() -> Result<()> { +// abigen!(Contract( +// name = "MyContract", +// abi = "e2e/sway/contracts/token_ops/out/release/token_ops-abi.json" +// )); +// +// let (wallets, addresses, mint_asset_id, contract_id) = +// setup_output_variable_estimation_test().await?; +// +// let contract_instance = MyContract::new(contract_id, wallets[0].clone()); +// let contract_methods = contract_instance.methods(); +// let amount = 1000; +// +// { +// // Should fail due to lack of output variables +// let response = contract_methods +// .mint_to_addresses(amount, addresses) +// .call() +// .await; +// +// assert!(matches!( +// response, +// Err(Error::Transaction(Reason::Reverted { .. })) +// )); +// } +// +// { +// // Should add 3 output variables automatically +// let _ = contract_methods +// .mint_to_addresses(amount, addresses) +// .with_variable_output_policy(VariableOutputPolicy::EstimateMinimum) +// .call() +// .await?; +// +// for wallet in wallets.iter() { +// let balance = wallet.get_asset_balance(&mint_asset_id).await?; +// assert_eq!(balance, amount); +// } +// } +// +// Ok(()) +// } +// +// #[tokio::test] +// async fn test_output_variable_estimation_multicall() -> Result<()> { +// abigen!(Contract( +// name = "MyContract", +// abi = "e2e/sway/contracts/token_ops/out/release/token_ops-abi.json" +// )); +// +// let (wallets, addresses, mint_asset_id, contract_id) = +// setup_output_variable_estimation_test().await?; +// +// let contract_instance = MyContract::new(contract_id.clone(), wallets[0].clone()); +// let contract_methods = contract_instance.methods(); +// const NUM_OF_CALLS: u64 = 3; +// let amount = 1000; +// let total_amount = amount * NUM_OF_CALLS; +// +// let mut multi_call_handler = CallHandler::new_multi_call(wallets[0].clone()); +// for _ in 0..NUM_OF_CALLS { +// let call_handler = contract_methods.mint_to_addresses(amount, addresses); +// multi_call_handler = multi_call_handler.add_call(call_handler); +// } +// +// wallets[0] +// .force_transfer_to_contract( +// &contract_id, +// total_amount, +// AssetId::zeroed(), +// TxPolicies::default(), +// ) +// .await +// .unwrap(); +// +// let base_layer_address = Bits256([1u8; 32]); +// let call_handler = contract_methods.send_message(base_layer_address, amount); +// multi_call_handler = multi_call_handler.add_call(call_handler); +// +// let _ = multi_call_handler +// .with_variable_output_policy(VariableOutputPolicy::EstimateMinimum) +// .call::<((), (), ())>() +// .await?; +// +// for wallet in wallets.iter() { +// let balance = wallet.get_asset_balance(&mint_asset_id).await?; +// assert_eq!(balance, 3 * amount); +// } +// +// Ok(()) +// } +// +// #[tokio::test] +// async fn test_contract_instance_get_balances() -> Result<()> { +// let mut wallet = WalletUnlocked::new_random(None); +// let (coins, asset_ids) = setup_multiple_assets_coins(wallet.address(), 2, 4, 8); +// +// let random_asset_id = &asset_ids[1]; +// let provider = setup_test_provider(coins.clone(), vec![], None, None).await?; +// wallet.set_provider(provider.clone()); +// +// setup_program_test!( +// Abigen(Contract( +// name = "TestContract", +// project = "e2e/sway/contracts/contract_test" +// )), +// Deploy( +// name = "contract_instance", +// contract = "TestContract", +// wallet = "wallet" +// ), +// ); +// let contract_id = contract_instance.contract_id(); +// +// // Check the current balance of the contract with id 'contract_id' +// let contract_balances = contract_instance.get_balances().await?; +// assert!(contract_balances.is_empty()); +// +// // Transfer an amount to the contract +// let amount = 8; +// wallet +// .force_transfer_to_contract(contract_id, amount, *random_asset_id, TxPolicies::default()) +// .await?; +// +// // Check that the contract now has 1 coin +// let contract_balances = contract_instance.get_balances().await?; +// assert_eq!(contract_balances.len(), 1); +// +// let random_asset_balance = contract_balances.get(random_asset_id).unwrap(); +// assert_eq!(*random_asset_balance, amount); +// +// Ok(()) +// } +// +// #[tokio::test] +// async fn contract_call_futures_implement_send() -> Result<()> { +// use std::future::Future; +// +// fn tokio_spawn_imitation(_: T) +// where +// T: Future + Send + 'static, +// { +// } +// +// setup_program_test!( +// Wallets("wallet"), +// Abigen(Contract( +// name = "TestContract", +// project = "e2e/sway/contracts/contract_test" +// )), +// Deploy( +// name = "contract_instance", +// contract = "TestContract", +// wallet = "wallet" +// ), +// ); +// +// tokio_spawn_imitation(async move { +// contract_instance +// .methods() +// .initialize_counter(42) +// .call() +// .await +// .unwrap(); +// }); +// Ok(()) +// } +// +// #[tokio::test] +// async fn test_contract_set_estimation() -> Result<()> { +// setup_program_test!( +// Wallets("wallet"), +// Abigen( +// Contract( +// name = "LibContract", +// project = "e2e/sway/contracts/lib_contract" +// ), +// Contract( +// name = "LibContractCaller", +// project = "e2e/sway/contracts/lib_contract_caller" +// ), +// ), +// Deploy( +// name = "lib_contract_instance", +// contract = "LibContract", +// wallet = "wallet" +// ), +// Deploy( +// name = "contract_caller_instance", +// contract = "LibContractCaller", +// wallet = "wallet" +// ), +// ); +// let lib_contract_id = lib_contract_instance.contract_id(); +// +// let res = lib_contract_instance.methods().increment(42).call().await?; +// assert_eq!(43, res.value); +// +// { +// // Should fail due to missing external contracts +// let res = contract_caller_instance +// .methods() +// .increment_from_contract(lib_contract_id, 42) +// .call() +// .await; +// +// assert!(matches!( +// res, +// Err(Error::Transaction(Reason::Reverted { .. })) +// )); +// } +// +// let res = contract_caller_instance +// .methods() +// .increment_from_contract(lib_contract_id, 42) +// .determine_missing_contracts(None) +// .await? +// .call() +// .await?; +// +// assert_eq!(43, res.value); +// Ok(()) +// } +// +// #[tokio::test] +// async fn test_output_variable_contract_id_estimation_multicall() -> Result<()> { +// setup_program_test!( +// Wallets("wallet"), +// Abigen( +// Contract( +// name = "LibContract", +// project = "e2e/sway/contracts/lib_contract" +// ), +// Contract( +// name = "LibContractCaller", +// project = "e2e/sway/contracts/lib_contract_caller" +// ), +// Contract( +// name = "TestContract", +// project = "e2e/sway/contracts/contract_test" +// ), +// ), +// Deploy( +// name = "lib_contract_instance", +// contract = "LibContract", +// wallet = "wallet" +// ), +// Deploy( +// name = "contract_caller_instance", +// contract = "LibContractCaller", +// wallet = "wallet" +// ), +// Deploy( +// name = "contract_test_instance", +// contract = "TestContract", +// wallet = "wallet" +// ), +// ); +// +// let lib_contract_id = lib_contract_instance.contract_id(); +// +// let contract_methods = contract_caller_instance.methods(); +// +// let mut multi_call_handler = +// CallHandler::new_multi_call(wallet.clone()).with_tx_policies(Default::default()); +// +// for _ in 0..3 { +// let call_handler = contract_methods.increment_from_contract(lib_contract_id, 42); +// multi_call_handler = multi_call_handler.add_call(call_handler); +// } +// +// // add call that does not need ContractId +// let contract_methods = contract_test_instance.methods(); +// let call_handler = contract_methods.get(5, 6); +// +// multi_call_handler = multi_call_handler.add_call(call_handler); +// +// let call_response = multi_call_handler +// .determine_missing_contracts(None) +// .await? +// .call::<(u64, u64, u64, u64)>() +// .await?; +// +// assert_eq!(call_response.value, (43, 43, 43, 11)); +// +// Ok(()) +// } +// +// #[tokio::test] +// async fn test_contract_call_with_non_default_max_input() -> Result<()> { +// use fuels::{ +// tx::{ConsensusParameters, TxParameters}, +// types::coin::Coin, +// }; +// +// let mut consensus_parameters = ConsensusParameters::default(); +// let tx_params = TxParameters::default() +// .with_max_inputs(123) +// .with_max_size(1_000_000); +// consensus_parameters.set_tx_params(tx_params); +// let contract_params = ContractParameters::default().with_contract_max_size(1_000_000); +// consensus_parameters.set_contract_params(contract_params); +// +// let mut wallet = WalletUnlocked::new_random(None); +// +// let coins: Vec = setup_single_asset_coins( +// wallet.address(), +// Default::default(), +// DEFAULT_NUM_COINS, +// DEFAULT_COIN_AMOUNT, +// ); +// let chain_config = ChainConfig { +// consensus_parameters: consensus_parameters.clone(), +// ..ChainConfig::default() +// }; +// +// let provider = setup_test_provider(coins, vec![], None, Some(chain_config)).await?; +// wallet.set_provider(provider.clone()); +// assert_eq!(consensus_parameters, *provider.consensus_parameters()); +// +// setup_program_test!( +// Abigen(Contract( +// name = "TestContract", +// project = "e2e/sway/contracts/contract_test" +// )), +// Deploy( +// name = "contract_instance", +// contract = "TestContract", +// wallet = "wallet" +// ), +// ); +// +// let response = contract_instance.methods().get(5, 6).call().await?; +// +// assert_eq!(response.value, 11); +// +// Ok(()) +// } +// +// #[tokio::test] +// async fn test_add_custom_assets() -> Result<()> { +// let initial_amount = 100_000; +// let asset_base = AssetConfig { +// id: AssetId::zeroed(), +// num_coins: 1, +// coin_amount: initial_amount, +// }; +// +// let asset_id_1 = AssetId::from([3u8; 32]); +// let asset_1 = AssetConfig { +// id: asset_id_1, +// num_coins: 1, +// coin_amount: initial_amount, +// }; +// +// let asset_id_2 = AssetId::from([1u8; 32]); +// let asset_2 = AssetConfig { +// id: asset_id_2, +// num_coins: 1, +// coin_amount: initial_amount, +// }; +// +// let assets = vec![asset_base, asset_1, asset_2]; +// +// let num_wallets = 2; +// let wallet_config = WalletsConfig::new_multiple_assets(num_wallets, assets); +// let mut wallets = launch_custom_provider_and_get_wallets(wallet_config, None, None).await?; +// let wallet_1 = wallets.pop().unwrap(); +// let wallet_2 = wallets.pop().unwrap(); +// +// setup_program_test!( +// Abigen(Contract( +// name = "MyContract", +// project = "e2e/sway/contracts/contract_test" +// )), +// Deploy( +// name = "contract_instance", +// contract = "MyContract", +// wallet = "wallet_1" +// ), +// ); +// +// let amount_1 = 5000; +// let amount_2 = 3000; +// let response = contract_instance +// .methods() +// .get(5, 6) +// .add_custom_asset(asset_id_1, amount_1, Some(wallet_2.address().clone())) +// .add_custom_asset(asset_id_2, amount_2, Some(wallet_2.address().clone())) +// .call() +// .await?; +// +// assert_eq!(response.value, 11); +// +// let balance_asset_1 = wallet_1.get_asset_balance(&asset_id_1).await?; +// let balance_asset_2 = wallet_1.get_asset_balance(&asset_id_2).await?; +// assert_eq!(balance_asset_1, initial_amount - amount_1); +// assert_eq!(balance_asset_2, initial_amount - amount_2); +// +// let balance_asset_1 = wallet_2.get_asset_balance(&asset_id_1).await?; +// let balance_asset_2 = wallet_2.get_asset_balance(&asset_id_2).await?; +// assert_eq!(balance_asset_1, initial_amount + amount_1); +// assert_eq!(balance_asset_2, initial_amount + amount_2); +// +// Ok(()) +// } +// +// #[tokio::test] +// async fn contract_load_error_messages() { +// { +// let binary_path = "sway/contracts/contract_test/out/release/no_file_on_path.bin"; +// let expected_error = format!("io: file \"{binary_path}\" does not exist"); +// +// let error = Contract::load_from(binary_path, LoadConfiguration::default()) +// .expect_err("should have failed"); +// +// assert_eq!(error.to_string(), expected_error); +// } +// { +// let binary_path = "sway/contracts/contract_test/out/release/contract_test-abi.json"; +// let expected_error = format!("expected \"{binary_path}\" to have '.bin' extension"); +// +// let error = Contract::load_from(binary_path, LoadConfiguration::default()) +// .expect_err("should have failed"); +// +// assert_eq!(error.to_string(), expected_error); +// } +// } +// +// #[tokio::test] +// async fn test_payable_annotation() -> Result<()> { +// setup_program_test!( +// Wallets("wallet"), +// Abigen(Contract( +// name = "TestContract", +// project = "e2e/sway/contracts/payable_annotation" +// )), +// Deploy( +// name = "contract_instance", +// contract = "TestContract", +// wallet = "wallet" +// ), +// ); +// +// let contract_methods = contract_instance.methods(); +// +// let response = contract_methods +// .payable() +// .call_params( +// CallParameters::default() +// .with_amount(100) +// .with_gas_forwarded(20_000), +// )? +// .call() +// .await?; +// +// assert_eq!(response.value, 42); +// +// // ANCHOR: non_payable_params +// let err = contract_methods +// .non_payable() +// .call_params(CallParameters::default().with_amount(100)) +// .expect_err("should return error"); +// +// assert!(matches!(err, Error::Other(s) if s.contains("assets forwarded to non-payable method"))); +// // ANCHOR_END: non_payable_params +// +// let response = contract_methods +// .non_payable() +// .call_params(CallParameters::default().with_gas_forwarded(20_000))? +// .call() +// .await?; +// +// assert_eq!(response.value, 42); +// +// Ok(()) +// } +// +// #[tokio::test] +// async fn multi_call_from_calls_with_different_account_types() -> Result<()> { +// use fuels::prelude::*; +// +// abigen!(Contract( +// name = "MyContract", +// abi = "e2e/sway/contracts/contract_test/out/release/contract_test-abi.json" +// )); +// +// let wallet = WalletUnlocked::new_random(None); +// let predicate = Predicate::from_code(vec![]); +// +// let contract_methods_wallet = +// MyContract::new(Bech32ContractId::default(), wallet.clone()).methods(); +// let contract_methods_predicate = +// MyContract::new(Bech32ContractId::default(), predicate).methods(); +// +// let call_handler_1 = contract_methods_wallet.initialize_counter(42); +// let call_handler_2 = contract_methods_predicate.get_array([42; 2]); +// +// let _multi_call_handler = CallHandler::new_multi_call(wallet) +// .add_call(call_handler_1) +// .add_call(call_handler_2); +// +// Ok(()) +// } +// +// #[tokio::test] +// async fn low_level_call() -> Result<()> { +// use fuels::types::SizedAsciiString; +// +// setup_program_test!( +// Wallets("wallet"), +// Abigen( +// Contract( +// name = "MyCallerContract", +// project = "e2e/sway/contracts/low_level_caller" +// ), +// Contract( +// name = "MyTargetContract", +// project = "e2e/sway/contracts/contract_test" +// ), +// ), +// Deploy( +// name = "caller_contract_instance", +// contract = "MyCallerContract", +// wallet = "wallet" +// ), +// Deploy( +// name = "target_contract_instance", +// contract = "MyTargetContract", +// wallet = "wallet" +// ), +// ); +// +// let function_selector = encode_fn_selector("initialize_counter"); +// let call_data = calldata!(42u64)?; +// +// caller_contract_instance +// .methods() +// .call_low_level_call( +// target_contract_instance.id(), +// Bytes(function_selector), +// Bytes(call_data), +// ) +// .determine_missing_contracts(None) +// .await? +// .call() +// .await?; +// +// let response = target_contract_instance +// .methods() +// .get_counter() +// .call() +// .await?; +// assert_eq!(response.value, 42); +// +// let function_selector = encode_fn_selector("set_value_multiple_complex"); +// let call_data = calldata!( +// MyStruct { +// a: true, +// b: [1, 2, 3], +// }, +// SizedAsciiString::<4>::try_from("fuel")? +// )?; +// +// caller_contract_instance +// .methods() +// .call_low_level_call( +// target_contract_instance.id(), +// Bytes(function_selector), +// Bytes(call_data), +// ) +// .determine_missing_contracts(None) +// .await? +// .call() +// .await?; +// +// let result_uint = target_contract_instance +// .methods() +// .get_counter() +// .call() +// .await +// .unwrap() +// .value; +// +// let result_bool = target_contract_instance +// .methods() +// .get_bool_value() +// .call() +// .await +// .unwrap() +// .value; +// +// let result_str = target_contract_instance +// .methods() +// .get_str_value() +// .call() +// .await +// .unwrap() +// .value; +// +// assert_eq!(result_uint, 42); +// assert!(result_bool); +// assert_eq!(result_str, "fuel"); +// +// Ok(()) +// } +// +// #[cfg(any(not(feature = "fuel-core-lib"), feature = "rocksdb"))] +// #[test] +// fn db_rocksdb() { +// use std::{fs, str::FromStr}; +// +// use fuels::{ +// accounts::wallet::WalletUnlocked, +// client::{PageDirection, PaginationRequest}, +// crypto::SecretKey, +// prelude::{setup_test_provider, DbType, Error, ViewOnlyAccount, DEFAULT_COIN_AMOUNT}, +// }; +// +// let temp_dir = tempfile::tempdir().expect("failed to make tempdir"); +// let temp_dir_name = temp_dir +// .path() +// .file_name() +// .expect("failed to get file name") +// .to_string_lossy() +// .to_string(); +// let temp_database_path = temp_dir.path().join("db"); +// +// tokio::runtime::Runtime::new() +// .expect("tokio runtime failed") +// .block_on(async { +// let _ = temp_dir; +// let wallet = WalletUnlocked::new_from_private_key( +// SecretKey::from_str( +// "0x4433d156e8c53bf5b50af07aa95a29436f29a94e0ccc5d58df8e57bdc8583c32", +// )?, +// None, +// ); +// +// const NUMBER_OF_ASSETS: u64 = 2; +// let node_config = NodeConfig { +// database_type: DbType::RocksDb(Some(temp_database_path.clone())), +// ..NodeConfig::default() +// }; +// +// let chain_config = ChainConfig { +// chain_name: temp_dir_name.clone(), +// consensus_parameters: Default::default(), +// ..ChainConfig::local_testnet() +// }; +// +// let (coins, _) = setup_multiple_assets_coins( +// wallet.address(), +// NUMBER_OF_ASSETS, +// DEFAULT_NUM_COINS, +// DEFAULT_COIN_AMOUNT, +// ); +// +// let provider = +// setup_test_provider(coins.clone(), vec![], Some(node_config), Some(chain_config)) +// .await?; +// +// provider.produce_blocks(2, None).await?; +// +// Ok::<(), Error>(()) +// }) +// .unwrap(); +// +// // The runtime needs to be terminated because the node can currently only be killed when the runtime itself shuts down. +// +// tokio::runtime::Runtime::new() +// .expect("tokio runtime failed") +// .block_on(async { +// let node_config = NodeConfig { +// database_type: DbType::RocksDb(Some(temp_database_path.clone())), +// ..NodeConfig::default() +// }; +// +// let provider = setup_test_provider(vec![], vec![], Some(node_config), None).await?; +// // the same wallet that was used when rocksdb was built. When we connect it to the provider, we expect it to have the same amount of assets +// let mut wallet = WalletUnlocked::new_from_private_key( +// SecretKey::from_str( +// "0x4433d156e8c53bf5b50af07aa95a29436f29a94e0ccc5d58df8e57bdc8583c32", +// )?, +// None, +// ); +// +// wallet.set_provider(provider.clone()); +// +// let blocks = provider +// .get_blocks(PaginationRequest { +// cursor: None, +// results: 10, +// direction: PageDirection::Forward, +// }) +// .await? +// .results; +// +// assert_eq!(blocks.len(), 3); +// assert_eq!( +// *wallet.get_balances().await?.iter().next().unwrap().1, +// DEFAULT_COIN_AMOUNT +// ); +// assert_eq!( +// *wallet.get_balances().await?.iter().next().unwrap().1, +// DEFAULT_COIN_AMOUNT +// ); +// assert_eq!(wallet.get_balances().await?.len(), 2); +// +// fs::remove_dir_all( +// temp_database_path +// .parent() +// .expect("db parent folder does not exist"), +// )?; +// +// Ok::<(), Error>(()) +// }) +// .unwrap(); +// } +// +// #[tokio::test] +// async fn can_configure_decoding_of_contract_return() -> Result<()> { +// setup_program_test!( +// Wallets("wallet"), +// Abigen(Contract( +// name = "MyContract", +// project = "e2e/sway/contracts/needs_custom_decoder" +// ),), +// Deploy( +// contract = "MyContract", +// name = "contract_instance", +// wallet = "wallet" +// ) +// ); +// +// let methods = contract_instance.methods(); +// { +// // Single call: Will not work if max_tokens not big enough +// methods.i_return_a_1k_el_array().with_decoder_config(DecoderConfig{max_tokens: 100, ..Default::default()}).call().await.expect_err( +// "should have failed because there are more tokens than what is supported by default", +// ); +// } +// { +// // Single call: Works when limit is bumped +// let result = methods +// .i_return_a_1k_el_array() +// .with_decoder_config(DecoderConfig { +// max_tokens: 1001, +// ..Default::default() +// }) +// .call() +// .await? +// .value; +// +// assert_eq!(result, [0; 1000]); +// } +// { +// // Multi call: Will not work if max_tokens not big enough +// CallHandler::new_multi_call(wallet.clone()) +// .add_call(methods.i_return_a_1k_el_array()) +// .with_decoder_config(DecoderConfig { max_tokens: 100, ..Default::default() }) +// .call::<([u8; 1000],)>().await.expect_err( +// "should have failed because there are more tokens than what is supported by default", +// ); +// } +// { +// // Multi call: Works when configured +// CallHandler::new_multi_call(wallet.clone()) +// .add_call(methods.i_return_a_1k_el_array()) +// .with_decoder_config(DecoderConfig { +// max_tokens: 1001, +// ..Default::default() +// }) +// .call::<([u8; 1000],)>() +// .await +// .unwrap(); +// } +// +// Ok(()) +// } +// +// #[tokio::test] +// async fn test_contract_submit_and_response() -> Result<()> { +// setup_program_test!( +// Wallets("wallet"), +// Abigen(Contract( +// name = "TestContract", +// project = "e2e/sway/contracts/contract_test" +// )), +// Deploy( +// name = "contract_instance", +// contract = "TestContract", +// wallet = "wallet" +// ), +// ); +// +// let contract_methods = contract_instance.methods(); +// +// let submitted_tx = contract_methods.get(1, 2).submit().await?; +// let value = submitted_tx.response().await?.value; +// +// assert_eq!(value, 3); +// +// let contract_methods = contract_instance.methods(); +// let call_handler_1 = contract_methods.get_single(7); +// let call_handler_2 = contract_methods.get_single(42); +// +// let multi_call_handler = CallHandler::new_multi_call(wallet.clone()) +// .add_call(call_handler_1) +// .add_call(call_handler_2); +// +// let handle = multi_call_handler.submit().await?; +// let (val_1, val_2): (u64, u64) = handle.response().await?.value; +// +// assert_eq!(val_1, 7); +// assert_eq!(val_2, 42); +// +// Ok(()) +// } +// +// #[tokio::test] +// async fn test_heap_type_multicall() -> Result<()> { +// setup_program_test!( +// Wallets("wallet"), +// Abigen( +// Contract( +// name = "TestContract", +// project = "e2e/sway/contracts/contract_test" +// ), +// Contract( +// name = "VectorOutputContract", +// project = "e2e/sway/types/contracts/vector_output" +// ) +// ), +// Deploy( +// name = "contract_instance", +// contract = "VectorOutputContract", +// wallet = "wallet" +// ), +// Deploy( +// name = "contract_instance_2", +// contract = "TestContract", +// wallet = "wallet" +// ), +// ); +// +// { +// let call_handler_1 = contract_instance.methods().u8_in_vec(5); +// let call_handler_2 = contract_instance_2.methods().get_single(7); +// let call_handler_3 = contract_instance.methods().u8_in_vec(3); +// +// let multi_call_handler = CallHandler::new_multi_call(wallet.clone()) +// .add_call(call_handler_1) +// .add_call(call_handler_2) +// .add_call(call_handler_3); +// +// let (val_1, val_2, val_3): (Vec, u64, Vec) = multi_call_handler.call().await?.value; +// +// assert_eq!(val_1, vec![0, 1, 2, 3, 4]); +// assert_eq!(val_2, 7); +// assert_eq!(val_3, vec![0, 1, 2]); +// } +// +// Ok(()) +// } +// +// #[tokio::test] +// async fn heap_types_correctly_offset_in_create_transactions_w_storage_slots() -> Result<()> { +// setup_program_test!( +// Wallets("wallet"), +// Abigen(Predicate( +// name = "MyPredicate", +// project = "e2e/sway/types/predicates/predicate_vector" +// ),), +// ); +// +// let provider = wallet.try_provider()?.clone(); +// let data = MyPredicateEncoder::default().encode_data(18, 24, vec![2, 4, 42])?; +// let predicate = Predicate::load_from( +// "sway/types/predicates/predicate_vector/out/release/predicate_vector.bin", +// )? +// .with_data(data) +// .with_provider(provider); +// +// wallet +// .transfer( +// predicate.address(), +// 10_000, +// AssetId::zeroed(), +// TxPolicies::default(), +// ) +// .await?; +// +// // if the contract is successfully deployed then the predicate was unlocked. This further means +// // the offsets were setup correctly since the predicate uses heap types in its arguments. +// // Storage slots were loaded automatically by default +// Contract::load_from( +// "sway/contracts/storage/out/release/storage.bin", +// LoadConfiguration::default(), +// )? +// .deploy(&predicate, TxPolicies::default()) +// .await?; +// +// Ok(()) +// } +// +// #[tokio::test] +// async fn test_arguments_with_gas_forwarded() -> Result<()> { +// setup_program_test!( +// Wallets("wallet"), +// Abigen( +// Contract( +// name = "TestContract", +// project = "e2e/sway/contracts/contract_test" +// ), +// Contract( +// name = "VectorOutputContract", +// project = "e2e/sway/types/contracts/vectors" +// ) +// ), +// Deploy( +// name = "contract_instance", +// contract = "TestContract", +// wallet = "wallet" +// ), +// Deploy( +// name = "contract_instance_2", +// contract = "VectorOutputContract", +// wallet = "wallet" +// ), +// ); +// +// let x = 128; +// let vec_input = vec![0, 1, 2]; +// { +// let response = contract_instance +// .methods() +// .get_single(x) +// .call_params(CallParameters::default().with_gas_forwarded(4096))? +// .call() +// .await?; +// +// assert_eq!(response.value, x); +// } +// { +// contract_instance_2 +// .methods() +// .u32_vec(vec_input.clone()) +// .call_params(CallParameters::default().with_gas_forwarded(4096))? +// .call() +// .await?; +// } +// { +// let call_handler_1 = contract_instance.methods().get_single(x); +// let call_handler_2 = contract_instance_2.methods().u32_vec(vec_input); +// +// let multi_call_handler = CallHandler::new_multi_call(wallet.clone()) +// .add_call(call_handler_1) +// .add_call(call_handler_2); +// +// let (value, _): (u64, ()) = multi_call_handler.call().await?.value; +// +// assert_eq!(value, x); +// } +// +// Ok(()) +// } +// +// #[tokio::test] +// async fn contract_custom_call_no_signatures_strategy() -> Result<()> { +// setup_program_test!( +// Wallets("wallet"), +// Abigen(Contract( +// name = "TestContract", +// project = "e2e/sway/contracts/contract_test" +// )), +// Deploy( +// name = "contract_instance", +// contract = "TestContract", +// wallet = "wallet" +// ), +// ); +// let provider = wallet.try_provider()?; +// +// let counter = 42; +// let call_handler = contract_instance.methods().initialize_counter(counter); +// +// let mut tb = call_handler.transaction_builder().await?; +// +// let amount = 10; +// let new_base_inputs = wallet +// .get_asset_inputs_for_amount(*provider.base_asset_id(), amount, None) +// .await?; +// tb.inputs_mut().extend(new_base_inputs); +// +// // ANCHOR: tb_no_signatures_strategy +// let mut tx = tb +// .with_build_strategy(ScriptBuildStrategy::NoSignatures) +// .build(provider) +// .await?; +// // ANCHOR: tx_sign_with +// tx.sign_with(&wallet, provider.chain_id()).await?; +// // ANCHOR_END: tx_sign_with +// // ANCHOR_END: tb_no_signatures_strategy +// +// let tx_id = provider.send_transaction(tx).await?; +// let tx_status = provider.tx_status(&tx_id).await?; +// +// let response = call_handler.get_response_from(tx_status)?; +// +// assert_eq!(counter, response.value); +// +// Ok(()) +// } +// +// #[tokio::test] +// async fn contract_encoder_config_is_applied() -> Result<()> { +// setup_program_test!( +// Abigen(Contract( +// name = "TestContract", +// project = "e2e/sway/contracts/contract_test" +// )), +// Wallets("wallet") +// ); +// let contract_id = Contract::load_from( +// "sway/contracts/contract_test/out/release/contract_test.bin", +// LoadConfiguration::default(), +// )? +// .deploy(&wallet, TxPolicies::default()) +// .await?; +// +// let instance = TestContract::new(contract_id.clone(), wallet.clone()); +// +// { +// let _encoding_ok = instance +// .methods() +// .get(0, 1) +// .call() +// .await +// .expect("should not fail as it uses the default encoder config"); +// } +// { +// let encoder_config = EncoderConfig { +// max_tokens: 1, +// ..Default::default() +// }; +// let instance_with_encoder_config = instance.with_encoder_config(encoder_config); +// +// // uses 2 tokens when 1 is the limit +// let encoding_error = instance_with_encoder_config +// .methods() +// .get(0, 1) +// .call() +// .await +// .expect_err("should error"); +// +// assert!(encoding_error.to_string().contains( +// "cannot encode contract call arguments: codec: token limit `1` reached while encoding." +// )); +// +// let encoding_error = instance_with_encoder_config +// .methods() +// .get(0, 1) +// .simulate(Execution::Realistic) +// .await +// .expect_err("should error"); +// +// assert!(encoding_error.to_string().contains( +// "cannot encode contract call arguments: codec: token limit `1` reached while encoding." +// )); +// } +// +// Ok(()) +// } +// +// #[tokio::test] +// async fn test_reentrant_calls() -> Result<()> { +// setup_program_test!( +// Wallets("wallet"), +// Abigen(Contract( +// name = "LibContractCaller", +// project = "e2e/sway/contracts/lib_contract_caller" +// ),), +// Deploy( +// name = "contract_caller_instance", +// contract = "LibContractCaller", +// wallet = "wallet" +// ), +// ); +// +// let contract_id = contract_caller_instance.contract_id(); +// let response = contract_caller_instance +// .methods() +// .re_entrant(contract_id, true) +// .call() +// .await?; +// +// assert_eq!(42, response.value); +// +// Ok(()) +// } +// +// #[tokio::test] +// async fn msg_sender_gas_estimation_issue() { +// // Gas estimation requires an input of the base asset. If absent, a fake input is +// // added. However, if a non-base coin is present and the fake input introduces a +// // second owner, it causes the `msg_sender` sway fn to fail. This leads +// // to a premature failure in gas estimation, risking transaction failure due to +// // a low gas limit. +// let mut wallet = WalletUnlocked::new_random(None); +// +// let (coins, ids) = +// setup_multiple_assets_coins(wallet.address(), 2, DEFAULT_NUM_COINS, DEFAULT_COIN_AMOUNT); +// +// let provider = setup_test_provider(coins, vec![], None, None) +// .await +// .unwrap(); +// wallet.set_provider(provider.clone()); +// +// setup_program_test!( +// Abigen(Contract( +// name = "MyContract", +// project = "e2e/sway/contracts/msg_methods" +// )), +// Deploy( +// contract = "MyContract", +// name = "contract_instance", +// wallet = "wallet" +// ) +// ); +// +// let asset_id = ids[0]; +// +// // The fake coin won't be added if we add a base asset, so let's not do that +// assert!(asset_id != *provider.base_asset_id()); +// let call_params = CallParameters::default() +// .with_amount(100) +// .with_asset_id(asset_id); +// +// contract_instance +// .methods() +// .message_sender() +// .call_params(call_params) +// .unwrap() +// .call() +// .await +// .unwrap(); +// } +// +// #[tokio::test] +// async fn variable_output_estimation_is_optimized() -> Result<()> { +// setup_program_test!( +// Wallets("wallet"), +// Abigen(Contract( +// name = "MyContract", +// project = "e2e/sway/contracts/var_outputs" +// )), +// Deploy( +// contract = "MyContract", +// name = "contract_instance", +// wallet = "wallet" +// ) +// ); +// +// let contract_methods = contract_instance.methods(); +// +// let coins = 252; +// let recipient = Identity::Address(wallet.address().into()); +// let start = Instant::now(); +// let _ = contract_methods +// .mint(coins, recipient) +// .with_variable_output_policy(VariableOutputPolicy::EstimateMinimum) +// .call() +// .await?; +// +// // debug builds are slower (20x for `fuel-core-lib`, 4x for a release-fuel-core-binary) +// // we won't validate in that case so we don't have to maintain two expectations +// if !cfg!(debug_assertions) { +// let elapsed = start.elapsed().as_secs(); +// let limit = 2; +// if elapsed > limit { +// panic!("Estimation took too long ({elapsed}). Limit is {limit}"); +// } +// } +// +// Ok(()) +// } +// +// #[tokio::test] +// async fn simulations_can_be_made_without_coins() -> Result<()> { +// setup_program_test!( +// Wallets("wallet"), +// Abigen(Contract( +// name = "MyContract", +// project = "e2e/sway/contracts/contract_test" +// )), +// Deploy( +// name = "contract_instance", +// contract = "MyContract", +// wallet = "wallet" +// ) +// ); +// let contract_id = contract_instance.contract_id(); +// let provider = wallet.provider().cloned(); +// +// let no_funds_wallet = WalletUnlocked::new_random(provider); +// +// let response = MyContract::new(contract_id, no_funds_wallet.clone()) +// .methods() +// .get(5, 6) +// .simulate(Execution::StateReadOnly) +// .await?; +// +// assert_eq!(response.value, 11); +// +// Ok(()) +// } +// +// #[tokio::test] +// async fn simulations_can_be_made_without_coins_multicall() -> Result<()> { +// setup_program_test!( +// Wallets("wallet"), +// Abigen(Contract( +// name = "MyContract", +// project = "e2e/sway/contracts/contract_test" +// )), +// Deploy( +// name = "contract_instance", +// contract = "MyContract", +// wallet = "wallet" +// ) +// ); +// let contract_id = contract_instance.contract_id(); +// let provider = wallet.provider().cloned(); +// +// let no_funds_wallet = WalletUnlocked::new_random(provider); +// let contract_instance = MyContract::new(contract_id, no_funds_wallet.clone()); +// +// let contract_methods = contract_instance.methods(); +// +// let call_handler_1 = contract_methods.get(1, 2); +// let call_handler_2 = contract_methods.get(3, 4); +// +// let mut multi_call_handler = CallHandler::new_multi_call(no_funds_wallet) +// .add_call(call_handler_1) +// .add_call(call_handler_2); +// +// let value: (u64, u64) = multi_call_handler +// .simulate(Execution::StateReadOnly) +// .await? +// .value; +// +// assert_eq!(value, (3, 7)); +// +// Ok(()) +// } +// +// #[tokio::test] +// async fn contract_call_with_non_zero_base_asset_id_and_tip() -> Result<()> { +// use fuels::{prelude::*, tx::ConsensusParameters}; +// +// abigen!(Contract( +// name = "MyContract", +// abi = "e2e/sway/contracts/contract_test/out/release/contract_test-abi.json" +// )); +// +// let asset_id = AssetId::new([1; 32]); +// +// let mut consensus_parameters = ConsensusParameters::default(); +// consensus_parameters.set_base_asset_id(asset_id); +// +// let config = ChainConfig { +// consensus_parameters, +// ..Default::default() +// }; +// +// let asset_base = AssetConfig { +// id: asset_id, +// num_coins: 1, +// coin_amount: 10_000, +// }; +// +// let wallet_config = WalletsConfig::new_multiple_assets(1, vec![asset_base]); +// let wallets = launch_custom_provider_and_get_wallets(wallet_config, None, Some(config)).await?; +// let wallet = wallets.first().expect("has wallet"); +// +// let contract_id = Contract::load_from( +// "sway/contracts/contract_test/out/release/contract_test.bin", +// LoadConfiguration::default(), +// )? +// .deploy(wallet, TxPolicies::default()) +// .await?; +// +// let contract_instance = MyContract::new(contract_id, wallet.clone()); +// +// let response = contract_instance +// .methods() +// .initialize_counter(42) +// .with_tx_policies(TxPolicies::default().with_tip(10)) +// .call() +// .await?; +// +// assert_eq!(42, response.value); +// +// Ok(()) +// } +// +// #[tokio::test] +// async fn max_fee_estimation_respects_tolerance() -> Result<()> { +// use fuels::prelude::*; +// +// let mut call_wallet = WalletUnlocked::new_random(None); +// +// let call_coins = setup_single_asset_coins(call_wallet.address(), AssetId::BASE, 1000, 1); +// +// let mut deploy_wallet = WalletUnlocked::new_random(None); +// let deploy_coins = +// setup_single_asset_coins(deploy_wallet.address(), AssetId::BASE, 1, 1_000_000); +// +// let provider = +// setup_test_provider([call_coins, deploy_coins].concat(), vec![], None, None).await?; +// +// call_wallet.set_provider(provider.clone()); +// deploy_wallet.set_provider(provider.clone()); +// +// setup_program_test!( +// Abigen(Contract( +// name = "MyContract", +// project = "e2e/sway/contracts/contract_test" +// )), +// Deploy( +// name = "contract_instance", +// wallet = "deploy_wallet", +// contract = "MyContract" +// ) +// ); +// let contract_instance = contract_instance.with_account(call_wallet.clone()); +// +// let max_fee_from_tx = |tolerance: f32| { +// let contract_instance = contract_instance.clone(); +// let provider = provider.clone(); +// async move { +// let builder = contract_instance +// .methods() +// .initialize_counter(42) +// .transaction_builder() +// .await +// .unwrap(); +// +// assert_eq!( +// builder.max_fee_estimation_tolerance, 0.05, +// "Expected pre-set tolerance of 0.05" +// ); +// +// builder +// .with_max_fee_estimation_tolerance(tolerance) +// .build(&provider) +// .await +// .unwrap() +// .max_fee() +// .unwrap() +// } +// }; +// +// let max_fee_from_builder = |tolerance: f32| { +// let contract_instance = contract_instance.clone(); +// let provider = provider.clone(); +// async move { +// contract_instance +// .methods() +// .initialize_counter(42) +// .transaction_builder() +// .await +// .unwrap() +// .with_max_fee_estimation_tolerance(tolerance) +// .estimate_max_fee(&provider) +// .await +// .unwrap() +// } +// }; +// +// let base_amount_in_inputs = |tolerance: f32| { +// let contract_instance = contract_instance.clone(); +// let call_wallet = &call_wallet; +// async move { +// let mut tb = contract_instance +// .methods() +// .initialize_counter(42) +// .transaction_builder() +// .await +// .unwrap() +// .with_max_fee_estimation_tolerance(tolerance); +// +// call_wallet.adjust_for_fee(&mut tb, 0).await.unwrap(); +// tb.inputs +// .iter() +// .filter_map(|input: &Input| match input { +// Input::ResourceSigned { resource } +// if resource.coin_asset_id().unwrap() == AssetId::BASE => +// { +// Some(resource.amount()) +// } +// _ => None, +// }) +// .sum::() +// } +// }; +// +// let no_increase_max_fee = max_fee_from_tx(0.0).await; +// let increased_max_fee = max_fee_from_tx(2.00).await; +// +// assert_eq!( +// increased_max_fee as f64 / no_increase_max_fee as f64, +// 1.00 + 2.00 +// ); +// +// let no_increase_max_fee = max_fee_from_builder(0.0).await; +// let increased_max_fee = max_fee_from_builder(2.00).await; +// assert_eq!( +// increased_max_fee as f64 / no_increase_max_fee as f64, +// 1.00 + 2.00 +// ); +// +// let normal_base_asset = base_amount_in_inputs(0.0).await; +// let more_base_asset_due_to_bigger_tolerance = base_amount_in_inputs(2.00).await; +// assert_eq!( +// more_base_asset_due_to_bigger_tolerance as f64 / normal_base_asset as f64, +// 1.00 + 2.00 +// ); +// +// Ok(()) +// } +// +// #[tokio::test] +// async fn blob_contract_deployment() -> Result<()> { +// abigen!(Contract( +// name = "MyContract", +// abi = "e2e/sway/contracts/huge_contract/out/release/huge_contract-abi.json" +// )); +// +// let contract_binary = "sway/contracts/huge_contract/out/release/huge_contract.bin"; +// let contract_size = std::fs::metadata(contract_binary) +// .expect("contract file not found") +// .len(); +// +// assert!( +// contract_size > 150_000, +// "the testnet size limit was around 100kB, we want a contract bigger than that to reflect prod (current: {contract_size}B)" +// ); +// +// let wallets = +// launch_custom_provider_and_get_wallets(WalletsConfig::new(Some(2), None, None), None, None) +// .await?; +// +// let provider = wallets[0].provider().unwrap().clone(); +// +// let consensus_parameters = provider.consensus_parameters(); +// +// let contract_max_size = consensus_parameters.contract_params().contract_max_size(); +// assert!( +// contract_size > contract_max_size, +// "this test should ideally be run with a contract bigger than the max contract size ({contract_max_size}B) so that we know deployment couldn't have happened without blobs" +// ); +// +// let contract = Contract::load_from(contract_binary, LoadConfiguration::default())?; +// +// let deploy_and_test = |wallet: WalletUnlocked, blob_size: BlobSizePolicy| { +// let contract = &contract; +// async move { +// let contract_id = contract +// .clone() +// .deploy_as_loader(&wallet, TxPolicies::default(), blob_size) +// .await?; +// +// let contract_instance = MyContract::new(contract_id, wallet.clone()); +// +// let response = contract_instance.methods().something().call().await?.value; +// +// assert_eq!(response, 1001); +// Result::Ok(()) +// } +// }; +// +// { +// // We're mostly limited by the payload size of the fuel-core endpoints +// let percentage_of_theoretical_max = 0.95; +// +// deploy_and_test( +// wallets[0].clone(), +// BlobSizePolicy::Estimate { +// percentage_of_theoretical_max, +// }, +// ) +// .await?; +// } +// +// { +// deploy_and_test(wallets[1].clone(), BlobSizePolicy::AtMost { words: 6_000 }).await?; +// } +// +// Ok(()) +// } -#[tokio::test] -async fn test_multiple_args() -> Result<()> { - setup_program_test!( - Wallets("wallet"), - Abigen(Contract( - name = "TestContract", - project = "e2e/sway/contracts/contract_test" - )), - Deploy( - name = "contract_instance", - contract = "TestContract", - wallet = "wallet" - ), - ); - - // Make sure we can call the contract with multiple arguments - let contract_methods = contract_instance.methods(); - let response = contract_methods.get(5, 6).call().await?; - - assert_eq!(response.value, 11); - - let t = MyType { x: 5, y: 6 }; - let response = contract_methods.get_alt(t.clone()).call().await?; - assert_eq!(response.value, t); +#[test] +fn blob_size_must_be_greater_than_zero() { + // given + let contract = Contract::regular(vec![0x00], Salt::zeroed(), vec![]); - let response = contract_methods.get_single(5).call().await?; - assert_eq!(response.value, 5); - Ok(()) -} + // when + let err = contract + .convert_to_loader(0) + .expect_err("should have failed because blob size is 0"); -#[tokio::test] -async fn test_contract_calling_contract() -> Result<()> { - // Tests a contract call that calls another contract (FooCaller calls FooContract underneath) - setup_program_test!( - Wallets("wallet"), - Abigen( - Contract( - name = "LibContract", - project = "e2e/sway/contracts/lib_contract" - ), - Contract( - name = "LibContractCaller", - project = "e2e/sway/contracts/lib_contract_caller" - ), - ), - Deploy( - name = "lib_contract_instance", - contract = "LibContract", - wallet = "wallet" - ), - Deploy( - name = "lib_contract_instance2", - contract = "LibContract", - wallet = "wallet" - ), - Deploy( - name = "contract_caller_instance", - contract = "LibContractCaller", - wallet = "wallet" - ), + // then + assert_eq!( + err.to_string(), + "blob size must be greater than 0".to_string() ); - let lib_contract_id = lib_contract_instance.contract_id(); - let lib_contract_id2 = lib_contract_instance2.contract_id(); - - // Call the contract directly. It increments the given value. - let response = lib_contract_instance.methods().increment(42).call().await?; - - assert_eq!(43, response.value); - - let response = contract_caller_instance - .methods() - .increment_from_contracts(lib_contract_id, lib_contract_id2, 42) - // Note that the two lib_contract_instances have different types - .with_contracts(&[&lib_contract_instance, &lib_contract_instance2]) - .call() - .await?; - - assert_eq!(86, response.value); - - // ANCHOR: external_contract - let response = contract_caller_instance - .methods() - .increment_from_contract(lib_contract_id, 42) - .with_contracts(&[&lib_contract_instance]) - .call() - .await?; - // ANCHOR_END: external_contract - - assert_eq!(43, response.value); - - // ANCHOR: external_contract_ids - let response = contract_caller_instance - .methods() - .increment_from_contract(lib_contract_id, 42) - .with_contract_ids(&[lib_contract_id.clone()]) - .call() - .await?; - // ANCHOR_END: external_contract_ids - - assert_eq!(43, response.value); - Ok(()) } -#[tokio::test] -async fn test_reverting_transaction() -> Result<()> { - setup_program_test!( - Wallets("wallet"), - Abigen(Contract( - name = "RevertContract", - project = "e2e/sway/contracts/revert_transaction_error" - )), - Deploy( - name = "contract_instance", - contract = "RevertContract", - wallet = "wallet" - ), - ); - - let response = contract_instance - .methods() - .make_transaction_fail(true) - .call() - .await; - - assert!(matches!( - response, - Err(Error::Transaction(Reason::Reverted { revert_id, .. })) if revert_id == 128 - )); +#[test] +fn contract_with_no_code_cannot_be_turned_into_a_loader() { + // given + let contract = Contract::regular(vec![], Salt::zeroed(), vec![]); - Ok(()) -} + // when + let err = contract + .convert_to_loader(100) + .expect_err("should have failed because there is no code"); -#[tokio::test] -async fn test_multiple_read_calls() -> Result<()> { - setup_program_test!( - Wallets("wallet"), - Abigen(Contract( - name = "MultiReadContract", - project = "e2e/sway/contracts/multiple_read_calls" - )), - Deploy( - name = "contract_instance", - contract = "MultiReadContract", - wallet = "wallet" - ), + // then + assert_eq!( + err.to_string(), + "must provide at least one blob".to_string() ); - - let contract_methods = contract_instance.methods(); - contract_methods.store(42).call().await?; - - // Use "simulate" because the methods don't actually - // run a transaction, but just a dry-run - let stored = contract_methods - .read() - .simulate(Execution::StateReadOnly) - .await?; - - assert_eq!(stored.value, 42); - - let stored = contract_methods - .read() - .simulate(Execution::StateReadOnly) - .await?; - - assert_eq!(stored.value, 42); - Ok(()) } -#[tokio::test] -async fn test_multi_call_beginner() -> Result<()> { - setup_program_test!( - Wallets("wallet"), - Abigen(Contract( - name = "TestContract", - project = "e2e/sway/contracts/contract_test" - )), - Deploy( - name = "contract_instance", - contract = "TestContract", - wallet = "wallet" - ), - ); - - let contract_methods = contract_instance.methods(); - let call_handler_1 = contract_methods.get_single(7); - let call_handler_2 = contract_methods.get_single(42); - - let multi_call_handler = CallHandler::new_multi_call(wallet.clone()) - .add_call(call_handler_1) - .add_call(call_handler_2); - - let (val_1, val_2): (u64, u64) = multi_call_handler.call().await?.value; - - assert_eq!(val_1, 7); - assert_eq!(val_2, 42); +#[test] +fn loader_needs_at_least_one_blob() { + // given + let no_blobs = vec![]; - Ok(()) -} + // when + let err = Contract::loader_for_blobs(no_blobs, Salt::default(), vec![]) + .expect_err("should have failed because there are no blobs"); -#[tokio::test] -async fn test_multi_call_pro() -> Result<()> { - setup_program_test!( - Wallets("wallet"), - Abigen(Contract( - name = "TestContract", - project = "e2e/sway/contracts/contract_test" - )), - Deploy( - name = "contract_instance", - contract = "TestContract", - wallet = "wallet" - ), + // then + assert_eq!( + err.to_string(), + "must provide at least one blob".to_string() ); - - let my_type_1 = MyType { x: 1, y: 2 }; - let my_type_2 = MyType { x: 3, y: 4 }; - - let contract_methods = contract_instance.methods(); - let call_handler_1 = contract_methods.get_single(5); - let call_handler_2 = contract_methods.get_single(6); - let call_handler_3 = contract_methods.get_alt(my_type_1.clone()); - let call_handler_4 = contract_methods.get_alt(my_type_2.clone()); - let call_handler_5 = contract_methods.get_array([7; 2]); - let call_handler_6 = contract_methods.get_array([42; 2]); - - let multi_call_handler = CallHandler::new_multi_call(wallet.clone()) - .add_call(call_handler_1) - .add_call(call_handler_2) - .add_call(call_handler_3) - .add_call(call_handler_4) - .add_call(call_handler_5) - .add_call(call_handler_6); - - let (val_1, val_2, type_1, type_2, array_1, array_2): ( - u64, - u64, - MyType, - MyType, - [u64; 2], - [u64; 2], - ) = multi_call_handler.call().await?.value; - - assert_eq!(val_1, 5); - assert_eq!(val_2, 6); - assert_eq!(type_1, my_type_1); - assert_eq!(type_2, my_type_2); - assert_eq!(array_1, [7; 2]); - assert_eq!(array_2, [42; 2]); - - Ok(()) } -#[tokio::test] -async fn test_contract_call_fee_estimation() -> Result<()> { - setup_program_test!( - Wallets("wallet"), - Abigen(Contract( - name = "TestContract", - project = "e2e/sway/contracts/contract_test" - )), - Deploy( - name = "contract_instance", - contract = "TestContract", - wallet = "wallet" - ), - ); - - let gas_limit = 800; - let tolerance = Some(0.2); - let block_horizon = Some(1); - let expected_gas_used = 960; - let expected_metered_bytes_size = 824; +#[test] +fn loader_requires_all_except_the_last_blob_to_be_word_sized() { + // given + let blobs = [vec![0; 9], vec![0; 8]].map(Blob::new).to_vec(); - let estimated_transaction_cost = contract_instance - .methods() - .initialize_counter(42) - .with_tx_policies(TxPolicies::default().with_script_gas_limit(gas_limit)) - .estimate_transaction_cost(tolerance, block_horizon) - .await?; + // when + let err = Contract::loader_for_blobs(blobs, Salt::default(), vec![]) + .expect_err("should have failed because the first blob is not word-sized"); - assert_eq!(estimated_transaction_cost.gas_used, expected_gas_used); + // then assert_eq!( - estimated_transaction_cost.metered_bytes_size, - expected_metered_bytes_size + err.to_string(), + "blob 1/2 has a size of 9 bytes, which is not a multiple of 8".to_string() ); - - Ok(()) } -#[tokio::test] -async fn contract_call_has_same_estimated_and_used_gas() -> Result<()> { - setup_program_test!( - Wallets("wallet"), - Abigen(Contract( - name = "TestContract", - project = "e2e/sway/contracts/contract_test" - )), - Deploy( - name = "contract_instance", - contract = "TestContract", - wallet = "wallet" - ), - ); - let contract_methods = contract_instance.methods(); - - let tolerance = Some(0.0); - let block_horizon = Some(1); - - let estimated_gas_used = contract_methods - .initialize_counter(42) - .estimate_transaction_cost(tolerance, block_horizon) - .await? - .gas_used; +#[test] +fn last_blob_in_loader_can_be_unaligned() { + // given + let blobs = [vec![0; 8], vec![0; 9]].map(Blob::new).to_vec(); - let gas_used = contract_methods - .initialize_counter(42) - .call() - .await? - .gas_used; + // when + let result = Contract::loader_for_blobs(blobs, Salt::default(), vec![]); - assert_eq!(estimated_gas_used, gas_used); - Ok(()) + // then + let _ = result.unwrap(); } -#[tokio::test] -async fn mult_call_has_same_estimated_and_used_gas() -> Result<()> { - setup_program_test!( - Wallets("wallet"), - Abigen(Contract( - name = "TestContract", - project = "e2e/sway/contracts/contract_test" - )), - Deploy( - name = "contract_instance", - contract = "TestContract", - wallet = "wallet" - ), - ); - - let contract_methods = contract_instance.methods(); - let call_handler_1 = contract_methods.initialize_counter(42); - let call_handler_2 = contract_methods.get_array([42; 2]); - - let multi_call_handler = CallHandler::new_multi_call(wallet.clone()) - .add_call(call_handler_1) - .add_call(call_handler_2); +#[test] +fn can_load_regular_contract() -> Result<()> { + // given + let contract_binary = "sway/contracts/contract_test/out/release/contract_test.bin"; - let tolerance = Some(0.0); - let block_horizon = Some(1); - let estimated_gas_used = multi_call_handler - .estimate_transaction_cost(tolerance, block_horizon) - .await? - .gas_used; + // when + let contract = Contract::load_from(contract_binary, LoadConfiguration::default())?; - let gas_used = multi_call_handler.call::<(u64, [u64; 2])>().await?.gas_used; + // then + assert_eq!(contract.code(), std::fs::read(contract_binary)?); - assert_eq!(estimated_gas_used, gas_used); Ok(()) } -#[tokio::test] -async fn contract_method_call_respects_maturity() -> Result<()> { - setup_program_test!( - Wallets("wallet"), - Abigen(Contract( - name = "BlockHeightContract", - project = "e2e/sway/contracts/transaction_block_height" - )), - Deploy( - name = "contract_instance", - contract = "BlockHeightContract", - wallet = "wallet" - ), - ); - - let call_w_maturity = |maturity| { - contract_instance - .methods() - .calling_this_will_produce_a_block() - .with_tx_policies(TxPolicies::default().with_maturity(maturity)) - }; +#[test] +fn can_manually_create_regular_contract() -> Result<()> { + // given + let contract_binary = "sway/contracts/contract_test/out/release/contract_test.bin"; + let binary = std::fs::read(contract_binary)?; - call_w_maturity(1).call().await.expect( - "should have passed since we're calling with a maturity \ - that is less or equal to the current block height", - ); + // when + let contract = Contract::regular(binary.clone(), Salt::zeroed(), vec![]); - call_w_maturity(3).call().await.expect_err( - "should have failed since we're calling with a maturity \ - that is greater than the current block height", - ); + // then + assert_eq!(contract.code(), binary); Ok(()) } #[tokio::test] -async fn test_auth_msg_sender_from_sdk() -> Result<()> { +async fn regular_contract_can_be_deployed() -> Result<()> { + // given setup_program_test!( Wallets("wallet"), Abigen(Contract( - name = "AuthContract", - project = "e2e/sway/contracts/auth_testing_contract" + name = "MyContract", + project = "e2e/sway/contracts/contract_test" )), - Deploy( - name = "contract_instance", - contract = "AuthContract", - wallet = "wallet" - ), ); - // Contract returns true if `msg_sender()` matches `wallet.address()`. + let contract_binary = "sway/contracts/contract_test/out/release/contract_test.bin"; + + // when + let contract_id = Contract::load_from(contract_binary, LoadConfiguration::default())? + .deploy(&wallet, TxPolicies::default()) + .await?; + + // then + let contract_instance = MyContract::new(contract_id, wallet); + let response = contract_instance .methods() - .check_msg_sender(wallet.address()) + .get_counter() .call() - .await?; + .await? + .value; + + assert_eq!(response, 0); - assert!(response.value); Ok(()) } -#[tokio::test] -async fn test_large_return_data() -> Result<()> { - setup_program_test!( - Wallets("wallet"), - Abigen(Contract( - name = "TestContract", - project = "e2e/sway/contracts/large_return_data" - )), - Deploy( - name = "contract_instance", - contract = "TestContract", - wallet = "wallet" - ), - ); - - let contract_methods = contract_instance.methods(); - let res = contract_methods.get_id().call().await?; - - assert_eq!( - res.value.0, - [ - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 - ] - ); - - // One word-sized string - let res = contract_methods.get_small_string().call().await?; - assert_eq!(res.value, "gggggggg"); - - // Two word-sized string - let res = contract_methods.get_large_string().call().await?; - assert_eq!(res.value, "ggggggggg"); - - // Large struct will be bigger than a `WORD`. - let res = contract_methods.get_large_struct().call().await?; - assert_eq!(res.value.foo, 12); - assert_eq!(res.value.bar, 42); - - // Array will be returned in `ReturnData`. - let res = contract_methods.get_large_array().call().await?; - assert_eq!(res.value, [1, 2]); - - let res = contract_methods.get_contract_id().call().await?; - - // First `value` is from `CallResponse`. - // Second `value` is from the `ContractId` type. - assert_eq!( - res.value, - ContractId::from([ - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 - ]) - ); - Ok(()) +macro_rules! getters_work { + ($contract: ident, $contract_id: expr, $state_root: expr, $code_root: expr, $salt: expr, $code: expr) => { + assert_eq!($contract.contract_id(), $contract_id); + assert_eq!($contract.state_root(), $state_root); + assert_eq!($contract.code_root(), $code_root); + assert_eq!($contract.salt(), $salt); + assert_eq!($contract.code(), $code); + }; } -#[tokio::test] -async fn can_handle_function_called_new() -> Result<()> { - setup_program_test!( - Wallets("wallet"), - Abigen(Contract( - name = "TestContract", - project = "e2e/sway/contracts/contract_test" - )), - Deploy( - name = "contract_instance", - contract = "TestContract", - wallet = "wallet" - ), +#[test] +fn regular_contract_has_expected_getters() -> Result<()> { + let contract_binary = "sway/contracts/contract_test/out/release/contract_test.bin"; + let contract = Contract::load_from(contract_binary, LoadConfiguration::default())?; + let expected_binary = std::fs::read(contract_binary)?; + let expected_contract_id = + "d62e0d1326dd2aca749657c59c3288c0bdd0fe664482f72d3a85a9e289ff92cb".parse()?; + let expected_state_root = + "8aaf36bbaf5ef509ba6013e11b0f7176de429c9b6b3c1b09cc50b36e3113b901".parse()?; + let expected_code_root = + "d6721f6198f3765615222390655ce1acfe2ce1ec06002527cfa786b6d705ad0b".parse()?; + let expected_salt = Salt::zeroed(); + + getters_work!( + contract, + expected_contract_id, + expected_state_root, + expected_code_root, + expected_salt, + expected_binary ); - let response = contract_instance.methods().new().call().await?.value; - - assert_eq!(response, 12345); Ok(()) } -#[tokio::test] -async fn test_contract_setup_macro_deploy_with_salt() -> Result<()> { - // ANCHOR: contract_setup_macro_multi - setup_program_test!( - Wallets("wallet"), - Abigen( - Contract( - name = "LibContract", - project = "e2e/sway/contracts/lib_contract" - ), - Contract( - name = "LibContractCaller", - project = "e2e/sway/contracts/lib_contract_caller" - ), - ), - Deploy( - name = "lib_contract_instance", - contract = "LibContract", - wallet = "wallet" - ), - Deploy( - name = "contract_caller_instance", - contract = "LibContractCaller", - wallet = "wallet" - ), - Deploy( - name = "contract_caller_instance2", - contract = "LibContractCaller", - wallet = "wallet" - ), - ); - let lib_contract_id = lib_contract_instance.contract_id(); - - let contract_caller_id = contract_caller_instance.contract_id(); - - let contract_caller_id2 = contract_caller_instance2.contract_id(); - - // Because we deploy with salt, we can deploy the same contract multiple times - assert_ne!(contract_caller_id, contract_caller_id2); +#[test] +fn regular_can_be_turned_into_loader_and_back() -> Result<()> { + let contract_binary = "sway/contracts/contract_test/out/release/contract_test.bin"; - // The first contract can be called because they were deployed on the same provider - let response = contract_caller_instance - .methods() - .increment_from_contract(lib_contract_id, 42) - .with_contracts(&[&lib_contract_instance]) - .call() - .await?; + let contract_original = Contract::load_from(contract_binary, LoadConfiguration::default())?; - assert_eq!(43, response.value); + let loader_contract = contract_original.clone().convert_to_loader(1024)?; - let response = contract_caller_instance2 - .methods() - .increment_from_contract(lib_contract_id, 42) - .with_contracts(&[&lib_contract_instance]) - .call() - .await?; + let regular_recreated = loader_contract.clone().revert_to_regular(); - assert_eq!(43, response.value); - // ANCHOR_END: contract_setup_macro_multi + assert_eq!(regular_recreated, contract_original); Ok(()) } -#[tokio::test] -async fn test_wallet_getter() -> Result<()> { - setup_program_test!( - Wallets("wallet"), - Abigen(Contract( - name = "TestContract", - project = "e2e/sway/contracts/contract_test" - )), - Deploy( - name = "contract_instance", - contract = "TestContract", - wallet = "wallet" - ), +#[test] +fn unuploaded_loader_contract_has_expected_getters() -> Result<()> { + let contract_binary = "sway/contracts/contract_test/out/release/contract_test.bin"; + + let original = Contract::load_from(contract_binary, LoadConfiguration::default())?; + let loader = original.clone().convert_to_loader(1024)?; + + let loader_asm = loader_contract_asm(&loader.blob_ids()).unwrap(); + let manual_loader = original.with_code(loader_asm); + + getters_work!( + loader, + manual_loader.contract_id(), + manual_loader.state_root(), + manual_loader.code_root(), + manual_loader.salt(), + manual_loader.code() ); - assert_eq!(contract_instance.account().address(), wallet.address()); - //`contract_id()` is tested in - // async fn test_contract_calling_contract() -> Result<()> { Ok(()) } #[tokio::test] -async fn test_connect_wallet() -> Result<()> { - // ANCHOR: contract_setup_macro_manual_wallet - let config = WalletsConfig::new(Some(2), Some(1), Some(DEFAULT_COIN_AMOUNT)); - - let mut wallets = launch_custom_provider_and_get_wallets(config, None, None).await?; - let wallet = wallets.pop().unwrap(); - let wallet_2 = wallets.pop().unwrap(); - +async fn unuploaded_loader_can_be_deployed_directly() -> Result<()> { setup_program_test!( + Wallets("wallet"), Abigen(Contract( - name = "TestContract", - project = "e2e/sway/contracts/contract_test" + name = "MyContract", + project = "e2e/sway/contracts/huge_contract" )), - Deploy( - name = "contract_instance", - contract = "TestContract", - wallet = "wallet" - ), ); - // ANCHOR_END: contract_setup_macro_manual_wallet - - // pay for call with wallet - let tx_policies = TxPolicies::default() - .with_tip(100) - .with_script_gas_limit(1_000_000); - - contract_instance - .methods() - .initialize_counter(42) - .with_tx_policies(tx_policies) - .call() - .await?; - // confirm that funds have been deducted - let wallet_balance = wallet.get_asset_balance(&Default::default()).await?; - assert!(DEFAULT_COIN_AMOUNT > wallet_balance); + let contract_binary = "sway/contracts/huge_contract/out/release/huge_contract.bin"; - // pay for call with wallet_2 - contract_instance - .with_account(wallet_2.clone()) - .methods() - .initialize_counter(42) - .with_tx_policies(tx_policies) - .call() + let contract_id = Contract::load_from(contract_binary, LoadConfiguration::default())? + .convert_to_loader(1024)? + .deploy(&wallet, TxPolicies::default()) .await?; - // confirm there are no changes to wallet, wallet_2 has been charged - let wallet_balance_second_call = wallet.get_asset_balance(&Default::default()).await?; - let wallet_2_balance = wallet_2.get_asset_balance(&Default::default()).await?; - assert_eq!(wallet_balance_second_call, wallet_balance); - assert!(DEFAULT_COIN_AMOUNT > wallet_2_balance); - - Ok(()) -} - -async fn setup_output_variable_estimation_test() -> Result<( - Vec, - [Identity; 3], - AssetId, - Bech32ContractId, -)> { - let wallet_config = WalletsConfig::new(Some(3), None, None); - let wallets = launch_custom_provider_and_get_wallets(wallet_config, None, None).await?; - - let contract_id = Contract::load_from( - "sway/contracts/token_ops/out/release/token_ops.bin", - LoadConfiguration::default(), - )? - .deploy(&wallets[0], TxPolicies::default()) - .await?; + let contract_instance = MyContract::new(contract_id, wallet); - let mint_asset_id = contract_id.asset_id(&Bits256::zeroed()); - let addresses = wallets - .iter() - .map(|wallet| wallet.address().into()) - .collect::>() - .try_into() - .unwrap(); - - Ok((wallets, addresses, mint_asset_id, contract_id)) -} + let response = contract_instance.methods().something().call().await?.value; -#[tokio::test] -async fn test_output_variable_estimation() -> Result<()> { - abigen!(Contract( - name = "MyContract", - abi = "e2e/sway/contracts/token_ops/out/release/token_ops-abi.json" - )); - - let (wallets, addresses, mint_asset_id, contract_id) = - setup_output_variable_estimation_test().await?; - - let contract_instance = MyContract::new(contract_id, wallets[0].clone()); - let contract_methods = contract_instance.methods(); - let amount = 1000; - - { - // Should fail due to lack of output variables - let response = contract_methods - .mint_to_addresses(amount, addresses) - .call() - .await; - - assert!(matches!( - response, - Err(Error::Transaction(Reason::Reverted { .. })) - )); - } - - { - // Should add 3 output variables automatically - let _ = contract_methods - .mint_to_addresses(amount, addresses) - .with_variable_output_policy(VariableOutputPolicy::EstimateMinimum) - .call() - .await?; - - for wallet in wallets.iter() { - let balance = wallet.get_asset_balance(&mint_asset_id).await?; - assert_eq!(balance, amount); - } - } + assert_eq!(response, 1001); Ok(()) } -#[tokio::test] -async fn test_output_variable_estimation_multicall() -> Result<()> { - abigen!(Contract( - name = "MyContract", - abi = "e2e/sway/contracts/token_ops/out/release/token_ops-abi.json" - )); - - let (wallets, addresses, mint_asset_id, contract_id) = - setup_output_variable_estimation_test().await?; - - let contract_instance = MyContract::new(contract_id.clone(), wallets[0].clone()); - let contract_methods = contract_instance.methods(); - const NUM_OF_CALLS: u64 = 3; - let amount = 1000; - let total_amount = amount * NUM_OF_CALLS; - - let mut multi_call_handler = CallHandler::new_multi_call(wallets[0].clone()); - for _ in 0..NUM_OF_CALLS { - let call_handler = contract_methods.mint_to_addresses(amount, addresses); - multi_call_handler = multi_call_handler.add_call(call_handler); - } - - wallets[0] - .force_transfer_to_contract( - &contract_id, - total_amount, - AssetId::zeroed(), - TxPolicies::default(), - ) - .await - .unwrap(); - - let base_layer_address = Bits256([1u8; 32]); - let call_handler = contract_methods.send_message(base_layer_address, amount); - multi_call_handler = multi_call_handler.add_call(call_handler); - - let _ = multi_call_handler - .with_variable_output_policy(VariableOutputPolicy::EstimateMinimum) - .call::<((), (), ())>() - .await?; +#[test] +fn unuploaded_loader_requires_at_least_one_blob() -> Result<()> { + // given + let no_blob_ids = vec![]; - for wallet in wallets.iter() { - let balance = wallet.get_asset_balance(&mint_asset_id).await?; - assert_eq!(balance, 3 * amount); - } + // when + let loader = Contract::loader_for_blob_ids(no_blob_ids, Salt::default(), vec![]) + .expect_err("should have failed because there are no blobs"); + //then + assert_eq!( + loader.to_string(), + "must provide at least one blob".to_string() + ); Ok(()) } -#[tokio::test] -async fn test_contract_instance_get_balances() -> Result<()> { - let mut wallet = WalletUnlocked::new_random(None); - let (coins, asset_ids) = setup_multiple_assets_coins(wallet.address(), 2, 4, 8); - - let random_asset_id = &asset_ids[1]; - let provider = setup_test_provider(coins.clone(), vec![], None, None).await?; - wallet.set_provider(provider.clone()); - - setup_program_test!( - Abigen(Contract( - name = "TestContract", - project = "e2e/sway/contracts/contract_test" - )), - Deploy( - name = "contract_instance", - contract = "TestContract", - wallet = "wallet" - ), +#[test] +fn uploaded_loader_has_expected_getters() -> Result<()> { + let contract_binary = "sway/contracts/huge_contract/out/release/huge_contract.bin"; + let original_contract = Contract::load_from(contract_binary, LoadConfiguration::default())?; + + let blob_ids = original_contract + .clone() + .convert_to_loader(1024)? + .blob_ids(); + + // we pretend we uploaded the blobs + let loader = Contract::loader_for_blob_ids(blob_ids.clone(), Salt::default(), vec![])?; + + let loader_asm = loader_contract_asm(&blob_ids).unwrap(); + let manual_loader = original_contract.with_code(loader_asm); + + getters_work!( + loader, + manual_loader.contract_id(), + manual_loader.state_root(), + manual_loader.code_root(), + manual_loader.salt(), + manual_loader.code() ); - let contract_id = contract_instance.contract_id(); - - // Check the current balance of the contract with id 'contract_id' - let contract_balances = contract_instance.get_balances().await?; - assert!(contract_balances.is_empty()); - - // Transfer an amount to the contract - let amount = 8; - wallet - .force_transfer_to_contract(contract_id, amount, *random_asset_id, TxPolicies::default()) - .await?; - - // Check that the contract now has 1 coin - let contract_balances = contract_instance.get_balances().await?; - assert_eq!(contract_balances.len(), 1); - - let random_asset_balance = contract_balances.get(random_asset_id).unwrap(); - assert_eq!(*random_asset_balance, amount); Ok(()) } +// #[tokio::test] -async fn contract_call_futures_implement_send() -> Result<()> { - use std::future::Future; - - fn tokio_spawn_imitation(_: T) - where - T: Future + Send + 'static, - { - } - +async fn unuploaded_loader_can_upload_blobs_separately_then_deploy() -> Result<()> { setup_program_test!( Wallets("wallet"), Abigen(Contract( - name = "TestContract", - project = "e2e/sway/contracts/contract_test" + name = "MyContract", + project = "e2e/sway/contracts/huge_contract" )), - Deploy( - name = "contract_instance", - contract = "TestContract", - wallet = "wallet" - ), ); - tokio_spawn_imitation(async move { - contract_instance - .methods() - .initialize_counter(42) - .call() - .await - .unwrap(); - }); - Ok(()) -} + let contract_binary = "sway/contracts/huge_contract/out/release/huge_contract.bin"; -#[tokio::test] -async fn test_contract_set_estimation() -> Result<()> { - setup_program_test!( - Wallets("wallet"), - Abigen( - Contract( - name = "LibContract", - project = "e2e/sway/contracts/lib_contract" - ), - Contract( - name = "LibContractCaller", - project = "e2e/sway/contracts/lib_contract_caller" - ), - ), - Deploy( - name = "lib_contract_instance", - contract = "LibContract", - wallet = "wallet" - ), - Deploy( - name = "contract_caller_instance", - contract = "LibContractCaller", - wallet = "wallet" - ), - ); - let lib_contract_id = lib_contract_instance.contract_id(); - - let res = lib_contract_instance.methods().increment(42).call().await?; - assert_eq!(43, res.value); - - { - // Should fail due to missing external contracts - let res = contract_caller_instance - .methods() - .increment_from_contract(lib_contract_id, 42) - .call() - .await; - - assert!(matches!( - res, - Err(Error::Transaction(Reason::Reverted { .. })) - )); - } - - let res = contract_caller_instance - .methods() - .increment_from_contract(lib_contract_id, 42) - .determine_missing_contracts(None) - .await? - .call() + let contract = Contract::load_from(contract_binary, LoadConfiguration::default())? + .convert_to_loader(1024)? + .upload_blobs(&wallet, TxPolicies::default()) .await?; - assert_eq!(43, res.value); - Ok(()) -} + let blob_ids = contract.blob_ids(); -#[tokio::test] -async fn test_output_variable_contract_id_estimation_multicall() -> Result<()> { - setup_program_test!( - Wallets("wallet"), - Abigen( - Contract( - name = "LibContract", - project = "e2e/sway/contracts/lib_contract" - ), - Contract( - name = "LibContractCaller", - project = "e2e/sway/contracts/lib_contract_caller" - ), - Contract( - name = "TestContract", - project = "e2e/sway/contracts/contract_test" - ), - ), - Deploy( - name = "lib_contract_instance", - contract = "LibContract", - wallet = "wallet" - ), - Deploy( - name = "contract_caller_instance", - contract = "LibContractCaller", - wallet = "wallet" - ), - Deploy( - name = "contract_test_instance", - contract = "TestContract", - wallet = "wallet" - ), - ); - - let lib_contract_id = lib_contract_instance.contract_id(); - - let contract_methods = contract_caller_instance.methods(); - - let mut multi_call_handler = - CallHandler::new_multi_call(wallet.clone()).with_tx_policies(Default::default()); - - for _ in 0..3 { - let call_handler = contract_methods.increment_from_contract(lib_contract_id, 42); - multi_call_handler = multi_call_handler.add_call(call_handler); - } - - // add call that does not need ContractId - let contract_methods = contract_test_instance.methods(); - let call_handler = contract_methods.get(5, 6); - - multi_call_handler = multi_call_handler.add_call(call_handler); - - let call_response = multi_call_handler - .determine_missing_contracts(None) - .await? - .call::<(u64, u64, u64, u64)>() - .await?; - - assert_eq!(call_response.value, (43, 43, 43, 11)); - - Ok(()) -} - -#[tokio::test] -async fn test_contract_call_with_non_default_max_input() -> Result<()> { - use fuels::{ - tx::{ConsensusParameters, TxParameters}, - types::coin::Coin, - }; - - let mut consensus_parameters = ConsensusParameters::default(); - let tx_params = TxParameters::default() - .with_max_inputs(123) - .with_max_size(1_000_000); - consensus_parameters.set_tx_params(tx_params); - let contract_params = ContractParameters::default().with_contract_max_size(1_000_000); - consensus_parameters.set_contract_params(contract_params); - - let mut wallet = WalletUnlocked::new_random(None); - - let coins: Vec = setup_single_asset_coins( - wallet.address(), - Default::default(), - DEFAULT_NUM_COINS, - DEFAULT_COIN_AMOUNT, - ); - let chain_config = ChainConfig { - consensus_parameters: consensus_parameters.clone(), - ..ChainConfig::default() - }; - - let provider = setup_test_provider(coins, vec![], None, Some(chain_config)).await?; - wallet.set_provider(provider.clone()); - assert_eq!(consensus_parameters, *provider.consensus_parameters()); - - setup_program_test!( - Abigen(Contract( - name = "TestContract", - project = "e2e/sway/contracts/contract_test" - )), - Deploy( - name = "contract_instance", - contract = "TestContract", - wallet = "wallet" - ), - ); - - let response = contract_instance.methods().get(5, 6).call().await?; - - assert_eq!(response.value, 11); - - Ok(()) -} - -#[tokio::test] -async fn test_add_custom_assets() -> Result<()> { - let initial_amount = 100_000; - let asset_base = AssetConfig { - id: AssetId::zeroed(), - num_coins: 1, - coin_amount: initial_amount, - }; - - let asset_id_1 = AssetId::from([3u8; 32]); - let asset_1 = AssetConfig { - id: asset_id_1, - num_coins: 1, - coin_amount: initial_amount, - }; - - let asset_id_2 = AssetId::from([1u8; 32]); - let asset_2 = AssetConfig { - id: asset_id_2, - num_coins: 1, - coin_amount: initial_amount, - }; - - let assets = vec![asset_base, asset_1, asset_2]; - - let num_wallets = 2; - let wallet_config = WalletsConfig::new_multiple_assets(num_wallets, assets); - let mut wallets = launch_custom_provider_and_get_wallets(wallet_config, None, None).await?; - let wallet_1 = wallets.pop().unwrap(); - let wallet_2 = wallets.pop().unwrap(); - - setup_program_test!( - Abigen(Contract( - name = "MyContract", - project = "e2e/sway/contracts/contract_test" - )), - Deploy( - name = "contract_instance", - contract = "MyContract", - wallet = "wallet_1" - ), - ); - - let amount_1 = 5000; - let amount_2 = 3000; - let response = contract_instance - .methods() - .get(5, 6) - .add_custom_asset(asset_id_1, amount_1, Some(wallet_2.address().clone())) - .add_custom_asset(asset_id_2, amount_2, Some(wallet_2.address().clone())) - .call() - .await?; - - assert_eq!(response.value, 11); - - let balance_asset_1 = wallet_1.get_asset_balance(&asset_id_1).await?; - let balance_asset_2 = wallet_1.get_asset_balance(&asset_id_2).await?; - assert_eq!(balance_asset_1, initial_amount - amount_1); - assert_eq!(balance_asset_2, initial_amount - amount_2); - - let balance_asset_1 = wallet_2.get_asset_balance(&asset_id_1).await?; - let balance_asset_2 = wallet_2.get_asset_balance(&asset_id_2).await?; - assert_eq!(balance_asset_1, initial_amount + amount_1); - assert_eq!(balance_asset_2, initial_amount + amount_2); - - Ok(()) -} - -#[tokio::test] -async fn contract_load_error_messages() { - { - let binary_path = "sway/contracts/contract_test/out/release/no_file_on_path.bin"; - let expected_error = format!("io: file \"{binary_path}\" does not exist"); - - let error = Contract::load_from(binary_path, LoadConfiguration::default()) - .expect_err("should have failed"); - - assert_eq!(error.to_string(), expected_error); - } - { - let binary_path = "sway/contracts/contract_test/out/release/contract_test-abi.json"; - let expected_error = format!("expected \"{binary_path}\" to have '.bin' extension"); - - let error = Contract::load_from(binary_path, LoadConfiguration::default()) - .expect_err("should have failed"); - - assert_eq!(error.to_string(), expected_error); - } -} - -#[tokio::test] -async fn test_payable_annotation() -> Result<()> { - setup_program_test!( - Wallets("wallet"), - Abigen(Contract( - name = "TestContract", - project = "e2e/sway/contracts/payable_annotation" - )), - Deploy( - name = "contract_instance", - contract = "TestContract", - wallet = "wallet" - ), - ); - - let contract_methods = contract_instance.methods(); - - let response = contract_methods - .payable() - .call_params( - CallParameters::default() - .with_amount(100) - .with_gas_forwarded(20_000), - )? - .call() - .await?; - - assert_eq!(response.value, 42); - - // ANCHOR: non_payable_params - let err = contract_methods - .non_payable() - .call_params(CallParameters::default().with_amount(100)) - .expect_err("should return error"); - - assert!(matches!(err, Error::Other(s) if s.contains("assets forwarded to non-payable method"))); - // ANCHOR_END: non_payable_params - - let response = contract_methods - .non_payable() - .call_params(CallParameters::default().with_gas_forwarded(20_000))? - .call() - .await?; - - assert_eq!(response.value, 42); - - Ok(()) -} - -#[tokio::test] -async fn multi_call_from_calls_with_different_account_types() -> Result<()> { - use fuels::prelude::*; - - abigen!(Contract( - name = "MyContract", - abi = "e2e/sway/contracts/contract_test/out/release/contract_test-abi.json" - )); - - let wallet = WalletUnlocked::new_random(None); - let predicate = Predicate::from_code(vec![]); - - let contract_methods_wallet = - MyContract::new(Bech32ContractId::default(), wallet.clone()).methods(); - let contract_methods_predicate = - MyContract::new(Bech32ContractId::default(), predicate).methods(); - - let call_handler_1 = contract_methods_wallet.initialize_counter(42); - let call_handler_2 = contract_methods_predicate.get_array([42; 2]); - - let _multi_call_handler = CallHandler::new_multi_call(wallet) - .add_call(call_handler_1) - .add_call(call_handler_2); - - Ok(()) -} - -#[tokio::test] -async fn low_level_call() -> Result<()> { - use fuels::types::SizedAsciiString; - - setup_program_test!( - Wallets("wallet"), - Abigen( - Contract( - name = "MyCallerContract", - project = "e2e/sway/contracts/low_level_caller" - ), - Contract( - name = "MyTargetContract", - project = "e2e/sway/contracts/contract_test" - ), - ), - Deploy( - name = "caller_contract_instance", - contract = "MyCallerContract", - wallet = "wallet" - ), - Deploy( - name = "target_contract_instance", - contract = "MyTargetContract", - wallet = "wallet" - ), - ); - - let function_selector = encode_fn_selector("initialize_counter"); - let call_data = calldata!(42u64)?; - - caller_contract_instance - .methods() - .call_low_level_call( - target_contract_instance.id(), - Bytes(function_selector), - Bytes(call_data), - ) - .determine_missing_contracts(None) - .await? - .call() - .await?; - - let response = target_contract_instance - .methods() - .get_counter() - .call() - .await?; - assert_eq!(response.value, 42); - - let function_selector = encode_fn_selector("set_value_multiple_complex"); - let call_data = calldata!( - MyStruct { - a: true, - b: [1, 2, 3], - }, - SizedAsciiString::<4>::try_from("fuel")? - )?; - - caller_contract_instance - .methods() - .call_low_level_call( - target_contract_instance.id(), - Bytes(function_selector), - Bytes(call_data), - ) - .determine_missing_contracts(None) - .await? - .call() - .await?; - - let result_uint = target_contract_instance - .methods() - .get_counter() - .call() - .await - .unwrap() - .value; - - let result_bool = target_contract_instance - .methods() - .get_bool_value() - .call() - .await - .unwrap() - .value; - - let result_str = target_contract_instance - .methods() - .get_str_value() - .call() - .await - .unwrap() - .value; - - assert_eq!(result_uint, 42); - assert!(result_bool); - assert_eq!(result_str, "fuel"); - - Ok(()) -} - -#[cfg(any(not(feature = "fuel-core-lib"), feature = "rocksdb"))] -#[test] -fn db_rocksdb() { - use std::{fs, str::FromStr}; - - use fuels::{ - accounts::wallet::WalletUnlocked, - client::{PageDirection, PaginationRequest}, - crypto::SecretKey, - prelude::{setup_test_provider, DbType, Error, ViewOnlyAccount, DEFAULT_COIN_AMOUNT}, - }; - - let temp_dir = tempfile::tempdir().expect("failed to make tempdir"); - let temp_dir_name = temp_dir - .path() - .file_name() - .expect("failed to get file name") - .to_string_lossy() - .to_string(); - let temp_database_path = temp_dir.path().join("db"); - - tokio::runtime::Runtime::new() - .expect("tokio runtime failed") - .block_on(async { - let _ = temp_dir; - let wallet = WalletUnlocked::new_from_private_key( - SecretKey::from_str( - "0x4433d156e8c53bf5b50af07aa95a29436f29a94e0ccc5d58df8e57bdc8583c32", - )?, - None, - ); - - const NUMBER_OF_ASSETS: u64 = 2; - let node_config = NodeConfig { - database_type: DbType::RocksDb(Some(temp_database_path.clone())), - ..NodeConfig::default() - }; - - let chain_config = ChainConfig { - chain_name: temp_dir_name.clone(), - consensus_parameters: Default::default(), - ..ChainConfig::local_testnet() - }; - - let (coins, _) = setup_multiple_assets_coins( - wallet.address(), - NUMBER_OF_ASSETS, - DEFAULT_NUM_COINS, - DEFAULT_COIN_AMOUNT, - ); - - let provider = - setup_test_provider(coins.clone(), vec![], Some(node_config), Some(chain_config)) - .await?; - - provider.produce_blocks(2, None).await?; - - Ok::<(), Error>(()) - }) - .unwrap(); - - // The runtime needs to be terminated because the node can currently only be killed when the runtime itself shuts down. - - tokio::runtime::Runtime::new() - .expect("tokio runtime failed") - .block_on(async { - let node_config = NodeConfig { - database_type: DbType::RocksDb(Some(temp_database_path.clone())), - ..NodeConfig::default() - }; - - let provider = setup_test_provider(vec![], vec![], Some(node_config), None).await?; - // the same wallet that was used when rocksdb was built. When we connect it to the provider, we expect it to have the same amount of assets - let mut wallet = WalletUnlocked::new_from_private_key( - SecretKey::from_str( - "0x4433d156e8c53bf5b50af07aa95a29436f29a94e0ccc5d58df8e57bdc8583c32", - )?, - None, - ); - - wallet.set_provider(provider.clone()); - - let blocks = provider - .get_blocks(PaginationRequest { - cursor: None, - results: 10, - direction: PageDirection::Forward, - }) - .await? - .results; - - assert_eq!(blocks.len(), 3); - assert_eq!( - *wallet.get_balances().await?.iter().next().unwrap().1, - DEFAULT_COIN_AMOUNT - ); - assert_eq!( - *wallet.get_balances().await?.iter().next().unwrap().1, - DEFAULT_COIN_AMOUNT - ); - assert_eq!(wallet.get_balances().await?.len(), 2); - - fs::remove_dir_all( - temp_database_path - .parent() - .expect("db parent folder does not exist"), - )?; - - Ok::<(), Error>(()) - }) - .unwrap(); -} - -#[tokio::test] -async fn can_configure_decoding_of_contract_return() -> Result<()> { - setup_program_test!( - Wallets("wallet"), - Abigen(Contract( - name = "MyContract", - project = "e2e/sway/contracts/needs_custom_decoder" - ),), - Deploy( - contract = "MyContract", - name = "contract_instance", - wallet = "wallet" - ) - ); - - let methods = contract_instance.methods(); - { - // Single call: Will not work if max_tokens not big enough - methods.i_return_a_1k_el_array().with_decoder_config(DecoderConfig{max_tokens: 100, ..Default::default()}).call().await.expect_err( - "should have failed because there are more tokens than what is supported by default", - ); - } - { - // Single call: Works when limit is bumped - let result = methods - .i_return_a_1k_el_array() - .with_decoder_config(DecoderConfig { - max_tokens: 1001, - ..Default::default() - }) - .call() - .await? - .value; - - assert_eq!(result, [0; 1000]); - } - { - // Multi call: Will not work if max_tokens not big enough - CallHandler::new_multi_call(wallet.clone()) - .add_call(methods.i_return_a_1k_el_array()) - .with_decoder_config(DecoderConfig { max_tokens: 100, ..Default::default() }) - .call::<([u8; 1000],)>().await.expect_err( - "should have failed because there are more tokens than what is supported by default", - ); - } - { - // Multi call: Works when configured - CallHandler::new_multi_call(wallet.clone()) - .add_call(methods.i_return_a_1k_el_array()) - .with_decoder_config(DecoderConfig { - max_tokens: 1001, - ..Default::default() - }) - .call::<([u8; 1000],)>() - .await - .unwrap(); - } - - Ok(()) -} - -#[tokio::test] -async fn test_contract_submit_and_response() -> Result<()> { - setup_program_test!( - Wallets("wallet"), - Abigen(Contract( - name = "TestContract", - project = "e2e/sway/contracts/contract_test" - )), - Deploy( - name = "contract_instance", - contract = "TestContract", - wallet = "wallet" - ), - ); - - let contract_methods = contract_instance.methods(); - - let submitted_tx = contract_methods.get(1, 2).submit().await?; - let value = submitted_tx.response().await?.value; - - assert_eq!(value, 3); - - let contract_methods = contract_instance.methods(); - let call_handler_1 = contract_methods.get_single(7); - let call_handler_2 = contract_methods.get_single(42); - - let multi_call_handler = CallHandler::new_multi_call(wallet.clone()) - .add_call(call_handler_1) - .add_call(call_handler_2); - - let handle = multi_call_handler.submit().await?; - let (val_1, val_2): (u64, u64) = handle.response().await?.value; - - assert_eq!(val_1, 7); - assert_eq!(val_2, 42); - - Ok(()) -} - -#[tokio::test] -async fn test_heap_type_multicall() -> Result<()> { - setup_program_test!( - Wallets("wallet"), - Abigen( - Contract( - name = "TestContract", - project = "e2e/sway/contracts/contract_test" - ), - Contract( - name = "VectorOutputContract", - project = "e2e/sway/types/contracts/vector_output" - ) - ), - Deploy( - name = "contract_instance", - contract = "VectorOutputContract", - wallet = "wallet" - ), - Deploy( - name = "contract_instance_2", - contract = "TestContract", - wallet = "wallet" - ), - ); - - { - let call_handler_1 = contract_instance.methods().u8_in_vec(5); - let call_handler_2 = contract_instance_2.methods().get_single(7); - let call_handler_3 = contract_instance.methods().u8_in_vec(3); - - let multi_call_handler = CallHandler::new_multi_call(wallet.clone()) - .add_call(call_handler_1) - .add_call(call_handler_2) - .add_call(call_handler_3); - - let (val_1, val_2, val_3): (Vec, u64, Vec) = multi_call_handler.call().await?.value; - - assert_eq!(val_1, vec![0, 1, 2, 3, 4]); - assert_eq!(val_2, 7); - assert_eq!(val_3, vec![0, 1, 2]); - } - - Ok(()) -} - -#[tokio::test] -async fn heap_types_correctly_offset_in_create_transactions_w_storage_slots() -> Result<()> { - setup_program_test!( - Wallets("wallet"), - Abigen(Predicate( - name = "MyPredicate", - project = "e2e/sway/types/predicates/predicate_vector" - ),), - ); - - let provider = wallet.try_provider()?.clone(); - let data = MyPredicateEncoder::default().encode_data(18, 24, vec![2, 4, 42])?; - let predicate = Predicate::load_from( - "sway/types/predicates/predicate_vector/out/release/predicate_vector.bin", - )? - .with_data(data) - .with_provider(provider); - - wallet - .transfer( - predicate.address(), - 10_000, - AssetId::zeroed(), - TxPolicies::default(), - ) - .await?; - - // if the contract is successfully deployed then the predicate was unlocked. This further means - // the offsets were setup correctly since the predicate uses heap types in its arguments. - // Storage slots were loaded automatically by default - Contract::load_from( - "sway/contracts/storage/out/release/storage.bin", - LoadConfiguration::default(), - )? - .deploy(&predicate, TxPolicies::default()) - .await?; - - Ok(()) -} - -#[tokio::test] -async fn test_arguments_with_gas_forwarded() -> Result<()> { - setup_program_test!( - Wallets("wallet"), - Abigen( - Contract( - name = "TestContract", - project = "e2e/sway/contracts/contract_test" - ), - Contract( - name = "VectorOutputContract", - project = "e2e/sway/types/contracts/vectors" - ) - ), - Deploy( - name = "contract_instance", - contract = "TestContract", - wallet = "wallet" - ), - Deploy( - name = "contract_instance_2", - contract = "VectorOutputContract", - wallet = "wallet" - ), - ); - - let x = 128; - let vec_input = vec![0, 1, 2]; - { - let response = contract_instance - .methods() - .get_single(x) - .call_params(CallParameters::default().with_gas_forwarded(4096))? - .call() - .await?; - - assert_eq!(response.value, x); - } - { - contract_instance_2 - .methods() - .u32_vec(vec_input.clone()) - .call_params(CallParameters::default().with_gas_forwarded(4096))? - .call() - .await?; - } - { - let call_handler_1 = contract_instance.methods().get_single(x); - let call_handler_2 = contract_instance_2.methods().u32_vec(vec_input); - - let multi_call_handler = CallHandler::new_multi_call(wallet.clone()) - .add_call(call_handler_1) - .add_call(call_handler_2); - - let (value, _): (u64, ()) = multi_call_handler.call().await?.value; - - assert_eq!(value, x); - } - - Ok(()) -} - -#[tokio::test] -async fn contract_custom_call_no_signatures_strategy() -> Result<()> { - setup_program_test!( - Wallets("wallet"), - Abigen(Contract( - name = "TestContract", - project = "e2e/sway/contracts/contract_test" - )), - Deploy( - name = "contract_instance", - contract = "TestContract", - wallet = "wallet" - ), - ); - let provider = wallet.try_provider()?; - - let counter = 42; - let call_handler = contract_instance.methods().initialize_counter(counter); - - let mut tb = call_handler.transaction_builder().await?; - - let amount = 10; - let new_base_inputs = wallet - .get_asset_inputs_for_amount(*provider.base_asset_id(), amount, None) - .await?; - tb.inputs_mut().extend(new_base_inputs); - - // ANCHOR: tb_no_signatures_strategy - let mut tx = tb - .with_build_strategy(ScriptBuildStrategy::NoSignatures) - .build(provider) - .await?; - // ANCHOR: tx_sign_with - tx.sign_with(&wallet, provider.chain_id()).await?; - // ANCHOR_END: tx_sign_with - // ANCHOR_END: tb_no_signatures_strategy - - let tx_id = provider.send_transaction(tx).await?; - let tx_status = provider.tx_status(&tx_id).await?; - - let response = call_handler.get_response_from(tx_status)?; - - assert_eq!(counter, response.value); - - Ok(()) -} - -#[tokio::test] -async fn contract_encoder_config_is_applied() -> Result<()> { - setup_program_test!( - Abigen(Contract( - name = "TestContract", - project = "e2e/sway/contracts/contract_test" - )), - Wallets("wallet") - ); - let contract_id = Contract::load_from( - "sway/contracts/contract_test/out/release/contract_test.bin", - LoadConfiguration::default(), + // if this were an example for the user we'd just call `deploy` on the contract above + // this way we are testing that the blobs were really deployed above, otherwise the following + // would fail + let contract_id = Contract::loader_for_blob_ids( + blob_ids.to_vec(), + contract.salt(), + contract.storage_slots().to_vec(), )? .deploy(&wallet, TxPolicies::default()) .await?; - let instance = TestContract::new(contract_id.clone(), wallet.clone()); - - { - let _encoding_ok = instance - .methods() - .get(0, 1) - .call() - .await - .expect("should not fail as it uses the default encoder config"); - } - { - let encoder_config = EncoderConfig { - max_tokens: 1, - ..Default::default() - }; - let instance_with_encoder_config = instance.with_encoder_config(encoder_config); - - // uses 2 tokens when 1 is the limit - let encoding_error = instance_with_encoder_config - .methods() - .get(0, 1) - .call() - .await - .expect_err("should error"); - - assert!(encoding_error.to_string().contains( - "cannot encode contract call arguments: codec: token limit `1` reached while encoding." - )); - - let encoding_error = instance_with_encoder_config - .methods() - .get(0, 1) - .simulate(Execution::Realistic) - .await - .expect_err("should error"); - - assert!(encoding_error.to_string().contains( - "cannot encode contract call arguments: codec: token limit `1` reached while encoding." - )); - } - - Ok(()) -} - -#[tokio::test] -async fn test_reentrant_calls() -> Result<()> { - setup_program_test!( - Wallets("wallet"), - Abigen(Contract( - name = "LibContractCaller", - project = "e2e/sway/contracts/lib_contract_caller" - ),), - Deploy( - name = "contract_caller_instance", - contract = "LibContractCaller", - wallet = "wallet" - ), - ); - - let contract_id = contract_caller_instance.contract_id(); - let response = contract_caller_instance - .methods() - .re_entrant(contract_id, true) - .call() - .await?; - - assert_eq!(42, response.value); - - Ok(()) -} - -#[tokio::test] -async fn msg_sender_gas_estimation_issue() { - // Gas estimation requires an input of the base asset. If absent, a fake input is - // added. However, if a non-base coin is present and the fake input introduces a - // second owner, it causes the `msg_sender` sway fn to fail. This leads - // to a premature failure in gas estimation, risking transaction failure due to - // a low gas limit. - let mut wallet = WalletUnlocked::new_random(None); - - let (coins, ids) = - setup_multiple_assets_coins(wallet.address(), 2, DEFAULT_NUM_COINS, DEFAULT_COIN_AMOUNT); - - let provider = setup_test_provider(coins, vec![], None, None) - .await - .unwrap(); - wallet.set_provider(provider.clone()); - - setup_program_test!( - Abigen(Contract( - name = "MyContract", - project = "e2e/sway/contracts/msg_methods" - )), - Deploy( - contract = "MyContract", - name = "contract_instance", - wallet = "wallet" - ) - ); - - let asset_id = ids[0]; - - // The fake coin won't be added if we add a base asset, so let's not do that - assert!(asset_id != *provider.base_asset_id()); - let call_params = CallParameters::default() - .with_amount(100) - .with_asset_id(asset_id); - - contract_instance - .methods() - .message_sender() - .call_params(call_params) - .unwrap() - .call() - .await - .unwrap(); -} - -#[tokio::test] -async fn variable_output_estimation_is_optimized() -> Result<()> { - setup_program_test!( - Wallets("wallet"), - Abigen(Contract( - name = "MyContract", - project = "e2e/sway/contracts/var_outputs" - )), - Deploy( - contract = "MyContract", - name = "contract_instance", - wallet = "wallet" - ) - ); - - let contract_methods = contract_instance.methods(); - - let coins = 252; - let recipient = Identity::Address(wallet.address().into()); - let start = Instant::now(); - let _ = contract_methods - .mint(coins, recipient) - .with_variable_output_policy(VariableOutputPolicy::EstimateMinimum) - .call() - .await?; - - // debug builds are slower (20x for `fuel-core-lib`, 4x for a release-fuel-core-binary) - // we won't validate in that case so we don't have to maintain two expectations - if !cfg!(debug_assertions) { - let elapsed = start.elapsed().as_secs(); - let limit = 2; - if elapsed > limit { - panic!("Estimation took too long ({elapsed}). Limit is {limit}"); - } - } - - Ok(()) -} - -#[tokio::test] -async fn simulations_can_be_made_without_coins() -> Result<()> { - setup_program_test!( - Wallets("wallet"), - Abigen(Contract( - name = "MyContract", - project = "e2e/sway/contracts/contract_test" - )), - Deploy( - name = "contract_instance", - contract = "MyContract", - wallet = "wallet" - ) - ); - let contract_id = contract_instance.contract_id(); - let provider = wallet.provider().cloned(); - - let no_funds_wallet = WalletUnlocked::new_random(provider); - - let response = MyContract::new(contract_id, no_funds_wallet.clone()) - .methods() - .get(5, 6) - .simulate(Execution::StateReadOnly) - .await?; - - assert_eq!(response.value, 11); - - Ok(()) -} - -#[tokio::test] -async fn simulations_can_be_made_without_coins_multicall() -> Result<()> { - setup_program_test!( - Wallets("wallet"), - Abigen(Contract( - name = "MyContract", - project = "e2e/sway/contracts/contract_test" - )), - Deploy( - name = "contract_instance", - contract = "MyContract", - wallet = "wallet" - ) - ); - let contract_id = contract_instance.contract_id(); - let provider = wallet.provider().cloned(); - - let no_funds_wallet = WalletUnlocked::new_random(provider); - let contract_instance = MyContract::new(contract_id, no_funds_wallet.clone()); - - let contract_methods = contract_instance.methods(); - - let call_handler_1 = contract_methods.get(1, 2); - let call_handler_2 = contract_methods.get(3, 4); - - let mut multi_call_handler = CallHandler::new_multi_call(no_funds_wallet) - .add_call(call_handler_1) - .add_call(call_handler_2); - - let value: (u64, u64) = multi_call_handler - .simulate(Execution::StateReadOnly) - .await? - .value; - - assert_eq!(value, (3, 7)); - - Ok(()) -} - -#[tokio::test] -async fn contract_call_with_non_zero_base_asset_id_and_tip() -> Result<()> { - use fuels::{prelude::*, tx::ConsensusParameters}; - - abigen!(Contract( - name = "MyContract", - abi = "e2e/sway/contracts/contract_test/out/release/contract_test-abi.json" - )); - - let asset_id = AssetId::new([1; 32]); - - let mut consensus_parameters = ConsensusParameters::default(); - consensus_parameters.set_base_asset_id(asset_id); - - let config = ChainConfig { - consensus_parameters, - ..Default::default() - }; - - let asset_base = AssetConfig { - id: asset_id, - num_coins: 1, - coin_amount: 10_000, - }; - - let wallet_config = WalletsConfig::new_multiple_assets(1, vec![asset_base]); - let wallets = launch_custom_provider_and_get_wallets(wallet_config, None, Some(config)).await?; - let wallet = wallets.first().expect("has wallet"); - - let contract_id = Contract::load_from( - "sway/contracts/contract_test/out/release/contract_test.bin", - LoadConfiguration::default(), - )? - .deploy(wallet, TxPolicies::default()) - .await?; - - let contract_instance = MyContract::new(contract_id, wallet.clone()); - - let response = contract_instance - .methods() - .initialize_counter(42) - .with_tx_policies(TxPolicies::default().with_tip(10)) - .call() - .await?; - - assert_eq!(42, response.value); - - Ok(()) -} - -#[tokio::test] -async fn max_fee_estimation_respects_tolerance() -> Result<()> { - use fuels::prelude::*; - - let mut call_wallet = WalletUnlocked::new_random(None); - - let call_coins = setup_single_asset_coins(call_wallet.address(), AssetId::BASE, 1000, 1); - - let mut deploy_wallet = WalletUnlocked::new_random(None); - let deploy_coins = - setup_single_asset_coins(deploy_wallet.address(), AssetId::BASE, 1, 1_000_000); - - let provider = - setup_test_provider([call_coins, deploy_coins].concat(), vec![], None, None).await?; - - call_wallet.set_provider(provider.clone()); - deploy_wallet.set_provider(provider.clone()); - - setup_program_test!( - Abigen(Contract( - name = "MyContract", - project = "e2e/sway/contracts/contract_test" - )), - Deploy( - name = "contract_instance", - wallet = "deploy_wallet", - contract = "MyContract" - ) - ); - let contract_instance = contract_instance.with_account(call_wallet.clone()); - - let max_fee_from_tx = |tolerance: f32| { - let contract_instance = contract_instance.clone(); - let provider = provider.clone(); - async move { - let builder = contract_instance - .methods() - .initialize_counter(42) - .transaction_builder() - .await - .unwrap(); - - assert_eq!( - builder.max_fee_estimation_tolerance, 0.05, - "Expected pre-set tolerance of 0.05" - ); - - builder - .with_max_fee_estimation_tolerance(tolerance) - .build(&provider) - .await - .unwrap() - .max_fee() - .unwrap() - } - }; - - let max_fee_from_builder = |tolerance: f32| { - let contract_instance = contract_instance.clone(); - let provider = provider.clone(); - async move { - contract_instance - .methods() - .initialize_counter(42) - .transaction_builder() - .await - .unwrap() - .with_max_fee_estimation_tolerance(tolerance) - .estimate_max_fee(&provider) - .await - .unwrap() - } - }; - - let base_amount_in_inputs = |tolerance: f32| { - let contract_instance = contract_instance.clone(); - let call_wallet = &call_wallet; - async move { - let mut tb = contract_instance - .methods() - .initialize_counter(42) - .transaction_builder() - .await - .unwrap() - .with_max_fee_estimation_tolerance(tolerance); - - call_wallet.adjust_for_fee(&mut tb, 0).await.unwrap(); - tb.inputs - .iter() - .filter_map(|input: &Input| match input { - Input::ResourceSigned { resource } - if resource.coin_asset_id().unwrap() == AssetId::BASE => - { - Some(resource.amount()) - } - _ => None, - }) - .sum::() - } - }; - - let no_increase_max_fee = max_fee_from_tx(0.0).await; - let increased_max_fee = max_fee_from_tx(2.00).await; - - assert_eq!( - increased_max_fee as f64 / no_increase_max_fee as f64, - 1.00 + 2.00 - ); - - let no_increase_max_fee = max_fee_from_builder(0.0).await; - let increased_max_fee = max_fee_from_builder(2.00).await; - assert_eq!( - increased_max_fee as f64 / no_increase_max_fee as f64, - 1.00 + 2.00 - ); - - let normal_base_asset = base_amount_in_inputs(0.0).await; - let more_base_asset_due_to_bigger_tolerance = base_amount_in_inputs(2.00).await; - assert_eq!( - more_base_asset_due_to_bigger_tolerance as f64 / normal_base_asset as f64, - 1.00 + 2.00 - ); - - Ok(()) -} - -#[tokio::test] -async fn blob_contract_deployment() -> Result<()> { - abigen!(Contract( - name = "MyContract", - abi = "e2e/sway/contracts/huge_contract/out/release/huge_contract-abi.json" - )); - - let contract_binary = "sway/contracts/huge_contract/out/release/huge_contract.bin"; - let contract_size = std::fs::metadata(contract_binary) - .expect("contract file not found") - .len(); - - assert!( - contract_size > 150_000, - "the testnet size limit was around 100kB, we want a contract bigger than that to reflect prod (current: {contract_size}B)" - ); - - let wallets = - launch_custom_provider_and_get_wallets(WalletsConfig::new(Some(2), None, None), None, None) - .await?; - - let provider = wallets[0].provider().unwrap().clone(); - - let consensus_parameters = provider.consensus_parameters(); - - let contract_max_size = consensus_parameters.contract_params().contract_max_size(); - assert!( - contract_size > contract_max_size, - "this test should ideally be run with a contract bigger than the max contract size ({contract_max_size}B) so that we know deployment couldn't have happened without blobs" - ); - - let contract = Contract::load_from(contract_binary, LoadConfiguration::default())?; - - let deploy_and_test = |wallet: WalletUnlocked, blob_size: BlobSizePolicy| { - let contract = &contract; - async move { - let contract_id = contract - .clone() - .deploy_as_loader(&wallet, TxPolicies::default(), blob_size) - .await?; - - let contract_instance = MyContract::new(contract_id, wallet.clone()); - - let response = contract_instance.methods().something().call().await?.value; - - assert_eq!(response, 1001); - Result::Ok(()) - } - }; - - { - // We're mostly limited by the payload size of the fuel-core endpoints - let percentage_of_theoretical_max = 0.95; - - deploy_and_test( - wallets[0].clone(), - BlobSizePolicy::Estimate { - percentage_of_theoretical_max, - }, - ) - .await?; - } - - { - deploy_and_test(wallets[1].clone(), BlobSizePolicy::AtMost { words: 6_000 }).await?; - } + let contract_instance = MyContract::new(contract_id, wallet); + let response = contract_instance.methods().something().call().await?.value; + assert_eq!(response, 1001); Ok(()) } diff --git a/packages/fuels-programs/src/contract.rs b/packages/fuels-programs/src/contract.rs index 91e6a9dde8..a2fdd5a3ad 100644 --- a/packages/fuels-programs/src/contract.rs +++ b/packages/fuels-programs/src/contract.rs @@ -1,7 +1,7 @@ -mod load; mod storage; use std::{ + borrow::Cow, collections::HashSet, fmt::Debug, fs, @@ -10,353 +10,169 @@ use std::{ use fuel_asm::{op, Instruction, RegId}; use fuel_tx::{Bytes32, Contract as FuelContract, ContractId, Salt, StorageSlot}; -use fuel_types::bytes::WORD_SIZE; use fuels_accounts::{provider::Provider, Account}; -use fuels_core::types::{ - bech32::Bech32ContractId, - errors::{error, Result}, - transaction::TxPolicies, - transaction_builders::{ - Blob, BlobId, BlobTransactionBuilder, CreateTransactionBuilder, TransactionBuilder, +use fuels_core::{ + constants::WORD_SIZE, + types::{ + bech32::Bech32ContractId, + errors::{error, Result}, + transaction::TxPolicies, + transaction_builders::{ + Blob, BlobId, BlobTransactionBuilder, CreateTransactionBuilder, TransactionBuilder, + }, }, }; -pub use load::*; pub use storage::*; -/// [`Contract`] is a struct to interface with a contract. That includes things such as -/// compiling, deploying, and running transactions against a contract. -#[derive(Debug, Clone)] -pub struct Contract { - binary: Vec, +#[derive(Debug, Clone, PartialEq)] +pub struct Contract { + code: Code, salt: Salt, storage_slots: Vec, - contract_id: ContractId, - code_root: Bytes32, - state_root: Bytes32, } -/// Used to control how the contract is going to get split up into blob tx. -pub enum BlobSizePolicy { - /// Contract chunks can be at most `words` * 8 bytes. - AtMost { words: usize }, - /// Note: Use a value less than 1.0 (100%): - /// The theoretical maximum is calculated based on the number of bytes that can fit in a blob transaction - /// without exceeding the maximum allowed transaction size. This calculation does not account for additional - /// limiting factors such as: - /// * network limitations on payload size - /// * the possibility of the transaction exceeding the maximum gas limit - /// * the size impact of any inputs/witnesses added to the transaction to cover its fee - Estimate { percentage_of_theoretical_max: f64 }, -} - -impl BlobSizePolicy { - async fn resolve_size(&self, provider: &Provider) -> Result { - let size = match self { - BlobSizePolicy::AtMost { words } => *words * WORD_SIZE, - BlobSizePolicy::Estimate { - percentage_of_theoretical_max, - } => { - let theoretical_max = BlobTransactionBuilder::default() - .estimate_max_blob_size(provider) - .await?; - - let percentage_of_theoretical_max = - (*percentage_of_theoretical_max * theoretical_max as f64) as usize; - - (percentage_of_theoretical_max / WORD_SIZE) * WORD_SIZE - } - }; - - if size == 0 { - Err(error!(Other, "blob size must be greater than 0")) - } else { - Ok(size) - } - } -} - -impl Contract { - pub fn new(binary: Vec, salt: Salt, storage_slots: Vec) -> Self { - let (contract_id, code_root, state_root) = - Self::compute_contract_id_and_state_root(&binary, &salt, &storage_slots); - - Self { - binary, - salt, - storage_slots, - contract_id, - code_root, - state_root, - } - } - - /// The contract code has been uploaded in blobs with [`BlobId`]s specified in `blob_ids`. This will create a loader - /// contract that, when deployed and executed, will load all the specified blobs into memory and delegate the call to the code contained in the blobs. - pub fn new_loader( - blob_ids: &[BlobId], - salt: Salt, - storage_slots: Vec, - ) -> Result { - // Loader asm code relies on there being at least one blob - if blob_ids.is_empty() { - return Err(error!(Other, "must provide at least one blob")); - } - - let code = Self::loader_contract(blob_ids)?; - Ok(Self::new(code, salt, storage_slots)) - } - - /// Splits the contract into blobs, submits them, and awaits confirmation. Then, it deploys a loader contract. - /// This loader contract will load the blobs into memory and delegate the call to the code contained within the blobs. - /// This method is useful for deploying large contracts. - pub async fn deploy_as_loader( - self, - account: &impl Account, - tx_policies: TxPolicies, - blob_size_policy: BlobSizePolicy, - ) -> Result { - let provider = account.try_provider()?; - - let blobs = self.generate_blobs(provider, blob_size_policy).await?; - let all_blob_ids = blobs.iter().map(|blob| blob.id()).collect::>(); - let mut already_uploaded = HashSet::new(); - - for blob in blobs { - let id = blob.id(); - - if already_uploaded.contains(&id) { - continue; - } - - let mut tb = BlobTransactionBuilder::default() - .with_blob(blob) - .with_tx_policies(tx_policies) - .with_max_fee_estimation_tolerance(0.05); - - account.adjust_for_fee(&mut tb, 0).await?; - account.add_witnesses(&mut tb)?; - - let tx = tb.build(provider).await?; - provider - .send_transaction_and_await_commit(tx) - .await? - .check(None)?; - - already_uploaded.insert(id); - } - - Self::new_loader(&all_blob_ids, self.salt, self.storage_slots)? - .deploy(account, tx_policies) - .await - } - - /// Splits the contract binary into blobs based on the size specified by `blob_size_policy`. - /// This is useful if you prefer to manually deploy the blobs. Once uploaded, you can use [`Contract::new_loader`] to create a loader contract. - pub async fn generate_blobs( - &self, - provider: &Provider, - policy: BlobSizePolicy, - ) -> Result> { - let blob_size = policy.resolve_size(provider).await?; - - let blobs = self - .binary - .chunks(blob_size) - .map(|chunk| Blob::new(chunk.to_vec())) - .collect(); - - Ok(blobs) - } - - // This function creates a contract that loads the specified blobs into memory and delegates the call to the code contained in the blobs. - fn loader_contract(blob_ids: &[BlobId]) -> Result> { - const BLOB_ID_SIZE: u16 = 32; - let get_instructions = |num_of_instructions, num_of_blobs| { - // There are 2 main steps: - // 1. Load the blob contents into memory - // 2. Jump to the beginning of the memory where the blobs were loaded - // After that the execution continues normally with the loaded contract reading our - // prepared fn selector and jumps to the selected contract method. - [ - // 1. load the blob contents into memory - // find the start of the hardcoded blob ids, which are located after the code ends, - op::move_(0x10, RegId::IS), - // 0x10 to hold the address of the current blob id - op::addi(0x10, 0x10, num_of_instructions * Instruction::SIZE as u16), - // The contract is going to be loaded from the current value of SP onwards, save - // the location into 0x16 so we can jump into it later on - op::move_(0x16, RegId::SP), - // loop counter - op::movi(0x13, num_of_blobs), - // LOOP starts here - // 0x11 to hold the size of the current blob - op::bsiz(0x11, 0x10), - // push the blob contents onto the stack - op::ldc(0x10, 0, 0x11, 1), - // move on to the next blob - op::addi(0x10, 0x10, BLOB_ID_SIZE), - // decrement the loop counter - op::subi(0x13, 0x13, 1), - // Jump backwards (3+1) instructions if the counter has not reached 0 - op::jnzb(0x13, RegId::ZERO, 3), - // 2. Jump into the memory where the contract is loaded - // what follows is called _jmp_mem by the sway compiler - // subtract the address contained in IS because jmp will add it back - op::sub(0x16, 0x16, RegId::IS), - // jmp will multiply by 4 so we need to divide to cancel that out - op::divi(0x16, 0x16, 4), - // jump to the start of the contract we loaded - op::jmp(0x16), - ] - }; - - let num_of_instructions = u16::try_from(get_instructions(0, 0).len()) - .expect("to never have more than u16::MAX instructions"); - - let num_of_blobs = u32::try_from(blob_ids.len()).map_err(|_| { - error!( - Other, - "the number of blobs ({}) exceeds the maximum number of blobs supported: {}", - blob_ids.len(), - u32::MAX - ) - })?; - - let instruction_bytes = get_instructions(num_of_instructions, num_of_blobs) - .into_iter() - .flat_map(|instruction| instruction.to_bytes()); - - let blob_bytes = blob_ids.iter().flatten().copied(); - - Ok(instruction_bytes.chain(blob_bytes).collect()) - } - - fn compute_contract_id_and_state_root( - binary: &[u8], - salt: &Salt, - storage_slots: &[StorageSlot], - ) -> (ContractId, Bytes32, Bytes32) { - let fuel_contract = FuelContract::from(binary); - let code_root = fuel_contract.root(); - let state_root = FuelContract::initial_state_root(storage_slots.iter()); - - let contract_id = fuel_contract.id(salt, &code_root, &state_root); - - (contract_id, code_root, state_root) - } - - pub fn with_salt(self, salt: impl Into) -> Self { - Self::new(self.binary, salt.into(), self.storage_slots) - } - - pub fn contract_id(&self) -> ContractId { - self.contract_id - } - - pub fn state_root(&self) -> Bytes32 { - self.state_root - } - - pub fn code_root(&self) -> Bytes32 { - self.code_root - } - - /// Deploys a compiled contract to a running node - /// To deploy a contract, you need an account with enough assets to pay for deployment. - /// This account will also receive the change. - pub async fn deploy( - self, - account: &impl Account, - tx_policies: TxPolicies, - ) -> Result { - let mut tb = CreateTransactionBuilder::prepare_contract_deployment( - self.binary, - self.contract_id, - self.state_root, - self.salt, - self.storage_slots, - tx_policies, - ) - .with_max_fee_estimation_tolerance(0.05); - - account.add_witnesses(&mut tb)?; - account.adjust_for_fee(&mut tb, 0).await?; - - let provider = account.try_provider()?; - - let tx = tb.build(provider).await?; - - provider - .send_transaction_and_await_commit(tx) - .await? - .check(None)?; - - Ok(self.contract_id.into()) - } - - pub fn load_from(binary_filepath: impl AsRef, config: LoadConfiguration) -> Result { - let binary_filepath = binary_filepath.as_ref(); - validate_path_and_extension(binary_filepath, "bin")?; - - let mut binary = fs::read(binary_filepath).map_err(|e| { - std::io::Error::new( - e.kind(), - format!("failed to read binary: {binary_filepath:?}: {e}"), - ) - })?; - - config.configurables.update_constants_in(&mut binary); - - let storage_slots = Self::determine_storage_slots(config.storage, binary_filepath)?; - - Ok(Self::new(binary, config.salt, storage_slots)) - } - - fn determine_storage_slots( - storage_config: StorageConfiguration, - binary_filepath: &Path, - ) -> Result> { - let autoload_enabled = storage_config.autoload_enabled(); - let user_overrides = storage_config.into_slots().collect::>(); - let slots = if autoload_enabled { - let mut slots = autoload_storage_slots(binary_filepath)?; - slots.add_overrides(user_overrides); - slots.into_iter().collect() - } else { - user_overrides - }; - - Ok(slots) - } - +impl Contract { pub fn salt(&self) -> Salt { self.salt } + pub fn with_salt(mut self, salt: impl Into) -> Self { + self.salt = salt.into(); + self + } + pub fn storage_slots(&self) -> &[StorageSlot] { &self.storage_slots } -} -fn autoload_storage_slots(contract_binary: &Path) -> Result { - let storage_file = expected_storage_slots_filepath(contract_binary) - .ok_or_else(|| error!(Other, "could not determine storage slots file"))?; - - StorageSlots::load_from_file(&storage_file) - .map_err(|_| error!(Other, "could not autoload storage slots from file: {storage_file:?}. \ - Either provide the file or disable autoloading in `StorageConfiguration`")) + pub fn with_storage_slots(mut self, storage_slots: Vec) -> Self { + self.storage_slots = storage_slots; + self + } } -fn expected_storage_slots_filepath(contract_binary: &Path) -> Option { - let dir = contract_binary.parent()?; - - let binary_filename = contract_binary.file_stem()?.to_str()?; - - Some(dir.join(format!("{binary_filename}-storage_slots.json"))) +mod regular; +pub use regular::*; + +mod loader; +pub use loader::*; + +// impl Contract { +// /// The contract code has been uploaded in blobs with [`BlobId`]s specified in `blob_ids`. This will create a loader +// /// contract that, when deployed and executed, will load all the specified blobs into memory and delegate the call to the code contained in the blobs. +// pub fn new_loader( +// blob_ids: &[BlobId], +// salt: Salt, +// storage_slots: Vec, +// ) -> Result { +// // Loader asm code relies on there being at least one blob +// if blob_ids.is_empty() { +// return Err(error!(Other, "must provide at least one blob")); +// } +// +// let code = Self::loader_contract(blob_ids)?; +// Ok(Self::new(code, salt, storage_slots)) +// } +// +// /// Splits the contract into blobs, submits them, and awaits confirmation. Then, it deploys a loader contract. +// /// This loader contract will load the blobs into memory and delegate the call to the code contained within the blobs. +// /// This method is useful for deploying large contracts. +// pub async fn deploy_as_loader( +// self, +// account: &impl Account, +// tx_policies: TxPolicies, +// blob_size_policy: BlobSizePolicy, +// ) -> Result { +// let provider = account.try_provider()?; +// +// let blobs = self.generate_blobs(provider, blob_size_policy).await?; +// let all_blob_ids = blobs.iter().map(|blob| blob.id()).collect::>(); +// let mut already_uploaded = HashSet::new(); +// +// for blob in blobs { +// let id = blob.id(); +// +// if already_uploaded.contains(&id) { +// continue; +// } +// +// let mut tb = BlobTransactionBuilder::default() +// .with_blob(blob) +// .with_tx_policies(tx_policies) +// .with_max_fee_estimation_tolerance(0.05); +// +// account.adjust_for_fee(&mut tb, 0).await?; +// account.add_witnesses(&mut tb)?; +// +// let tx = tb.build(provider).await?; +// provider +// .send_transaction_and_await_commit(tx) +// .await? +// .check(None)?; +// +// already_uploaded.insert(id); +// } +// +// Self::new_loader(&all_blob_ids, self.salt, self.storage_slots)? +// .deploy(account, tx_policies) +// .await +// } +// +// /// Splits the contract binary into blobs based on the size specified by `blob_size_policy`. +// /// This is useful if you prefer to manually deploy the blobs. Once uploaded, you can use [`Contract::new_loader`] to create a loader contract. +// pub async fn generate_blobs( +// &self, +// provider: &Provider, +// policy: BlobSizePolicy, +// ) -> Result> { +// let blob_size = policy.resolve_size(provider).await?; +// +// let blobs = self +// .binary +// .chunks(blob_size) +// .map(|chunk| Blob::new(chunk.to_vec())) +// .collect(); +// +// Ok(blobs) +// } +// +// +// pub fn load_from(binary_filepath: impl AsRef, config: LoadConfiguration) -> Result { +// let binary_filepath = binary_filepath.as_ref(); +// validate_path_and_extension(binary_filepath, "bin")?; +// +// let mut binary = fs::read(binary_filepath).map_err(|e| { +// std::io::Error::new( +// e.kind(), +// format!("failed to read binary: {binary_filepath:?}: {e}"), +// ) +// })?; +// +// config.configurables.update_constants_in(&mut binary); +// +// let storage_slots = Self::determine_storage_slots(config.storage, binary_filepath)?; +// +// Ok(Self::new(binary, config.salt, storage_slots)) +// } +// } + +fn compute_contract_id_and_state_root( + binary: &[u8], + salt: &Salt, + storage_slots: &[StorageSlot], +) -> (ContractId, Bytes32, Bytes32) { + let fuel_contract = FuelContract::from(binary); + let code_root = fuel_contract.root(); + let state_root = FuelContract::initial_state_root(storage_slots.iter()); + + let contract_id = fuel_contract.id(salt, &code_root, &state_root); + + (contract_id, code_root, state_root) } #[cfg(test)] mod tests { + use fuels_accounts::wallet::WalletUnlocked; use fuels_core::types::errors::Error; use tempfile::tempdir; diff --git a/packages/fuels-programs/src/contract/load.rs b/packages/fuels-programs/src/contract/load.rs deleted file mode 100644 index c7df990dc1..0000000000 --- a/packages/fuels-programs/src/contract/load.rs +++ /dev/null @@ -1,43 +0,0 @@ -use std::{default::Default, fmt::Debug}; - -use fuel_tx::Salt; -use fuels_core::Configurables; - -use crate::contract::StorageConfiguration; - -/// Configuration for contract deployment -#[derive(Debug, Clone, Default)] -pub struct LoadConfiguration { - pub(crate) storage: StorageConfiguration, - pub(crate) configurables: Configurables, - pub(crate) salt: Salt, -} - -impl LoadConfiguration { - pub fn new( - storage: StorageConfiguration, - configurables: impl Into, - salt: impl Into, - ) -> Self { - Self { - storage, - configurables: configurables.into(), - salt: salt.into(), - } - } - - pub fn with_storage_configuration(mut self, storage: StorageConfiguration) -> Self { - self.storage = storage; - self - } - - pub fn with_configurables(mut self, configurables: impl Into) -> Self { - self.configurables = configurables.into(); - self - } - - pub fn with_salt(mut self, salt: impl Into) -> Self { - self.salt = salt.into(); - self - } -} diff --git a/packages/fuels-programs/src/contract/loader.rs b/packages/fuels-programs/src/contract/loader.rs new file mode 100644 index 0000000000..9288479c95 --- /dev/null +++ b/packages/fuels-programs/src/contract/loader.rs @@ -0,0 +1,294 @@ +use std::borrow::Cow; +use std::collections::HashSet; + +use fuel_asm::{op, Instruction, RegId}; +use fuel_tx::{Bytes32, Contract as FuelContract, ContractId, Salt, StorageSlot}; +use fuels_accounts::{provider::Provider, Account}; +use fuels_core::types::errors::Result; +use fuels_core::types::transaction_builders::{Blob, BlobId}; +use fuels_core::{ + constants::WORD_SIZE, + types::{ + bech32::Bech32ContractId, + errors::error, + transaction::TxPolicies, + transaction_builders::{ + BlobTransactionBuilder, CreateTransactionBuilder, TransactionBuilder, + }, + }, +}; + +use super::{compute_contract_id_and_state_root, Contract, Regular}; + +// create a contract that loads the specified blobs into memory and delegates the call to the code contained in the blobs. +pub fn loader_contract_asm(blob_ids: &[BlobId]) -> Result> { + const BLOB_ID_SIZE: u16 = 32; + let get_instructions = |num_of_instructions, num_of_blobs| { + // There are 2 main steps: + // 1. Load the blob contents into memory + // 2. Jump to the beginning of the memory where the blobs were loaded + // After that the execution continues normally with the loaded contract reading our + // prepared fn selector and jumps to the selected contract method. + [ + // 1. load the blob contents into memory + // find the start of the hardcoded blob ids, which are located after the code ends, + op::move_(0x10, RegId::IS), + // 0x10 to hold the address of the current blob id + op::addi(0x10, 0x10, num_of_instructions * Instruction::SIZE as u16), + // The contract is going to be loaded from the current value of SP onwards, save + // the location into 0x16 so we can jump into it later on + op::move_(0x16, RegId::SP), + // loop counter + op::movi(0x13, num_of_blobs), + // LOOP starts here + // 0x11 to hold the size of the current blob + op::bsiz(0x11, 0x10), + // push the blob contents onto the stack + op::ldc(0x10, 0, 0x11, 1), + // move on to the next blob + op::addi(0x10, 0x10, BLOB_ID_SIZE), + // decrement the loop counter + op::subi(0x13, 0x13, 1), + // Jump backwards (3+1) instructions if the counter has not reached 0 + op::jnzb(0x13, RegId::ZERO, 3), + // 2. Jump into the memory where the contract is loaded + // what follows is called _jmp_mem by the sway compiler + // subtract the address contained in IS because jmp will add it back + op::sub(0x16, 0x16, RegId::IS), + // jmp will multiply by 4 so we need to divide to cancel that out + op::divi(0x16, 0x16, 4), + // jump to the start of the contract we loaded + op::jmp(0x16), + ] + }; + + let num_of_instructions = u16::try_from(get_instructions(0, 0).len()) + .expect("to never have more than u16::MAX instructions"); + + let num_of_blobs = u32::try_from(blob_ids.len()).map_err(|_| { + error!( + Other, + "the number of blobs ({}) exceeds the maximum number of blobs supported: {}", + blob_ids.len(), + u32::MAX + ) + })?; + + let instruction_bytes = get_instructions(num_of_instructions, num_of_blobs) + .into_iter() + .flat_map(|instruction| instruction.to_bytes()); + + let blob_bytes = blob_ids.iter().flatten().copied(); + + Ok(instruction_bytes.chain(blob_bytes).collect()) +} + +#[derive(Debug, Clone)] +pub struct BlobsUploaded { + blob_ids: Vec, +} + +#[derive(Debug, Clone)] +pub struct BlobsNotUploaded { + blobs: Vec, +} + +#[derive(Debug, Clone)] +pub struct Loader { + as_blobs: Blobs, +} + +impl Contract> { + pub fn code(&self) -> Cow<[u8]> { + let ids: Vec<_> = self.blob_ids(); + loader_contract_asm(&ids) + .expect("a contract to be creatable due to the check done in loader_for_blobs") + .into() + } + + pub fn contract_id(&self) -> ContractId { + self.compute_roots().0 + } + + pub fn code_root(&self) -> Bytes32 { + self.compute_roots().1 + } + + pub fn state_root(&self) -> Bytes32 { + self.compute_roots().2 + } + + fn compute_roots(&self) -> (ContractId, Bytes32, Bytes32) { + compute_contract_id_and_state_root(&self.code(), &self.salt, &self.storage_slots) + } + + pub fn loader_for_blobs( + blobs: Vec, + salt: Salt, + storage_slots: Vec, + ) -> Result { + if blobs.is_empty() { + return Err(error!(Other, "must provide at least one blob")); + } + + let idx_of_last_blob = blobs.len().saturating_sub(1); + let idx_of_offender = blobs.iter().enumerate().find_map(|(idx, blob)| { + (blob.data.len() % WORD_SIZE != 0 && idx != idx_of_last_blob).then_some(idx) + }); + + if let Some(idx) = idx_of_offender { + return Err(error!( + Other, + "blob {}/{} has a size of {} bytes, which is not a multiple of {WORD_SIZE}", + idx.saturating_add(1), + blobs.len(), + blobs[idx].data.len() + )); + } + + let ids = blobs.iter().map(|blob| blob.id()).collect::>(); + + // validate that the loader contract can be created + loader_contract_asm(&ids)?; + + Ok(Self { + code: Loader { + as_blobs: BlobsNotUploaded { blobs }, + }, + salt, + storage_slots, + }) + } + + pub fn blobs(&self) -> &[Blob] { + self.code.as_blobs.blobs.as_slice() + } + + pub fn blob_ids(&self) -> Vec { + self.code + .as_blobs + .blobs + .iter() + .map(|blob| blob.id()) + .collect() + } + + pub async fn upload_blobs( + self, + account: &impl Account, + tx_policies: TxPolicies, + ) -> Result>> { + let provider = account.try_provider()?; + + let all_blob_ids = self.blob_ids(); + let mut already_uploaded = HashSet::new(); + + for blob in self.code.as_blobs.blobs { + let id = blob.id(); + + if already_uploaded.contains(&id) { + continue; + } + + let mut tb = BlobTransactionBuilder::default() + .with_blob(blob) + .with_tx_policies(tx_policies) + .with_max_fee_estimation_tolerance(0.05); + + account.adjust_for_fee(&mut tb, 0).await?; + account.add_witnesses(&mut tb)?; + + let tx = tb.build(provider).await?; + provider + .send_transaction_and_await_commit(tx) + .await? + .check(None)?; + + already_uploaded.insert(id); + } + + Contract::loader_for_blob_ids(all_blob_ids, self.salt, self.storage_slots) + } + + pub async fn deploy( + self, + account: &impl Account, + tx_policies: TxPolicies, + ) -> Result { + self.upload_blobs(account, tx_policies) + .await? + .deploy(account, tx_policies) + .await + } + + pub fn revert_to_regular(self) -> Contract { + let code = self + .code + .as_blobs + .blobs + .into_iter() + .flat_map(|blob| blob.data) + .collect(); + + Contract::regular(code, self.salt, self.storage_slots) + } +} + +impl Contract> { + pub fn code(&self) -> Cow<[u8]> { + loader_contract_asm(&self.code.as_blobs.blob_ids) + .expect("a contract to be creatable due to the check done in loader_for_blobs") + .into() + } + + pub fn contract_id(&self) -> ContractId { + self.compute_roots().0 + } + + pub fn code_root(&self) -> Bytes32 { + self.compute_roots().1 + } + + pub fn state_root(&self) -> Bytes32 { + self.compute_roots().2 + } + + pub fn compute_roots(&self) -> (ContractId, Bytes32, Bytes32) { + compute_contract_id_and_state_root(&self.code(), &self.salt, &self.storage_slots) + } + + pub fn loader_for_blob_ids( + blob_ids: Vec, + salt: Salt, + storage_slots: Vec, + ) -> Result { + if blob_ids.is_empty() { + return Err(error!(Other, "must provide at least one blob")); + } + + // validate that the loader contract can be created + loader_contract_asm(&blob_ids)?; + + Ok(Self { + code: Loader { + as_blobs: BlobsUploaded { blob_ids }, + }, + salt, + storage_slots, + }) + } + + pub fn blob_ids(&self) -> &[BlobId] { + &self.code.as_blobs.blob_ids + } + + pub async fn deploy( + self, + account: &impl Account, + tx_policies: TxPolicies, + ) -> Result { + Contract::regular(self.code().into_owned(), self.salt, self.storage_slots) + .deploy(account, tx_policies) + .await + } +} diff --git a/packages/fuels-programs/src/contract/regular.rs b/packages/fuels-programs/src/contract/regular.rs new file mode 100644 index 0000000000..2a9c0bf4c6 --- /dev/null +++ b/packages/fuels-programs/src/contract/regular.rs @@ -0,0 +1,186 @@ +use std::{borrow::Cow, path::Path}; + +use std::{default::Default, fmt::Debug}; + +use fuel_tx::{Bytes32, ContractId, Salt, StorageSlot}; +use fuels_accounts::Account; +use fuels_core::Configurables; +use fuels_core::{ + constants::WORD_SIZE, + error, + types::{ + bech32::Bech32ContractId, + errors::Result, + transaction::TxPolicies, + transaction_builders::{Blob, CreateTransactionBuilder}, + }, +}; + +use super::{ + compute_contract_id_and_state_root, validate_path_and_extension, BlobsNotUploaded, Contract, + Loader, StorageConfiguration, +}; + +#[derive(Debug, Clone, PartialEq)] +pub struct Regular { + code: Vec, +} + +impl Contract { + pub fn with_code(self, code: Vec) -> Self { + Self { + code: Regular { code }, + salt: self.salt, + storage_slots: self.storage_slots, + } + } + + pub fn code(&self) -> Cow<[u8]> { + self.code.code.as_slice().into() + } + + pub fn contract_id(&self) -> ContractId { + self.compute_roots().0 + } + + pub fn code_root(&self) -> Bytes32 { + self.compute_roots().1 + } + + pub fn state_root(&self) -> Bytes32 { + self.compute_roots().2 + } + + fn compute_roots(&self) -> (ContractId, Bytes32, Bytes32) { + compute_contract_id_and_state_root(&self.code.code, &self.salt, &self.storage_slots) + } + + pub fn load_from( + binary_filepath: impl AsRef, + config: LoadConfiguration, + ) -> Result> { + let binary_filepath = binary_filepath.as_ref(); + validate_path_and_extension(binary_filepath, "bin")?; + + let mut binary = std::fs::read(binary_filepath).map_err(|e| { + std::io::Error::new( + e.kind(), + format!("failed to read binary: {binary_filepath:?}: {e}"), + ) + })?; + + config.configurables.update_constants_in(&mut binary); + + let storage_slots = super::determine_storage_slots(config.storage, binary_filepath)?; + + Ok(Contract { + code: Regular { code: binary }, + salt: config.salt, + storage_slots, + }) + } + + pub fn regular( + code: Vec, + salt: Salt, + storage_slots: Vec, + ) -> Contract { + Contract { + code: Regular { code }, + salt, + storage_slots, + } + } + + /// Deploys a compiled contract to a running node + /// To deploy a contract, you need an account with enough assets to pay for deployment. + /// This account will also receive the change. + pub async fn deploy( + self, + account: &impl Account, + tx_policies: TxPolicies, + ) -> Result { + let contract_id = self.contract_id(); + let state_root = self.state_root(); + let salt = self.salt; + let storage_slots = self.storage_slots; + + let mut tb = CreateTransactionBuilder::prepare_contract_deployment( + self.code.code.to_vec(), + contract_id, + state_root, + salt, + storage_slots.to_vec(), + tx_policies, + ) + .with_max_fee_estimation_tolerance(0.05); + + account.add_witnesses(&mut tb)?; + account.adjust_for_fee(&mut tb, 0).await?; + + let provider = account.try_provider()?; + + let tx = tb.build(provider).await?; + + provider + .send_transaction_and_await_commit(tx) + .await? + .check(None)?; + + Ok(contract_id.into()) + } + + pub fn convert_to_loader( + self, + max_words_per_blob: usize, + ) -> Result>> { + if max_words_per_blob == 0 { + return Err(error!(Other, "blob size must be greater than 0")); + } + let blobs = self + .code + .code + .chunks(max_words_per_blob.saturating_mul(WORD_SIZE)) + .map(|chunk| Blob::new(chunk.to_vec())) + .collect(); + + Contract::loader_for_blobs(blobs, self.salt, self.storage_slots) + } +} + +/// Configuration for contract deployment +#[derive(Debug, Clone, Default)] +pub struct LoadConfiguration { + pub(crate) storage: StorageConfiguration, + pub(crate) configurables: Configurables, + pub(crate) salt: Salt, +} + +impl LoadConfiguration { + pub fn new( + storage: StorageConfiguration, + configurables: impl Into, + salt: impl Into, + ) -> Self { + Self { + storage, + configurables: configurables.into(), + salt: salt.into(), + } + } + + pub fn with_storage_configuration(mut self, storage: StorageConfiguration) -> Self { + self.storage = storage; + self + } + + pub fn with_configurables(mut self, configurables: impl Into) -> Self { + self.configurables = configurables.into(); + self + } + + pub fn with_salt(mut self, salt: impl Into) -> Self { + self.salt = salt.into(); + self + } +} diff --git a/packages/fuels-programs/src/contract/storage.rs b/packages/fuels-programs/src/contract/storage.rs index 16859e1ec9..834a2eb376 100644 --- a/packages/fuels-programs/src/contract/storage.rs +++ b/packages/fuels-programs/src/contract/storage.rs @@ -1,4 +1,10 @@ -use std::{collections::HashMap, default::Default, fmt::Debug, io, path::Path}; +use std::{ + collections::HashMap, + default::Default, + fmt::Debug, + io, + path::{Path, PathBuf}, +}; use fuel_tx::{Bytes32, StorageSlot}; use fuels_core::types::errors::{error, Result}; @@ -108,6 +114,39 @@ impl StorageSlots { } } +pub(crate) fn determine_storage_slots( + storage_config: StorageConfiguration, + binary_filepath: &Path, +) -> Result> { + let autoload_enabled = storage_config.autoload_enabled(); + let user_overrides = storage_config.into_slots().collect::>(); + let slots = if autoload_enabled { + let mut slots = autoload_storage_slots(binary_filepath)?; + slots.add_overrides(user_overrides); + slots.into_iter().collect() + } else { + user_overrides + }; + + Ok(slots) +} + +pub(crate) fn autoload_storage_slots(contract_binary: &Path) -> Result { + let storage_file = expected_storage_slots_filepath(contract_binary) + .ok_or_else(|| error!(Other, "could not determine storage slots file"))?; + + StorageSlots::load_from_file(&storage_file) + .map_err(|_| error!(Other, "could not autoload storage slots from file: {storage_file:?}. \ + Either provide the file or disable autoloading in `StorageConfiguration`")) +} + +pub(crate) fn expected_storage_slots_filepath(contract_binary: &Path) -> Option { + let dir = contract_binary.parent()?; + + let binary_filename = contract_binary.file_stem()?.to_str()?; + + Some(dir.join(format!("{binary_filename}-storage_slots.json"))) +} pub(crate) fn validate_path_and_extension(file_path: &Path, extension: &str) -> Result<()> { if !file_path.exists() { return Err(error!(IO, "file {file_path:?} does not exist")); diff --git a/packages/fuels/src/lib.rs b/packages/fuels/src/lib.rs index 0f0004b1d3..b3835272f6 100644 --- a/packages/fuels/src/lib.rs +++ b/packages/fuels/src/lib.rs @@ -77,7 +77,7 @@ pub mod prelude { macros::setup_program_test, programs::{ calls::{CallHandler, CallParameters, ContractDependency, Execution}, - contract::{BlobSizePolicy, Contract, LoadConfiguration, StorageConfiguration}, + contract::{Contract, LoadConfiguration, StorageConfiguration}, }, test_helpers::*, types::transaction_builders::*, From 9820cb94665db6ffe943c665340664e612ad6efd Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Thu, 8 Aug 2024 15:07:37 +0200 Subject: [PATCH 34/50] docs work --- docs/src/deploying/large_contract.md | 34 +++++-- e2e/tests/configurables.rs | 69 ++++++++++++- examples/contracts/src/lib.rs | 72 ++++++++------ packages/fuels-core/src/lib.rs | 2 +- packages/fuels-programs/src/contract.rs | 99 ------------------- .../fuels-programs/src/contract/loader.rs | 7 ++ .../fuels-programs/src/contract/regular.rs | 53 ++++++++-- 7 files changed, 193 insertions(+), 143 deletions(-) diff --git a/docs/src/deploying/large_contract.md b/docs/src/deploying/large_contract.md index a6b0c78e7e..215de57cc4 100644 --- a/docs/src/deploying/large_contract.md +++ b/docs/src/deploying/large_contract.md @@ -12,21 +12,43 @@ you can deploy it in parts using a segmented approach: {{#include ../../../examples/contracts/src/lib.rs:deploy_via_loader}} ``` -In this process, your contract code is automatically divided into chunks based on the specified policy: +When you convert a regular contract into a loader contract the following happens: + +* Your contract code is replaced with the code of the loader contract +* the original contract code is separated into blobs that will be deployed via blob transactions to the chain prior to the deployment of the contract itself. +* The new loader code will, upon invocation, load the blobs into memory and execute your original contract. + +After deploying the loader contract, you can interact with it just as you would with a traditionally deployed contract: ```rust,ignore -{{#include ../../../examples/contracts/src/lib.rs:blob_policy}} +{{#include ../../../examples/contracts/src/lib.rs:use_loader}} ``` -Each unique chunk is deployed as a separate blob transaction. Once all the blob transactions have been successfully committed, a loader contract is created. This loader, when invoked, will load the chunks into memory using the [LDC (Load Code from an External Contract)](https://docs.fuel.network/docs/specs/fuel-vm/instruction-set/#ldc-load-code-from-an-external-contract) instruction and execute your original contract. +There is also a helper that will deploy your contract normally, if its size is below the limit, and as a loader contract otherwise: -After deploying the loader contract, you can interact with it just as you would with a traditionally deployed contract: +```rust,ignore +{{#include ../../../examples/contracts/src/lib.rs:auto_convert_to_loader}} +``` + +You can also separate the blob upload from the deployment of the contract for more fine grained control: ```rust,ignore -{{#include ../../../examples/contracts/src/lib.rs:use_loader}} +{{#include ../../../examples/contracts/src/lib.rs:upload_blobs_then_deploy}} +``` + +Or split your contract code into blobs however you wish and then create a loader and deploy: + +```rust,ignore +{{#include ../../../examples/contracts/src/lib.rs:manual_blobs_then_deploy}} +``` + +Or even upload the blobs yourself and just do the loader deployment: + +```rust,ignore +{{#include ../../../examples/contracts/src/lib.rs:manual_blob_upload_then_deploy}} ``` -## Chunk sizes +## Blob size The size of a Blob transaction is limited by three things: diff --git a/e2e/tests/configurables.rs b/e2e/tests/configurables.rs index fa3b1affc4..7bba238de8 100644 --- a/e2e/tests/configurables.rs +++ b/e2e/tests/configurables.rs @@ -124,7 +124,7 @@ async fn contract_configurables() -> Result<()> { let contract_id = Contract::load_from( "sway/contracts/configurables/out/release/configurables.bin", - LoadConfiguration::default().with_configurables(configurables), + LoadConfiguration::default().with_configurables(configurables.clone()), )? .deploy(&wallet, TxPolicies::default()) .await?; @@ -158,6 +158,73 @@ async fn contract_configurables() -> Result<()> { Ok(()) } +#[tokio::test] +async fn contract_manual_configurables() -> Result<()> { + setup_program_test!( + Abigen(Contract( + name = "MyContract", + project = "e2e/sway/contracts/configurables" + )), + Wallets("wallet") + ); + + let str_4: SizedAsciiString<4> = "FUEL".try_into()?; + let new_struct = StructWithGeneric { + field_1: 16u8, + field_2: 32, + }; + let new_enum = EnumWithGeneric::VariantTwo; + + let configurables = MyContractConfigurables::default() + .with_BOOL(false)? + .with_U8(7)? + .with_U16(15)? + .with_U32(31)? + .with_U64(63)? + .with_U256(U256::from(8))? + .with_B256(Bits256([2; 32]))? + .with_STR_4(str_4.clone())? + .with_TUPLE((7, false))? + .with_ARRAY([252, 253, 254])? + .with_STRUCT(new_struct.clone())? + .with_ENUM(new_enum.clone())?; + + let contract_id = Contract::load_from( + "sway/contracts/configurables/out/release/configurables.bin", + LoadConfiguration::default(), + )? + .with_configurables(configurables) + .deploy(&wallet, TxPolicies::default()) + .await?; + + let contract_instance = MyContract::new(contract_id, wallet.clone()); + + let response = contract_instance + .methods() + .return_configurables() + .call() + .await?; + + let expected_value = ( + false, + 7, + 15, + 31, + 63, + U256::from(8), + Bits256([2; 32]), + str_4, + (7, false), + [252, 253, 254], + new_struct, + new_enum, + ); + + assert_eq!(response.value, expected_value); + + Ok(()) +} + #[tokio::test] async fn script_configurables() -> Result<()> { // ANCHOR: script_configurables diff --git a/examples/contracts/src/lib.rs b/examples/contracts/src/lib.rs index e9c71094de..fd2fbe027f 100644 --- a/examples/contracts/src/lib.rs +++ b/examples/contracts/src/lib.rs @@ -998,34 +998,44 @@ mod tests { ); let contract_binary = "../../e2e/sway/contracts/huge_contract/out/release/huge_contract.bin"; - let contract = Contract::load_from(contract_binary, LoadConfiguration::default())?; - - let contract_size = std::fs::metadata(contract_binary)?.len(); let provider: Provider = main_wallet.try_provider()?.clone(); // ANCHOR: show_contract_is_too_big + let contract = Contract::load_from(contract_binary, LoadConfiguration::default())?; let max_allowed = provider .consensus_parameters() .contract_params() .contract_max_size(); - assert!(contract_size > max_allowed); + assert!(contract.code().len() as u64 > max_allowed); // ANCHOR_END: show_contract_is_too_big let wallet = &main_wallet; // ANCHOR: deploy_via_loader - let contract_id = contract - .deploy_as_loader( - wallet, - TxPolicies::default(), - // ANCHOR: blob_policy - BlobSizePolicy::AtMost { words: 10_000 }, - // ANCHOR_END: blob_policy - ) + let max_words_per_blob = 10_000; + let contract_id = Contract::load_from(contract_binary, LoadConfiguration::default())? + .convert_to_loader(max_words_per_blob)? + .deploy(wallet, TxPolicies::default()) .await?; // ANCHOR_END: deploy_via_loader + // ANCHOR: auto_convert_to_loader + let max_words_per_blob = 10_000; + let contract_id = Contract::load_from(contract_binary, LoadConfiguration::default())? + .smart_deploy(wallet, TxPolicies::default(), max_words_per_blob) + .await?; + // ANCHOR_END: auto_convert_to_loader + + // ANCHOR: upload_blobs_then_deploy + let contract_id = Contract::load_from(contract_binary, LoadConfiguration::default())? + .convert_to_loader(max_words_per_blob)? + .upload_blobs(wallet, TxPolicies::default()) + .await? + .deploy(wallet, TxPolicies::default()) + .await?; + // ANCHOR_END: upload_blobs_then_deploy + let wallet = main_wallet.clone(); // ANCHOR: use_loader let contract_instance = MyContract::new(contract_id, wallet); @@ -1041,27 +1051,34 @@ mod tests { provider.consensus_parameters().tx_params().max_gas_per_tx(); // ANCHOR_END: show_max_tx_gas - #[allow(unused_variables)] - // ANCHOR: estimate_chunk_size - let policy = BlobSizePolicy::Estimate { - percentage_of_theoretical_max: 0.95, - }; - // ANCHOR_END: estimate_chunk_size - let wallet = main_wallet; - // ANCHOR: manual_contract_chunking - let code = std::fs::read(contract_binary)?; + // ANCHOR: manual_blobs_then_deploy let chunk_size = 100_000; assert!( chunk_size % 8 == 0, "all chunks, except the last, must be word-aligned" ); + let blobs = contract + .code() + .chunks(chunk_size) + .map(|chunk| Blob::new(chunk.to_vec())) + .collect(); + + let contract_id = Contract::loader_for_blobs(blobs, Salt::zeroed(), vec![])? + .deploy(&wallet, TxPolicies::default()) + .await?; + // ANCHOR_END: manual_blobs_then_deploy + + // ANCHOR: manual_blob_upload_then_deploy + let max_words_per_blob = 10_000; + let blobs = Contract::load_from(contract_binary, LoadConfiguration::default())? + .convert_to_loader(max_words_per_blob)? + .blobs() + .to_vec(); let mut all_blob_ids = vec![]; let mut already_uploaded_blobs = HashSet::new(); - for chunk in code.chunks(chunk_size) { - let blob = Blob::new(chunk.to_vec()); - + for blob in blobs { let blob_id = blob.id(); all_blob_ids.push(blob_id); @@ -1083,13 +1100,10 @@ mod tests { already_uploaded_blobs.insert(blob_id); } - let contract_id = Contract::new_loader(&all_blob_ids, Salt::default(), vec![])? + let contract_id = Contract::loader_for_blob_ids(all_blob_ids, Salt::zeroed(), vec![])? .deploy(&wallet, TxPolicies::default()) .await?; - let contract_instance = MyContract::new(contract_id, wallet); - let response = contract_instance.methods().something().call().await?.value; - assert_eq!(response, 1001); - // ANCHOR: manual_contract_chunking + // ANCHOR_END: manual_blob_upload_then_deploy Ok(()) } diff --git a/packages/fuels-core/src/lib.rs b/packages/fuels-core/src/lib.rs index 4fe809b030..fb9160f2c0 100644 --- a/packages/fuels-core/src/lib.rs +++ b/packages/fuels-core/src/lib.rs @@ -5,7 +5,7 @@ mod utils; pub use utils::*; -#[derive(Debug, Clone, Default)] +#[derive(Debug, Clone, Default, PartialEq)] pub struct Configurables { offsets_with_data: Vec<(u64, Vec)>, } diff --git a/packages/fuels-programs/src/contract.rs b/packages/fuels-programs/src/contract.rs index a2fdd5a3ad..694ccb2317 100644 --- a/packages/fuels-programs/src/contract.rs +++ b/packages/fuels-programs/src/contract.rs @@ -57,105 +57,6 @@ pub use regular::*; mod loader; pub use loader::*; -// impl Contract { -// /// The contract code has been uploaded in blobs with [`BlobId`]s specified in `blob_ids`. This will create a loader -// /// contract that, when deployed and executed, will load all the specified blobs into memory and delegate the call to the code contained in the blobs. -// pub fn new_loader( -// blob_ids: &[BlobId], -// salt: Salt, -// storage_slots: Vec, -// ) -> Result { -// // Loader asm code relies on there being at least one blob -// if blob_ids.is_empty() { -// return Err(error!(Other, "must provide at least one blob")); -// } -// -// let code = Self::loader_contract(blob_ids)?; -// Ok(Self::new(code, salt, storage_slots)) -// } -// -// /// Splits the contract into blobs, submits them, and awaits confirmation. Then, it deploys a loader contract. -// /// This loader contract will load the blobs into memory and delegate the call to the code contained within the blobs. -// /// This method is useful for deploying large contracts. -// pub async fn deploy_as_loader( -// self, -// account: &impl Account, -// tx_policies: TxPolicies, -// blob_size_policy: BlobSizePolicy, -// ) -> Result { -// let provider = account.try_provider()?; -// -// let blobs = self.generate_blobs(provider, blob_size_policy).await?; -// let all_blob_ids = blobs.iter().map(|blob| blob.id()).collect::>(); -// let mut already_uploaded = HashSet::new(); -// -// for blob in blobs { -// let id = blob.id(); -// -// if already_uploaded.contains(&id) { -// continue; -// } -// -// let mut tb = BlobTransactionBuilder::default() -// .with_blob(blob) -// .with_tx_policies(tx_policies) -// .with_max_fee_estimation_tolerance(0.05); -// -// account.adjust_for_fee(&mut tb, 0).await?; -// account.add_witnesses(&mut tb)?; -// -// let tx = tb.build(provider).await?; -// provider -// .send_transaction_and_await_commit(tx) -// .await? -// .check(None)?; -// -// already_uploaded.insert(id); -// } -// -// Self::new_loader(&all_blob_ids, self.salt, self.storage_slots)? -// .deploy(account, tx_policies) -// .await -// } -// -// /// Splits the contract binary into blobs based on the size specified by `blob_size_policy`. -// /// This is useful if you prefer to manually deploy the blobs. Once uploaded, you can use [`Contract::new_loader`] to create a loader contract. -// pub async fn generate_blobs( -// &self, -// provider: &Provider, -// policy: BlobSizePolicy, -// ) -> Result> { -// let blob_size = policy.resolve_size(provider).await?; -// -// let blobs = self -// .binary -// .chunks(blob_size) -// .map(|chunk| Blob::new(chunk.to_vec())) -// .collect(); -// -// Ok(blobs) -// } -// -// -// pub fn load_from(binary_filepath: impl AsRef, config: LoadConfiguration) -> Result { -// let binary_filepath = binary_filepath.as_ref(); -// validate_path_and_extension(binary_filepath, "bin")?; -// -// let mut binary = fs::read(binary_filepath).map_err(|e| { -// std::io::Error::new( -// e.kind(), -// format!("failed to read binary: {binary_filepath:?}: {e}"), -// ) -// })?; -// -// config.configurables.update_constants_in(&mut binary); -// -// let storage_slots = Self::determine_storage_slots(config.storage, binary_filepath)?; -// -// Ok(Self::new(binary, config.salt, storage_slots)) -// } -// } - fn compute_contract_id_and_state_root( binary: &[u8], salt: &Salt, diff --git a/packages/fuels-programs/src/contract/loader.rs b/packages/fuels-programs/src/contract/loader.rs index 9288479c95..775f7791c1 100644 --- a/packages/fuels-programs/src/contract/loader.rs +++ b/packages/fuels-programs/src/contract/loader.rs @@ -122,6 +122,11 @@ impl Contract> { compute_contract_id_and_state_root(&self.code(), &self.salt, &self.storage_slots) } + /// This creates a loader contract for the code found in `blobs`. Deploying this contract + /// happens in two stages: + /// 1. the blobs are uploaded + /// 2. the loader contract is deployed + /// The loader contract, when executed, will load all the given blobs into memory and delegate the call to the original contract code contained in the blobs. pub fn loader_for_blobs( blobs: Vec, salt: Salt, @@ -257,6 +262,8 @@ impl Contract> { compute_contract_id_and_state_root(&self.code(), &self.salt, &self.storage_slots) } + /// The contract code has been uploaded in blobs with [`BlobId`]s specified in `blob_ids`. This will create a loader + /// contract that, when deployed and executed, will load all the specified blobs into memory and delegate the call to the code contained in the blobs. pub fn loader_for_blob_ids( blob_ids: Vec, salt: Salt, diff --git a/packages/fuels-programs/src/contract/regular.rs b/packages/fuels-programs/src/contract/regular.rs index 2a9c0bf4c6..9ac5f244ea 100644 --- a/packages/fuels-programs/src/contract/regular.rs +++ b/packages/fuels-programs/src/contract/regular.rs @@ -4,6 +4,7 @@ use std::{default::Default, fmt::Debug}; use fuel_tx::{Bytes32, ContractId, Salt, StorageSlot}; use fuels_accounts::Account; +use fuels_core::types::DryRunner; use fuels_core::Configurables; use fuels_core::{ constants::WORD_SIZE, @@ -24,19 +25,32 @@ use super::{ #[derive(Debug, Clone, PartialEq)] pub struct Regular { code: Vec, + configurables: Configurables, } impl Contract { pub fn with_code(self, code: Vec) -> Self { Self { - code: Regular { code }, + code: Regular { code, ..self.code }, salt: self.salt, storage_slots: self.storage_slots, } } + pub fn with_configurables(self, configurables: impl Into) -> Self { + Self { + code: Regular { + configurables: configurables.into(), + ..self.code + }, + ..self + } + } + pub fn code(&self) -> Cow<[u8]> { - self.code.code.as_slice().into() + let mut code = self.code.code.clone(); + self.code.configurables.update_constants_in(&mut code); + code.into() } pub fn contract_id(&self) -> ContractId { @@ -62,19 +76,20 @@ impl Contract { let binary_filepath = binary_filepath.as_ref(); validate_path_and_extension(binary_filepath, "bin")?; - let mut binary = std::fs::read(binary_filepath).map_err(|e| { + let binary = std::fs::read(binary_filepath).map_err(|e| { std::io::Error::new( e.kind(), format!("failed to read binary: {binary_filepath:?}: {e}"), ) })?; - config.configurables.update_constants_in(&mut binary); - let storage_slots = super::determine_storage_slots(config.storage, binary_filepath)?; Ok(Contract { - code: Regular { code: binary }, + code: Regular { + code: binary, + configurables: config.configurables, + }, salt: config.salt, storage_slots, }) @@ -86,7 +101,10 @@ impl Contract { storage_slots: Vec, ) -> Contract { Contract { - code: Regular { code }, + code: Regular { + code, + configurables: Configurables::default(), + }, salt, storage_slots, } @@ -146,6 +164,27 @@ impl Contract { Contract::loader_for_blobs(blobs, self.salt, self.storage_slots) } + + pub async fn smart_deploy( + self, + account: &impl Account, + tx_policies: TxPolicies, + max_words_per_blob: usize, + ) -> Result { + let provider = account.try_provider()?; + let max_contract_size = provider + .consensus_parameters() + .contract_params() + .contract_max_size() as usize; + + if self.code.code.len() <= max_contract_size { + self.deploy(account, tx_policies).await + } else { + self.convert_to_loader(max_words_per_blob)? + .deploy(account, tx_policies) + .await + } + } } /// Configuration for contract deployment From b9fd5de64eb546bd0a615f747bc9421ea38b4a5a Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Thu, 8 Aug 2024 15:26:39 +0200 Subject: [PATCH 35/50] pause --- .github/workflows/ci.yml | 2 +- e2e/tests/configurables.rs | 2 +- e2e/tests/contracts.rs | 4318 ++++++++--------- examples/contracts/src/lib.rs | 4 +- .../provider/supported_fuel_core_version.rs | 2 +- .../fuels-programs/src/contract/regular.rs | 2 +- 6 files changed, 2154 insertions(+), 2176 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 868ba75b1e..f35ba8b73e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,7 +16,7 @@ env: CARGO_TERM_COLOR: always DASEL_VERSION: https://github.com/TomWright/dasel/releases/download/v2.3.6/dasel_linux_amd64 RUSTFLAGS: "-D warnings" - FUEL_CORE_VERSION: 0.31.0 + FUEL_CORE_VERSION: 0.32.0 FUEL_CORE_PATCH_BRANCH: RUST_VERSION: 1.79.0 FORC_VERSION: 0.62.0 diff --git a/e2e/tests/configurables.rs b/e2e/tests/configurables.rs index 7bba238de8..8eda436fe0 100644 --- a/e2e/tests/configurables.rs +++ b/e2e/tests/configurables.rs @@ -124,7 +124,7 @@ async fn contract_configurables() -> Result<()> { let contract_id = Contract::load_from( "sway/contracts/configurables/out/release/configurables.bin", - LoadConfiguration::default().with_configurables(configurables.clone()), + LoadConfiguration::default().with_configurables(configurables), )? .deploy(&wallet, TxPolicies::default()) .await?; diff --git a/e2e/tests/contracts.rs b/e2e/tests/contracts.rs index 97a66fac4b..a41baadb18 100644 --- a/e2e/tests/contracts.rs +++ b/e2e/tests/contracts.rs @@ -9,2176 +9,2154 @@ use fuels::{ types::{errors::transaction::Reason, input::Input, Bits256, Identity}, }; use tokio::time::Instant; -// -// #[tokio::test] -// async fn test_multiple_args() -> Result<()> { -// setup_program_test!( -// Wallets("wallet"), -// Abigen(Contract( -// name = "TestContract", -// project = "e2e/sway/contracts/contract_test" -// )), -// Deploy( -// name = "contract_instance", -// contract = "TestContract", -// wallet = "wallet" -// ), -// ); -// -// // Make sure we can call the contract with multiple arguments -// let contract_methods = contract_instance.methods(); -// let response = contract_methods.get(5, 6).call().await?; -// -// assert_eq!(response.value, 11); -// -// let t = MyType { x: 5, y: 6 }; -// let response = contract_methods.get_alt(t.clone()).call().await?; -// assert_eq!(response.value, t); -// -// let response = contract_methods.get_single(5).call().await?; -// assert_eq!(response.value, 5); -// Ok(()) -// } -// -// #[tokio::test] -// async fn test_contract_calling_contract() -> Result<()> { -// // Tests a contract call that calls another contract (FooCaller calls FooContract underneath) -// setup_program_test!( -// Wallets("wallet"), -// Abigen( -// Contract( -// name = "LibContract", -// project = "e2e/sway/contracts/lib_contract" -// ), -// Contract( -// name = "LibContractCaller", -// project = "e2e/sway/contracts/lib_contract_caller" -// ), -// ), -// Deploy( -// name = "lib_contract_instance", -// contract = "LibContract", -// wallet = "wallet" -// ), -// Deploy( -// name = "lib_contract_instance2", -// contract = "LibContract", -// wallet = "wallet" -// ), -// Deploy( -// name = "contract_caller_instance", -// contract = "LibContractCaller", -// wallet = "wallet" -// ), -// ); -// let lib_contract_id = lib_contract_instance.contract_id(); -// let lib_contract_id2 = lib_contract_instance2.contract_id(); -// -// // Call the contract directly. It increments the given value. -// let response = lib_contract_instance.methods().increment(42).call().await?; -// -// assert_eq!(43, response.value); -// -// let response = contract_caller_instance -// .methods() -// .increment_from_contracts(lib_contract_id, lib_contract_id2, 42) -// // Note that the two lib_contract_instances have different types -// .with_contracts(&[&lib_contract_instance, &lib_contract_instance2]) -// .call() -// .await?; -// -// assert_eq!(86, response.value); -// -// // ANCHOR: external_contract -// let response = contract_caller_instance -// .methods() -// .increment_from_contract(lib_contract_id, 42) -// .with_contracts(&[&lib_contract_instance]) -// .call() -// .await?; -// // ANCHOR_END: external_contract -// -// assert_eq!(43, response.value); -// -// // ANCHOR: external_contract_ids -// let response = contract_caller_instance -// .methods() -// .increment_from_contract(lib_contract_id, 42) -// .with_contract_ids(&[lib_contract_id.clone()]) -// .call() -// .await?; -// // ANCHOR_END: external_contract_ids -// -// assert_eq!(43, response.value); -// Ok(()) -// } -// -// #[tokio::test] -// async fn test_reverting_transaction() -> Result<()> { -// setup_program_test!( -// Wallets("wallet"), -// Abigen(Contract( -// name = "RevertContract", -// project = "e2e/sway/contracts/revert_transaction_error" -// )), -// Deploy( -// name = "contract_instance", -// contract = "RevertContract", -// wallet = "wallet" -// ), -// ); -// -// let response = contract_instance -// .methods() -// .make_transaction_fail(true) -// .call() -// .await; -// -// assert!(matches!( -// response, -// Err(Error::Transaction(Reason::Reverted { revert_id, .. })) if revert_id == 128 -// )); -// -// Ok(()) -// } -// -// #[tokio::test] -// async fn test_multiple_read_calls() -> Result<()> { -// setup_program_test!( -// Wallets("wallet"), -// Abigen(Contract( -// name = "MultiReadContract", -// project = "e2e/sway/contracts/multiple_read_calls" -// )), -// Deploy( -// name = "contract_instance", -// contract = "MultiReadContract", -// wallet = "wallet" -// ), -// ); -// -// let contract_methods = contract_instance.methods(); -// contract_methods.store(42).call().await?; -// -// // Use "simulate" because the methods don't actually -// // run a transaction, but just a dry-run -// let stored = contract_methods -// .read() -// .simulate(Execution::StateReadOnly) -// .await?; -// -// assert_eq!(stored.value, 42); -// -// let stored = contract_methods -// .read() -// .simulate(Execution::StateReadOnly) -// .await?; -// -// assert_eq!(stored.value, 42); -// Ok(()) -// } -// -// #[tokio::test] -// async fn test_multi_call_beginner() -> Result<()> { -// setup_program_test!( -// Wallets("wallet"), -// Abigen(Contract( -// name = "TestContract", -// project = "e2e/sway/contracts/contract_test" -// )), -// Deploy( -// name = "contract_instance", -// contract = "TestContract", -// wallet = "wallet" -// ), -// ); -// -// let contract_methods = contract_instance.methods(); -// let call_handler_1 = contract_methods.get_single(7); -// let call_handler_2 = contract_methods.get_single(42); -// -// let multi_call_handler = CallHandler::new_multi_call(wallet.clone()) -// .add_call(call_handler_1) -// .add_call(call_handler_2); -// -// let (val_1, val_2): (u64, u64) = multi_call_handler.call().await?.value; -// -// assert_eq!(val_1, 7); -// assert_eq!(val_2, 42); -// -// Ok(()) -// } -// -// #[tokio::test] -// async fn test_multi_call_pro() -> Result<()> { -// setup_program_test!( -// Wallets("wallet"), -// Abigen(Contract( -// name = "TestContract", -// project = "e2e/sway/contracts/contract_test" -// )), -// Deploy( -// name = "contract_instance", -// contract = "TestContract", -// wallet = "wallet" -// ), -// ); -// -// let my_type_1 = MyType { x: 1, y: 2 }; -// let my_type_2 = MyType { x: 3, y: 4 }; -// -// let contract_methods = contract_instance.methods(); -// let call_handler_1 = contract_methods.get_single(5); -// let call_handler_2 = contract_methods.get_single(6); -// let call_handler_3 = contract_methods.get_alt(my_type_1.clone()); -// let call_handler_4 = contract_methods.get_alt(my_type_2.clone()); -// let call_handler_5 = contract_methods.get_array([7; 2]); -// let call_handler_6 = contract_methods.get_array([42; 2]); -// -// let multi_call_handler = CallHandler::new_multi_call(wallet.clone()) -// .add_call(call_handler_1) -// .add_call(call_handler_2) -// .add_call(call_handler_3) -// .add_call(call_handler_4) -// .add_call(call_handler_5) -// .add_call(call_handler_6); -// -// let (val_1, val_2, type_1, type_2, array_1, array_2): ( -// u64, -// u64, -// MyType, -// MyType, -// [u64; 2], -// [u64; 2], -// ) = multi_call_handler.call().await?.value; -// -// assert_eq!(val_1, 5); -// assert_eq!(val_2, 6); -// assert_eq!(type_1, my_type_1); -// assert_eq!(type_2, my_type_2); -// assert_eq!(array_1, [7; 2]); -// assert_eq!(array_2, [42; 2]); -// -// Ok(()) -// } -// -// #[tokio::test] -// async fn test_contract_call_fee_estimation() -> Result<()> { -// setup_program_test!( -// Wallets("wallet"), -// Abigen(Contract( -// name = "TestContract", -// project = "e2e/sway/contracts/contract_test" -// )), -// Deploy( -// name = "contract_instance", -// contract = "TestContract", -// wallet = "wallet" -// ), -// ); -// -// let gas_limit = 800; -// let tolerance = Some(0.2); -// let block_horizon = Some(1); -// let expected_gas_used = 960; -// let expected_metered_bytes_size = 824; -// -// let estimated_transaction_cost = contract_instance -// .methods() -// .initialize_counter(42) -// .with_tx_policies(TxPolicies::default().with_script_gas_limit(gas_limit)) -// .estimate_transaction_cost(tolerance, block_horizon) -// .await?; -// -// assert_eq!(estimated_transaction_cost.gas_used, expected_gas_used); -// assert_eq!( -// estimated_transaction_cost.metered_bytes_size, -// expected_metered_bytes_size -// ); -// -// Ok(()) -// } -// -// #[tokio::test] -// async fn contract_call_has_same_estimated_and_used_gas() -> Result<()> { -// setup_program_test!( -// Wallets("wallet"), -// Abigen(Contract( -// name = "TestContract", -// project = "e2e/sway/contracts/contract_test" -// )), -// Deploy( -// name = "contract_instance", -// contract = "TestContract", -// wallet = "wallet" -// ), -// ); -// let contract_methods = contract_instance.methods(); -// -// let tolerance = Some(0.0); -// let block_horizon = Some(1); -// -// let estimated_gas_used = contract_methods -// .initialize_counter(42) -// .estimate_transaction_cost(tolerance, block_horizon) -// .await? -// .gas_used; -// -// let gas_used = contract_methods -// .initialize_counter(42) -// .call() -// .await? -// .gas_used; -// -// assert_eq!(estimated_gas_used, gas_used); -// Ok(()) -// } -// -// #[tokio::test] -// async fn mult_call_has_same_estimated_and_used_gas() -> Result<()> { -// setup_program_test!( -// Wallets("wallet"), -// Abigen(Contract( -// name = "TestContract", -// project = "e2e/sway/contracts/contract_test" -// )), -// Deploy( -// name = "contract_instance", -// contract = "TestContract", -// wallet = "wallet" -// ), -// ); -// -// let contract_methods = contract_instance.methods(); -// let call_handler_1 = contract_methods.initialize_counter(42); -// let call_handler_2 = contract_methods.get_array([42; 2]); -// -// let multi_call_handler = CallHandler::new_multi_call(wallet.clone()) -// .add_call(call_handler_1) -// .add_call(call_handler_2); -// -// let tolerance = Some(0.0); -// let block_horizon = Some(1); -// let estimated_gas_used = multi_call_handler -// .estimate_transaction_cost(tolerance, block_horizon) -// .await? -// .gas_used; -// -// let gas_used = multi_call_handler.call::<(u64, [u64; 2])>().await?.gas_used; -// -// assert_eq!(estimated_gas_used, gas_used); -// Ok(()) -// } -// -// #[tokio::test] -// async fn contract_method_call_respects_maturity() -> Result<()> { -// setup_program_test!( -// Wallets("wallet"), -// Abigen(Contract( -// name = "BlockHeightContract", -// project = "e2e/sway/contracts/transaction_block_height" -// )), -// Deploy( -// name = "contract_instance", -// contract = "BlockHeightContract", -// wallet = "wallet" -// ), -// ); -// -// let call_w_maturity = |maturity| { -// contract_instance -// .methods() -// .calling_this_will_produce_a_block() -// .with_tx_policies(TxPolicies::default().with_maturity(maturity)) -// }; -// -// call_w_maturity(1).call().await.expect( -// "should have passed since we're calling with a maturity \ -// that is less or equal to the current block height", -// ); -// -// call_w_maturity(3).call().await.expect_err( -// "should have failed since we're calling with a maturity \ -// that is greater than the current block height", -// ); -// -// Ok(()) -// } -// -// #[tokio::test] -// async fn test_auth_msg_sender_from_sdk() -> Result<()> { -// setup_program_test!( -// Wallets("wallet"), -// Abigen(Contract( -// name = "AuthContract", -// project = "e2e/sway/contracts/auth_testing_contract" -// )), -// Deploy( -// name = "contract_instance", -// contract = "AuthContract", -// wallet = "wallet" -// ), -// ); -// -// // Contract returns true if `msg_sender()` matches `wallet.address()`. -// let response = contract_instance -// .methods() -// .check_msg_sender(wallet.address()) -// .call() -// .await?; -// -// assert!(response.value); -// Ok(()) -// } -// -// #[tokio::test] -// async fn test_large_return_data() -> Result<()> { -// setup_program_test!( -// Wallets("wallet"), -// Abigen(Contract( -// name = "TestContract", -// project = "e2e/sway/contracts/large_return_data" -// )), -// Deploy( -// name = "contract_instance", -// contract = "TestContract", -// wallet = "wallet" -// ), -// ); -// -// let contract_methods = contract_instance.methods(); -// let res = contract_methods.get_id().call().await?; -// -// assert_eq!( -// res.value.0, -// [ -// 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, -// 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 -// ] -// ); -// -// // One word-sized string -// let res = contract_methods.get_small_string().call().await?; -// assert_eq!(res.value, "gggggggg"); -// -// // Two word-sized string -// let res = contract_methods.get_large_string().call().await?; -// assert_eq!(res.value, "ggggggggg"); -// -// // Large struct will be bigger than a `WORD`. -// let res = contract_methods.get_large_struct().call().await?; -// assert_eq!(res.value.foo, 12); -// assert_eq!(res.value.bar, 42); -// -// // Array will be returned in `ReturnData`. -// let res = contract_methods.get_large_array().call().await?; -// assert_eq!(res.value, [1, 2]); -// -// let res = contract_methods.get_contract_id().call().await?; -// -// // First `value` is from `CallResponse`. -// // Second `value` is from the `ContractId` type. -// assert_eq!( -// res.value, -// ContractId::from([ -// 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, -// 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 -// ]) -// ); -// Ok(()) -// } -// -// #[tokio::test] -// async fn can_handle_function_called_new() -> Result<()> { -// setup_program_test!( -// Wallets("wallet"), -// Abigen(Contract( -// name = "TestContract", -// project = "e2e/sway/contracts/contract_test" -// )), -// Deploy( -// name = "contract_instance", -// contract = "TestContract", -// wallet = "wallet" -// ), -// ); -// -// let response = contract_instance.methods().new().call().await?.value; -// -// assert_eq!(response, 12345); -// Ok(()) -// } -// -// #[tokio::test] -// async fn test_contract_setup_macro_deploy_with_salt() -> Result<()> { -// // ANCHOR: contract_setup_macro_multi -// setup_program_test!( -// Wallets("wallet"), -// Abigen( -// Contract( -// name = "LibContract", -// project = "e2e/sway/contracts/lib_contract" -// ), -// Contract( -// name = "LibContractCaller", -// project = "e2e/sway/contracts/lib_contract_caller" -// ), -// ), -// Deploy( -// name = "lib_contract_instance", -// contract = "LibContract", -// wallet = "wallet" -// ), -// Deploy( -// name = "contract_caller_instance", -// contract = "LibContractCaller", -// wallet = "wallet" -// ), -// Deploy( -// name = "contract_caller_instance2", -// contract = "LibContractCaller", -// wallet = "wallet" -// ), -// ); -// let lib_contract_id = lib_contract_instance.contract_id(); -// -// let contract_caller_id = contract_caller_instance.contract_id(); -// -// let contract_caller_id2 = contract_caller_instance2.contract_id(); -// -// // Because we deploy with salt, we can deploy the same contract multiple times -// assert_ne!(contract_caller_id, contract_caller_id2); -// -// // The first contract can be called because they were deployed on the same provider -// let response = contract_caller_instance -// .methods() -// .increment_from_contract(lib_contract_id, 42) -// .with_contracts(&[&lib_contract_instance]) -// .call() -// .await?; -// -// assert_eq!(43, response.value); -// -// let response = contract_caller_instance2 -// .methods() -// .increment_from_contract(lib_contract_id, 42) -// .with_contracts(&[&lib_contract_instance]) -// .call() -// .await?; -// -// assert_eq!(43, response.value); -// // ANCHOR_END: contract_setup_macro_multi -// -// Ok(()) -// } -// -// #[tokio::test] -// async fn test_wallet_getter() -> Result<()> { -// setup_program_test!( -// Wallets("wallet"), -// Abigen(Contract( -// name = "TestContract", -// project = "e2e/sway/contracts/contract_test" -// )), -// Deploy( -// name = "contract_instance", -// contract = "TestContract", -// wallet = "wallet" -// ), -// ); -// -// assert_eq!(contract_instance.account().address(), wallet.address()); -// //`contract_id()` is tested in -// // async fn test_contract_calling_contract() -> Result<()> { -// Ok(()) -// } -// -// #[tokio::test] -// async fn test_connect_wallet() -> Result<()> { -// // ANCHOR: contract_setup_macro_manual_wallet -// let config = WalletsConfig::new(Some(2), Some(1), Some(DEFAULT_COIN_AMOUNT)); -// -// let mut wallets = launch_custom_provider_and_get_wallets(config, None, None).await?; -// let wallet = wallets.pop().unwrap(); -// let wallet_2 = wallets.pop().unwrap(); -// -// setup_program_test!( -// Abigen(Contract( -// name = "TestContract", -// project = "e2e/sway/contracts/contract_test" -// )), -// Deploy( -// name = "contract_instance", -// contract = "TestContract", -// wallet = "wallet" -// ), -// ); -// // ANCHOR_END: contract_setup_macro_manual_wallet -// -// // pay for call with wallet -// let tx_policies = TxPolicies::default() -// .with_tip(100) -// .with_script_gas_limit(1_000_000); -// -// contract_instance -// .methods() -// .initialize_counter(42) -// .with_tx_policies(tx_policies) -// .call() -// .await?; -// -// // confirm that funds have been deducted -// let wallet_balance = wallet.get_asset_balance(&Default::default()).await?; -// assert!(DEFAULT_COIN_AMOUNT > wallet_balance); -// -// // pay for call with wallet_2 -// contract_instance -// .with_account(wallet_2.clone()) -// .methods() -// .initialize_counter(42) -// .with_tx_policies(tx_policies) -// .call() -// .await?; -// -// // confirm there are no changes to wallet, wallet_2 has been charged -// let wallet_balance_second_call = wallet.get_asset_balance(&Default::default()).await?; -// let wallet_2_balance = wallet_2.get_asset_balance(&Default::default()).await?; -// assert_eq!(wallet_balance_second_call, wallet_balance); -// assert!(DEFAULT_COIN_AMOUNT > wallet_2_balance); -// -// Ok(()) -// } -// -// async fn setup_output_variable_estimation_test() -> Result<( -// Vec, -// [Identity; 3], -// AssetId, -// Bech32ContractId, -// )> { -// let wallet_config = WalletsConfig::new(Some(3), None, None); -// let wallets = launch_custom_provider_and_get_wallets(wallet_config, None, None).await?; -// -// let contract_id = Contract::load_from( -// "sway/contracts/token_ops/out/release/token_ops.bin", -// LoadConfiguration::default(), -// )? -// .deploy(&wallets[0], TxPolicies::default()) -// .await?; -// -// let mint_asset_id = contract_id.asset_id(&Bits256::zeroed()); -// let addresses = wallets -// .iter() -// .map(|wallet| wallet.address().into()) -// .collect::>() -// .try_into() -// .unwrap(); -// -// Ok((wallets, addresses, mint_asset_id, contract_id)) -// } -// -// #[tokio::test] -// async fn test_output_variable_estimation() -> Result<()> { -// abigen!(Contract( -// name = "MyContract", -// abi = "e2e/sway/contracts/token_ops/out/release/token_ops-abi.json" -// )); -// -// let (wallets, addresses, mint_asset_id, contract_id) = -// setup_output_variable_estimation_test().await?; -// -// let contract_instance = MyContract::new(contract_id, wallets[0].clone()); -// let contract_methods = contract_instance.methods(); -// let amount = 1000; -// -// { -// // Should fail due to lack of output variables -// let response = contract_methods -// .mint_to_addresses(amount, addresses) -// .call() -// .await; -// -// assert!(matches!( -// response, -// Err(Error::Transaction(Reason::Reverted { .. })) -// )); -// } -// -// { -// // Should add 3 output variables automatically -// let _ = contract_methods -// .mint_to_addresses(amount, addresses) -// .with_variable_output_policy(VariableOutputPolicy::EstimateMinimum) -// .call() -// .await?; -// -// for wallet in wallets.iter() { -// let balance = wallet.get_asset_balance(&mint_asset_id).await?; -// assert_eq!(balance, amount); -// } -// } -// -// Ok(()) -// } -// -// #[tokio::test] -// async fn test_output_variable_estimation_multicall() -> Result<()> { -// abigen!(Contract( -// name = "MyContract", -// abi = "e2e/sway/contracts/token_ops/out/release/token_ops-abi.json" -// )); -// -// let (wallets, addresses, mint_asset_id, contract_id) = -// setup_output_variable_estimation_test().await?; -// -// let contract_instance = MyContract::new(contract_id.clone(), wallets[0].clone()); -// let contract_methods = contract_instance.methods(); -// const NUM_OF_CALLS: u64 = 3; -// let amount = 1000; -// let total_amount = amount * NUM_OF_CALLS; -// -// let mut multi_call_handler = CallHandler::new_multi_call(wallets[0].clone()); -// for _ in 0..NUM_OF_CALLS { -// let call_handler = contract_methods.mint_to_addresses(amount, addresses); -// multi_call_handler = multi_call_handler.add_call(call_handler); -// } -// -// wallets[0] -// .force_transfer_to_contract( -// &contract_id, -// total_amount, -// AssetId::zeroed(), -// TxPolicies::default(), -// ) -// .await -// .unwrap(); -// -// let base_layer_address = Bits256([1u8; 32]); -// let call_handler = contract_methods.send_message(base_layer_address, amount); -// multi_call_handler = multi_call_handler.add_call(call_handler); -// -// let _ = multi_call_handler -// .with_variable_output_policy(VariableOutputPolicy::EstimateMinimum) -// .call::<((), (), ())>() -// .await?; -// -// for wallet in wallets.iter() { -// let balance = wallet.get_asset_balance(&mint_asset_id).await?; -// assert_eq!(balance, 3 * amount); -// } -// -// Ok(()) -// } -// -// #[tokio::test] -// async fn test_contract_instance_get_balances() -> Result<()> { -// let mut wallet = WalletUnlocked::new_random(None); -// let (coins, asset_ids) = setup_multiple_assets_coins(wallet.address(), 2, 4, 8); -// -// let random_asset_id = &asset_ids[1]; -// let provider = setup_test_provider(coins.clone(), vec![], None, None).await?; -// wallet.set_provider(provider.clone()); -// -// setup_program_test!( -// Abigen(Contract( -// name = "TestContract", -// project = "e2e/sway/contracts/contract_test" -// )), -// Deploy( -// name = "contract_instance", -// contract = "TestContract", -// wallet = "wallet" -// ), -// ); -// let contract_id = contract_instance.contract_id(); -// -// // Check the current balance of the contract with id 'contract_id' -// let contract_balances = contract_instance.get_balances().await?; -// assert!(contract_balances.is_empty()); -// -// // Transfer an amount to the contract -// let amount = 8; -// wallet -// .force_transfer_to_contract(contract_id, amount, *random_asset_id, TxPolicies::default()) -// .await?; -// -// // Check that the contract now has 1 coin -// let contract_balances = contract_instance.get_balances().await?; -// assert_eq!(contract_balances.len(), 1); -// -// let random_asset_balance = contract_balances.get(random_asset_id).unwrap(); -// assert_eq!(*random_asset_balance, amount); -// -// Ok(()) -// } -// -// #[tokio::test] -// async fn contract_call_futures_implement_send() -> Result<()> { -// use std::future::Future; -// -// fn tokio_spawn_imitation(_: T) -// where -// T: Future + Send + 'static, -// { -// } -// -// setup_program_test!( -// Wallets("wallet"), -// Abigen(Contract( -// name = "TestContract", -// project = "e2e/sway/contracts/contract_test" -// )), -// Deploy( -// name = "contract_instance", -// contract = "TestContract", -// wallet = "wallet" -// ), -// ); -// -// tokio_spawn_imitation(async move { -// contract_instance -// .methods() -// .initialize_counter(42) -// .call() -// .await -// .unwrap(); -// }); -// Ok(()) -// } -// -// #[tokio::test] -// async fn test_contract_set_estimation() -> Result<()> { -// setup_program_test!( -// Wallets("wallet"), -// Abigen( -// Contract( -// name = "LibContract", -// project = "e2e/sway/contracts/lib_contract" -// ), -// Contract( -// name = "LibContractCaller", -// project = "e2e/sway/contracts/lib_contract_caller" -// ), -// ), -// Deploy( -// name = "lib_contract_instance", -// contract = "LibContract", -// wallet = "wallet" -// ), -// Deploy( -// name = "contract_caller_instance", -// contract = "LibContractCaller", -// wallet = "wallet" -// ), -// ); -// let lib_contract_id = lib_contract_instance.contract_id(); -// -// let res = lib_contract_instance.methods().increment(42).call().await?; -// assert_eq!(43, res.value); -// -// { -// // Should fail due to missing external contracts -// let res = contract_caller_instance -// .methods() -// .increment_from_contract(lib_contract_id, 42) -// .call() -// .await; -// -// assert!(matches!( -// res, -// Err(Error::Transaction(Reason::Reverted { .. })) -// )); -// } -// -// let res = contract_caller_instance -// .methods() -// .increment_from_contract(lib_contract_id, 42) -// .determine_missing_contracts(None) -// .await? -// .call() -// .await?; -// -// assert_eq!(43, res.value); -// Ok(()) -// } -// -// #[tokio::test] -// async fn test_output_variable_contract_id_estimation_multicall() -> Result<()> { -// setup_program_test!( -// Wallets("wallet"), -// Abigen( -// Contract( -// name = "LibContract", -// project = "e2e/sway/contracts/lib_contract" -// ), -// Contract( -// name = "LibContractCaller", -// project = "e2e/sway/contracts/lib_contract_caller" -// ), -// Contract( -// name = "TestContract", -// project = "e2e/sway/contracts/contract_test" -// ), -// ), -// Deploy( -// name = "lib_contract_instance", -// contract = "LibContract", -// wallet = "wallet" -// ), -// Deploy( -// name = "contract_caller_instance", -// contract = "LibContractCaller", -// wallet = "wallet" -// ), -// Deploy( -// name = "contract_test_instance", -// contract = "TestContract", -// wallet = "wallet" -// ), -// ); -// -// let lib_contract_id = lib_contract_instance.contract_id(); -// -// let contract_methods = contract_caller_instance.methods(); -// -// let mut multi_call_handler = -// CallHandler::new_multi_call(wallet.clone()).with_tx_policies(Default::default()); -// -// for _ in 0..3 { -// let call_handler = contract_methods.increment_from_contract(lib_contract_id, 42); -// multi_call_handler = multi_call_handler.add_call(call_handler); -// } -// -// // add call that does not need ContractId -// let contract_methods = contract_test_instance.methods(); -// let call_handler = contract_methods.get(5, 6); -// -// multi_call_handler = multi_call_handler.add_call(call_handler); -// -// let call_response = multi_call_handler -// .determine_missing_contracts(None) -// .await? -// .call::<(u64, u64, u64, u64)>() -// .await?; -// -// assert_eq!(call_response.value, (43, 43, 43, 11)); -// -// Ok(()) -// } -// -// #[tokio::test] -// async fn test_contract_call_with_non_default_max_input() -> Result<()> { -// use fuels::{ -// tx::{ConsensusParameters, TxParameters}, -// types::coin::Coin, -// }; -// -// let mut consensus_parameters = ConsensusParameters::default(); -// let tx_params = TxParameters::default() -// .with_max_inputs(123) -// .with_max_size(1_000_000); -// consensus_parameters.set_tx_params(tx_params); -// let contract_params = ContractParameters::default().with_contract_max_size(1_000_000); -// consensus_parameters.set_contract_params(contract_params); -// -// let mut wallet = WalletUnlocked::new_random(None); -// -// let coins: Vec = setup_single_asset_coins( -// wallet.address(), -// Default::default(), -// DEFAULT_NUM_COINS, -// DEFAULT_COIN_AMOUNT, -// ); -// let chain_config = ChainConfig { -// consensus_parameters: consensus_parameters.clone(), -// ..ChainConfig::default() -// }; -// -// let provider = setup_test_provider(coins, vec![], None, Some(chain_config)).await?; -// wallet.set_provider(provider.clone()); -// assert_eq!(consensus_parameters, *provider.consensus_parameters()); -// -// setup_program_test!( -// Abigen(Contract( -// name = "TestContract", -// project = "e2e/sway/contracts/contract_test" -// )), -// Deploy( -// name = "contract_instance", -// contract = "TestContract", -// wallet = "wallet" -// ), -// ); -// -// let response = contract_instance.methods().get(5, 6).call().await?; -// -// assert_eq!(response.value, 11); -// -// Ok(()) -// } -// -// #[tokio::test] -// async fn test_add_custom_assets() -> Result<()> { -// let initial_amount = 100_000; -// let asset_base = AssetConfig { -// id: AssetId::zeroed(), -// num_coins: 1, -// coin_amount: initial_amount, -// }; -// -// let asset_id_1 = AssetId::from([3u8; 32]); -// let asset_1 = AssetConfig { -// id: asset_id_1, -// num_coins: 1, -// coin_amount: initial_amount, -// }; -// -// let asset_id_2 = AssetId::from([1u8; 32]); -// let asset_2 = AssetConfig { -// id: asset_id_2, -// num_coins: 1, -// coin_amount: initial_amount, -// }; -// -// let assets = vec![asset_base, asset_1, asset_2]; -// -// let num_wallets = 2; -// let wallet_config = WalletsConfig::new_multiple_assets(num_wallets, assets); -// let mut wallets = launch_custom_provider_and_get_wallets(wallet_config, None, None).await?; -// let wallet_1 = wallets.pop().unwrap(); -// let wallet_2 = wallets.pop().unwrap(); -// -// setup_program_test!( -// Abigen(Contract( -// name = "MyContract", -// project = "e2e/sway/contracts/contract_test" -// )), -// Deploy( -// name = "contract_instance", -// contract = "MyContract", -// wallet = "wallet_1" -// ), -// ); -// -// let amount_1 = 5000; -// let amount_2 = 3000; -// let response = contract_instance -// .methods() -// .get(5, 6) -// .add_custom_asset(asset_id_1, amount_1, Some(wallet_2.address().clone())) -// .add_custom_asset(asset_id_2, amount_2, Some(wallet_2.address().clone())) -// .call() -// .await?; -// -// assert_eq!(response.value, 11); -// -// let balance_asset_1 = wallet_1.get_asset_balance(&asset_id_1).await?; -// let balance_asset_2 = wallet_1.get_asset_balance(&asset_id_2).await?; -// assert_eq!(balance_asset_1, initial_amount - amount_1); -// assert_eq!(balance_asset_2, initial_amount - amount_2); -// -// let balance_asset_1 = wallet_2.get_asset_balance(&asset_id_1).await?; -// let balance_asset_2 = wallet_2.get_asset_balance(&asset_id_2).await?; -// assert_eq!(balance_asset_1, initial_amount + amount_1); -// assert_eq!(balance_asset_2, initial_amount + amount_2); -// -// Ok(()) -// } -// -// #[tokio::test] -// async fn contract_load_error_messages() { -// { -// let binary_path = "sway/contracts/contract_test/out/release/no_file_on_path.bin"; -// let expected_error = format!("io: file \"{binary_path}\" does not exist"); -// -// let error = Contract::load_from(binary_path, LoadConfiguration::default()) -// .expect_err("should have failed"); -// -// assert_eq!(error.to_string(), expected_error); -// } -// { -// let binary_path = "sway/contracts/contract_test/out/release/contract_test-abi.json"; -// let expected_error = format!("expected \"{binary_path}\" to have '.bin' extension"); -// -// let error = Contract::load_from(binary_path, LoadConfiguration::default()) -// .expect_err("should have failed"); -// -// assert_eq!(error.to_string(), expected_error); -// } -// } -// -// #[tokio::test] -// async fn test_payable_annotation() -> Result<()> { -// setup_program_test!( -// Wallets("wallet"), -// Abigen(Contract( -// name = "TestContract", -// project = "e2e/sway/contracts/payable_annotation" -// )), -// Deploy( -// name = "contract_instance", -// contract = "TestContract", -// wallet = "wallet" -// ), -// ); -// -// let contract_methods = contract_instance.methods(); -// -// let response = contract_methods -// .payable() -// .call_params( -// CallParameters::default() -// .with_amount(100) -// .with_gas_forwarded(20_000), -// )? -// .call() -// .await?; -// -// assert_eq!(response.value, 42); -// -// // ANCHOR: non_payable_params -// let err = contract_methods -// .non_payable() -// .call_params(CallParameters::default().with_amount(100)) -// .expect_err("should return error"); -// -// assert!(matches!(err, Error::Other(s) if s.contains("assets forwarded to non-payable method"))); -// // ANCHOR_END: non_payable_params -// -// let response = contract_methods -// .non_payable() -// .call_params(CallParameters::default().with_gas_forwarded(20_000))? -// .call() -// .await?; -// -// assert_eq!(response.value, 42); -// -// Ok(()) -// } -// -// #[tokio::test] -// async fn multi_call_from_calls_with_different_account_types() -> Result<()> { -// use fuels::prelude::*; -// -// abigen!(Contract( -// name = "MyContract", -// abi = "e2e/sway/contracts/contract_test/out/release/contract_test-abi.json" -// )); -// -// let wallet = WalletUnlocked::new_random(None); -// let predicate = Predicate::from_code(vec![]); -// -// let contract_methods_wallet = -// MyContract::new(Bech32ContractId::default(), wallet.clone()).methods(); -// let contract_methods_predicate = -// MyContract::new(Bech32ContractId::default(), predicate).methods(); -// -// let call_handler_1 = contract_methods_wallet.initialize_counter(42); -// let call_handler_2 = contract_methods_predicate.get_array([42; 2]); -// -// let _multi_call_handler = CallHandler::new_multi_call(wallet) -// .add_call(call_handler_1) -// .add_call(call_handler_2); -// -// Ok(()) -// } -// -// #[tokio::test] -// async fn low_level_call() -> Result<()> { -// use fuels::types::SizedAsciiString; -// -// setup_program_test!( -// Wallets("wallet"), -// Abigen( -// Contract( -// name = "MyCallerContract", -// project = "e2e/sway/contracts/low_level_caller" -// ), -// Contract( -// name = "MyTargetContract", -// project = "e2e/sway/contracts/contract_test" -// ), -// ), -// Deploy( -// name = "caller_contract_instance", -// contract = "MyCallerContract", -// wallet = "wallet" -// ), -// Deploy( -// name = "target_contract_instance", -// contract = "MyTargetContract", -// wallet = "wallet" -// ), -// ); -// -// let function_selector = encode_fn_selector("initialize_counter"); -// let call_data = calldata!(42u64)?; -// -// caller_contract_instance -// .methods() -// .call_low_level_call( -// target_contract_instance.id(), -// Bytes(function_selector), -// Bytes(call_data), -// ) -// .determine_missing_contracts(None) -// .await? -// .call() -// .await?; -// -// let response = target_contract_instance -// .methods() -// .get_counter() -// .call() -// .await?; -// assert_eq!(response.value, 42); -// -// let function_selector = encode_fn_selector("set_value_multiple_complex"); -// let call_data = calldata!( -// MyStruct { -// a: true, -// b: [1, 2, 3], -// }, -// SizedAsciiString::<4>::try_from("fuel")? -// )?; -// -// caller_contract_instance -// .methods() -// .call_low_level_call( -// target_contract_instance.id(), -// Bytes(function_selector), -// Bytes(call_data), -// ) -// .determine_missing_contracts(None) -// .await? -// .call() -// .await?; -// -// let result_uint = target_contract_instance -// .methods() -// .get_counter() -// .call() -// .await -// .unwrap() -// .value; -// -// let result_bool = target_contract_instance -// .methods() -// .get_bool_value() -// .call() -// .await -// .unwrap() -// .value; -// -// let result_str = target_contract_instance -// .methods() -// .get_str_value() -// .call() -// .await -// .unwrap() -// .value; -// -// assert_eq!(result_uint, 42); -// assert!(result_bool); -// assert_eq!(result_str, "fuel"); -// -// Ok(()) -// } -// -// #[cfg(any(not(feature = "fuel-core-lib"), feature = "rocksdb"))] -// #[test] -// fn db_rocksdb() { -// use std::{fs, str::FromStr}; -// -// use fuels::{ -// accounts::wallet::WalletUnlocked, -// client::{PageDirection, PaginationRequest}, -// crypto::SecretKey, -// prelude::{setup_test_provider, DbType, Error, ViewOnlyAccount, DEFAULT_COIN_AMOUNT}, -// }; -// -// let temp_dir = tempfile::tempdir().expect("failed to make tempdir"); -// let temp_dir_name = temp_dir -// .path() -// .file_name() -// .expect("failed to get file name") -// .to_string_lossy() -// .to_string(); -// let temp_database_path = temp_dir.path().join("db"); -// -// tokio::runtime::Runtime::new() -// .expect("tokio runtime failed") -// .block_on(async { -// let _ = temp_dir; -// let wallet = WalletUnlocked::new_from_private_key( -// SecretKey::from_str( -// "0x4433d156e8c53bf5b50af07aa95a29436f29a94e0ccc5d58df8e57bdc8583c32", -// )?, -// None, -// ); -// -// const NUMBER_OF_ASSETS: u64 = 2; -// let node_config = NodeConfig { -// database_type: DbType::RocksDb(Some(temp_database_path.clone())), -// ..NodeConfig::default() -// }; -// -// let chain_config = ChainConfig { -// chain_name: temp_dir_name.clone(), -// consensus_parameters: Default::default(), -// ..ChainConfig::local_testnet() -// }; -// -// let (coins, _) = setup_multiple_assets_coins( -// wallet.address(), -// NUMBER_OF_ASSETS, -// DEFAULT_NUM_COINS, -// DEFAULT_COIN_AMOUNT, -// ); -// -// let provider = -// setup_test_provider(coins.clone(), vec![], Some(node_config), Some(chain_config)) -// .await?; -// -// provider.produce_blocks(2, None).await?; -// -// Ok::<(), Error>(()) -// }) -// .unwrap(); -// -// // The runtime needs to be terminated because the node can currently only be killed when the runtime itself shuts down. -// -// tokio::runtime::Runtime::new() -// .expect("tokio runtime failed") -// .block_on(async { -// let node_config = NodeConfig { -// database_type: DbType::RocksDb(Some(temp_database_path.clone())), -// ..NodeConfig::default() -// }; -// -// let provider = setup_test_provider(vec![], vec![], Some(node_config), None).await?; -// // the same wallet that was used when rocksdb was built. When we connect it to the provider, we expect it to have the same amount of assets -// let mut wallet = WalletUnlocked::new_from_private_key( -// SecretKey::from_str( -// "0x4433d156e8c53bf5b50af07aa95a29436f29a94e0ccc5d58df8e57bdc8583c32", -// )?, -// None, -// ); -// -// wallet.set_provider(provider.clone()); -// -// let blocks = provider -// .get_blocks(PaginationRequest { -// cursor: None, -// results: 10, -// direction: PageDirection::Forward, -// }) -// .await? -// .results; -// -// assert_eq!(blocks.len(), 3); -// assert_eq!( -// *wallet.get_balances().await?.iter().next().unwrap().1, -// DEFAULT_COIN_AMOUNT -// ); -// assert_eq!( -// *wallet.get_balances().await?.iter().next().unwrap().1, -// DEFAULT_COIN_AMOUNT -// ); -// assert_eq!(wallet.get_balances().await?.len(), 2); -// -// fs::remove_dir_all( -// temp_database_path -// .parent() -// .expect("db parent folder does not exist"), -// )?; -// -// Ok::<(), Error>(()) -// }) -// .unwrap(); -// } -// -// #[tokio::test] -// async fn can_configure_decoding_of_contract_return() -> Result<()> { -// setup_program_test!( -// Wallets("wallet"), -// Abigen(Contract( -// name = "MyContract", -// project = "e2e/sway/contracts/needs_custom_decoder" -// ),), -// Deploy( -// contract = "MyContract", -// name = "contract_instance", -// wallet = "wallet" -// ) -// ); -// -// let methods = contract_instance.methods(); -// { -// // Single call: Will not work if max_tokens not big enough -// methods.i_return_a_1k_el_array().with_decoder_config(DecoderConfig{max_tokens: 100, ..Default::default()}).call().await.expect_err( -// "should have failed because there are more tokens than what is supported by default", -// ); -// } -// { -// // Single call: Works when limit is bumped -// let result = methods -// .i_return_a_1k_el_array() -// .with_decoder_config(DecoderConfig { -// max_tokens: 1001, -// ..Default::default() -// }) -// .call() -// .await? -// .value; -// -// assert_eq!(result, [0; 1000]); -// } -// { -// // Multi call: Will not work if max_tokens not big enough -// CallHandler::new_multi_call(wallet.clone()) -// .add_call(methods.i_return_a_1k_el_array()) -// .with_decoder_config(DecoderConfig { max_tokens: 100, ..Default::default() }) -// .call::<([u8; 1000],)>().await.expect_err( -// "should have failed because there are more tokens than what is supported by default", -// ); -// } -// { -// // Multi call: Works when configured -// CallHandler::new_multi_call(wallet.clone()) -// .add_call(methods.i_return_a_1k_el_array()) -// .with_decoder_config(DecoderConfig { -// max_tokens: 1001, -// ..Default::default() -// }) -// .call::<([u8; 1000],)>() -// .await -// .unwrap(); -// } -// -// Ok(()) -// } -// -// #[tokio::test] -// async fn test_contract_submit_and_response() -> Result<()> { -// setup_program_test!( -// Wallets("wallet"), -// Abigen(Contract( -// name = "TestContract", -// project = "e2e/sway/contracts/contract_test" -// )), -// Deploy( -// name = "contract_instance", -// contract = "TestContract", -// wallet = "wallet" -// ), -// ); -// -// let contract_methods = contract_instance.methods(); -// -// let submitted_tx = contract_methods.get(1, 2).submit().await?; -// let value = submitted_tx.response().await?.value; -// -// assert_eq!(value, 3); -// -// let contract_methods = contract_instance.methods(); -// let call_handler_1 = contract_methods.get_single(7); -// let call_handler_2 = contract_methods.get_single(42); -// -// let multi_call_handler = CallHandler::new_multi_call(wallet.clone()) -// .add_call(call_handler_1) -// .add_call(call_handler_2); -// -// let handle = multi_call_handler.submit().await?; -// let (val_1, val_2): (u64, u64) = handle.response().await?.value; -// -// assert_eq!(val_1, 7); -// assert_eq!(val_2, 42); -// -// Ok(()) -// } -// -// #[tokio::test] -// async fn test_heap_type_multicall() -> Result<()> { -// setup_program_test!( -// Wallets("wallet"), -// Abigen( -// Contract( -// name = "TestContract", -// project = "e2e/sway/contracts/contract_test" -// ), -// Contract( -// name = "VectorOutputContract", -// project = "e2e/sway/types/contracts/vector_output" -// ) -// ), -// Deploy( -// name = "contract_instance", -// contract = "VectorOutputContract", -// wallet = "wallet" -// ), -// Deploy( -// name = "contract_instance_2", -// contract = "TestContract", -// wallet = "wallet" -// ), -// ); -// -// { -// let call_handler_1 = contract_instance.methods().u8_in_vec(5); -// let call_handler_2 = contract_instance_2.methods().get_single(7); -// let call_handler_3 = contract_instance.methods().u8_in_vec(3); -// -// let multi_call_handler = CallHandler::new_multi_call(wallet.clone()) -// .add_call(call_handler_1) -// .add_call(call_handler_2) -// .add_call(call_handler_3); -// -// let (val_1, val_2, val_3): (Vec, u64, Vec) = multi_call_handler.call().await?.value; -// -// assert_eq!(val_1, vec![0, 1, 2, 3, 4]); -// assert_eq!(val_2, 7); -// assert_eq!(val_3, vec![0, 1, 2]); -// } -// -// Ok(()) -// } -// -// #[tokio::test] -// async fn heap_types_correctly_offset_in_create_transactions_w_storage_slots() -> Result<()> { -// setup_program_test!( -// Wallets("wallet"), -// Abigen(Predicate( -// name = "MyPredicate", -// project = "e2e/sway/types/predicates/predicate_vector" -// ),), -// ); -// -// let provider = wallet.try_provider()?.clone(); -// let data = MyPredicateEncoder::default().encode_data(18, 24, vec![2, 4, 42])?; -// let predicate = Predicate::load_from( -// "sway/types/predicates/predicate_vector/out/release/predicate_vector.bin", -// )? -// .with_data(data) -// .with_provider(provider); -// -// wallet -// .transfer( -// predicate.address(), -// 10_000, -// AssetId::zeroed(), -// TxPolicies::default(), -// ) -// .await?; -// -// // if the contract is successfully deployed then the predicate was unlocked. This further means -// // the offsets were setup correctly since the predicate uses heap types in its arguments. -// // Storage slots were loaded automatically by default -// Contract::load_from( -// "sway/contracts/storage/out/release/storage.bin", -// LoadConfiguration::default(), -// )? -// .deploy(&predicate, TxPolicies::default()) -// .await?; -// -// Ok(()) -// } -// -// #[tokio::test] -// async fn test_arguments_with_gas_forwarded() -> Result<()> { -// setup_program_test!( -// Wallets("wallet"), -// Abigen( -// Contract( -// name = "TestContract", -// project = "e2e/sway/contracts/contract_test" -// ), -// Contract( -// name = "VectorOutputContract", -// project = "e2e/sway/types/contracts/vectors" -// ) -// ), -// Deploy( -// name = "contract_instance", -// contract = "TestContract", -// wallet = "wallet" -// ), -// Deploy( -// name = "contract_instance_2", -// contract = "VectorOutputContract", -// wallet = "wallet" -// ), -// ); -// -// let x = 128; -// let vec_input = vec![0, 1, 2]; -// { -// let response = contract_instance -// .methods() -// .get_single(x) -// .call_params(CallParameters::default().with_gas_forwarded(4096))? -// .call() -// .await?; -// -// assert_eq!(response.value, x); -// } -// { -// contract_instance_2 -// .methods() -// .u32_vec(vec_input.clone()) -// .call_params(CallParameters::default().with_gas_forwarded(4096))? -// .call() -// .await?; -// } -// { -// let call_handler_1 = contract_instance.methods().get_single(x); -// let call_handler_2 = contract_instance_2.methods().u32_vec(vec_input); -// -// let multi_call_handler = CallHandler::new_multi_call(wallet.clone()) -// .add_call(call_handler_1) -// .add_call(call_handler_2); -// -// let (value, _): (u64, ()) = multi_call_handler.call().await?.value; -// -// assert_eq!(value, x); -// } -// -// Ok(()) -// } -// -// #[tokio::test] -// async fn contract_custom_call_no_signatures_strategy() -> Result<()> { -// setup_program_test!( -// Wallets("wallet"), -// Abigen(Contract( -// name = "TestContract", -// project = "e2e/sway/contracts/contract_test" -// )), -// Deploy( -// name = "contract_instance", -// contract = "TestContract", -// wallet = "wallet" -// ), -// ); -// let provider = wallet.try_provider()?; -// -// let counter = 42; -// let call_handler = contract_instance.methods().initialize_counter(counter); -// -// let mut tb = call_handler.transaction_builder().await?; -// -// let amount = 10; -// let new_base_inputs = wallet -// .get_asset_inputs_for_amount(*provider.base_asset_id(), amount, None) -// .await?; -// tb.inputs_mut().extend(new_base_inputs); -// -// // ANCHOR: tb_no_signatures_strategy -// let mut tx = tb -// .with_build_strategy(ScriptBuildStrategy::NoSignatures) -// .build(provider) -// .await?; -// // ANCHOR: tx_sign_with -// tx.sign_with(&wallet, provider.chain_id()).await?; -// // ANCHOR_END: tx_sign_with -// // ANCHOR_END: tb_no_signatures_strategy -// -// let tx_id = provider.send_transaction(tx).await?; -// let tx_status = provider.tx_status(&tx_id).await?; -// -// let response = call_handler.get_response_from(tx_status)?; -// -// assert_eq!(counter, response.value); -// -// Ok(()) -// } -// -// #[tokio::test] -// async fn contract_encoder_config_is_applied() -> Result<()> { -// setup_program_test!( -// Abigen(Contract( -// name = "TestContract", -// project = "e2e/sway/contracts/contract_test" -// )), -// Wallets("wallet") -// ); -// let contract_id = Contract::load_from( -// "sway/contracts/contract_test/out/release/contract_test.bin", -// LoadConfiguration::default(), -// )? -// .deploy(&wallet, TxPolicies::default()) -// .await?; -// -// let instance = TestContract::new(contract_id.clone(), wallet.clone()); -// -// { -// let _encoding_ok = instance -// .methods() -// .get(0, 1) -// .call() -// .await -// .expect("should not fail as it uses the default encoder config"); -// } -// { -// let encoder_config = EncoderConfig { -// max_tokens: 1, -// ..Default::default() -// }; -// let instance_with_encoder_config = instance.with_encoder_config(encoder_config); -// -// // uses 2 tokens when 1 is the limit -// let encoding_error = instance_with_encoder_config -// .methods() -// .get(0, 1) -// .call() -// .await -// .expect_err("should error"); -// -// assert!(encoding_error.to_string().contains( -// "cannot encode contract call arguments: codec: token limit `1` reached while encoding." -// )); -// -// let encoding_error = instance_with_encoder_config -// .methods() -// .get(0, 1) -// .simulate(Execution::Realistic) -// .await -// .expect_err("should error"); -// -// assert!(encoding_error.to_string().contains( -// "cannot encode contract call arguments: codec: token limit `1` reached while encoding." -// )); -// } -// -// Ok(()) -// } -// -// #[tokio::test] -// async fn test_reentrant_calls() -> Result<()> { -// setup_program_test!( -// Wallets("wallet"), -// Abigen(Contract( -// name = "LibContractCaller", -// project = "e2e/sway/contracts/lib_contract_caller" -// ),), -// Deploy( -// name = "contract_caller_instance", -// contract = "LibContractCaller", -// wallet = "wallet" -// ), -// ); -// -// let contract_id = contract_caller_instance.contract_id(); -// let response = contract_caller_instance -// .methods() -// .re_entrant(contract_id, true) -// .call() -// .await?; -// -// assert_eq!(42, response.value); -// -// Ok(()) -// } -// -// #[tokio::test] -// async fn msg_sender_gas_estimation_issue() { -// // Gas estimation requires an input of the base asset. If absent, a fake input is -// // added. However, if a non-base coin is present and the fake input introduces a -// // second owner, it causes the `msg_sender` sway fn to fail. This leads -// // to a premature failure in gas estimation, risking transaction failure due to -// // a low gas limit. -// let mut wallet = WalletUnlocked::new_random(None); -// -// let (coins, ids) = -// setup_multiple_assets_coins(wallet.address(), 2, DEFAULT_NUM_COINS, DEFAULT_COIN_AMOUNT); -// -// let provider = setup_test_provider(coins, vec![], None, None) -// .await -// .unwrap(); -// wallet.set_provider(provider.clone()); -// -// setup_program_test!( -// Abigen(Contract( -// name = "MyContract", -// project = "e2e/sway/contracts/msg_methods" -// )), -// Deploy( -// contract = "MyContract", -// name = "contract_instance", -// wallet = "wallet" -// ) -// ); -// -// let asset_id = ids[0]; -// -// // The fake coin won't be added if we add a base asset, so let's not do that -// assert!(asset_id != *provider.base_asset_id()); -// let call_params = CallParameters::default() -// .with_amount(100) -// .with_asset_id(asset_id); -// -// contract_instance -// .methods() -// .message_sender() -// .call_params(call_params) -// .unwrap() -// .call() -// .await -// .unwrap(); -// } -// -// #[tokio::test] -// async fn variable_output_estimation_is_optimized() -> Result<()> { -// setup_program_test!( -// Wallets("wallet"), -// Abigen(Contract( -// name = "MyContract", -// project = "e2e/sway/contracts/var_outputs" -// )), -// Deploy( -// contract = "MyContract", -// name = "contract_instance", -// wallet = "wallet" -// ) -// ); -// -// let contract_methods = contract_instance.methods(); -// -// let coins = 252; -// let recipient = Identity::Address(wallet.address().into()); -// let start = Instant::now(); -// let _ = contract_methods -// .mint(coins, recipient) -// .with_variable_output_policy(VariableOutputPolicy::EstimateMinimum) -// .call() -// .await?; -// -// // debug builds are slower (20x for `fuel-core-lib`, 4x for a release-fuel-core-binary) -// // we won't validate in that case so we don't have to maintain two expectations -// if !cfg!(debug_assertions) { -// let elapsed = start.elapsed().as_secs(); -// let limit = 2; -// if elapsed > limit { -// panic!("Estimation took too long ({elapsed}). Limit is {limit}"); -// } -// } -// -// Ok(()) -// } -// -// #[tokio::test] -// async fn simulations_can_be_made_without_coins() -> Result<()> { -// setup_program_test!( -// Wallets("wallet"), -// Abigen(Contract( -// name = "MyContract", -// project = "e2e/sway/contracts/contract_test" -// )), -// Deploy( -// name = "contract_instance", -// contract = "MyContract", -// wallet = "wallet" -// ) -// ); -// let contract_id = contract_instance.contract_id(); -// let provider = wallet.provider().cloned(); -// -// let no_funds_wallet = WalletUnlocked::new_random(provider); -// -// let response = MyContract::new(contract_id, no_funds_wallet.clone()) -// .methods() -// .get(5, 6) -// .simulate(Execution::StateReadOnly) -// .await?; -// -// assert_eq!(response.value, 11); -// -// Ok(()) -// } -// -// #[tokio::test] -// async fn simulations_can_be_made_without_coins_multicall() -> Result<()> { -// setup_program_test!( -// Wallets("wallet"), -// Abigen(Contract( -// name = "MyContract", -// project = "e2e/sway/contracts/contract_test" -// )), -// Deploy( -// name = "contract_instance", -// contract = "MyContract", -// wallet = "wallet" -// ) -// ); -// let contract_id = contract_instance.contract_id(); -// let provider = wallet.provider().cloned(); -// -// let no_funds_wallet = WalletUnlocked::new_random(provider); -// let contract_instance = MyContract::new(contract_id, no_funds_wallet.clone()); -// -// let contract_methods = contract_instance.methods(); -// -// let call_handler_1 = contract_methods.get(1, 2); -// let call_handler_2 = contract_methods.get(3, 4); -// -// let mut multi_call_handler = CallHandler::new_multi_call(no_funds_wallet) -// .add_call(call_handler_1) -// .add_call(call_handler_2); -// -// let value: (u64, u64) = multi_call_handler -// .simulate(Execution::StateReadOnly) -// .await? -// .value; -// -// assert_eq!(value, (3, 7)); -// -// Ok(()) -// } -// -// #[tokio::test] -// async fn contract_call_with_non_zero_base_asset_id_and_tip() -> Result<()> { -// use fuels::{prelude::*, tx::ConsensusParameters}; -// -// abigen!(Contract( -// name = "MyContract", -// abi = "e2e/sway/contracts/contract_test/out/release/contract_test-abi.json" -// )); -// -// let asset_id = AssetId::new([1; 32]); -// -// let mut consensus_parameters = ConsensusParameters::default(); -// consensus_parameters.set_base_asset_id(asset_id); -// -// let config = ChainConfig { -// consensus_parameters, -// ..Default::default() -// }; -// -// let asset_base = AssetConfig { -// id: asset_id, -// num_coins: 1, -// coin_amount: 10_000, -// }; -// -// let wallet_config = WalletsConfig::new_multiple_assets(1, vec![asset_base]); -// let wallets = launch_custom_provider_and_get_wallets(wallet_config, None, Some(config)).await?; -// let wallet = wallets.first().expect("has wallet"); -// -// let contract_id = Contract::load_from( -// "sway/contracts/contract_test/out/release/contract_test.bin", -// LoadConfiguration::default(), -// )? -// .deploy(wallet, TxPolicies::default()) -// .await?; -// -// let contract_instance = MyContract::new(contract_id, wallet.clone()); -// -// let response = contract_instance -// .methods() -// .initialize_counter(42) -// .with_tx_policies(TxPolicies::default().with_tip(10)) -// .call() -// .await?; -// -// assert_eq!(42, response.value); -// -// Ok(()) -// } -// -// #[tokio::test] -// async fn max_fee_estimation_respects_tolerance() -> Result<()> { -// use fuels::prelude::*; -// -// let mut call_wallet = WalletUnlocked::new_random(None); -// -// let call_coins = setup_single_asset_coins(call_wallet.address(), AssetId::BASE, 1000, 1); -// -// let mut deploy_wallet = WalletUnlocked::new_random(None); -// let deploy_coins = -// setup_single_asset_coins(deploy_wallet.address(), AssetId::BASE, 1, 1_000_000); -// -// let provider = -// setup_test_provider([call_coins, deploy_coins].concat(), vec![], None, None).await?; -// -// call_wallet.set_provider(provider.clone()); -// deploy_wallet.set_provider(provider.clone()); -// -// setup_program_test!( -// Abigen(Contract( -// name = "MyContract", -// project = "e2e/sway/contracts/contract_test" -// )), -// Deploy( -// name = "contract_instance", -// wallet = "deploy_wallet", -// contract = "MyContract" -// ) -// ); -// let contract_instance = contract_instance.with_account(call_wallet.clone()); -// -// let max_fee_from_tx = |tolerance: f32| { -// let contract_instance = contract_instance.clone(); -// let provider = provider.clone(); -// async move { -// let builder = contract_instance -// .methods() -// .initialize_counter(42) -// .transaction_builder() -// .await -// .unwrap(); -// -// assert_eq!( -// builder.max_fee_estimation_tolerance, 0.05, -// "Expected pre-set tolerance of 0.05" -// ); -// -// builder -// .with_max_fee_estimation_tolerance(tolerance) -// .build(&provider) -// .await -// .unwrap() -// .max_fee() -// .unwrap() -// } -// }; -// -// let max_fee_from_builder = |tolerance: f32| { -// let contract_instance = contract_instance.clone(); -// let provider = provider.clone(); -// async move { -// contract_instance -// .methods() -// .initialize_counter(42) -// .transaction_builder() -// .await -// .unwrap() -// .with_max_fee_estimation_tolerance(tolerance) -// .estimate_max_fee(&provider) -// .await -// .unwrap() -// } -// }; -// -// let base_amount_in_inputs = |tolerance: f32| { -// let contract_instance = contract_instance.clone(); -// let call_wallet = &call_wallet; -// async move { -// let mut tb = contract_instance -// .methods() -// .initialize_counter(42) -// .transaction_builder() -// .await -// .unwrap() -// .with_max_fee_estimation_tolerance(tolerance); -// -// call_wallet.adjust_for_fee(&mut tb, 0).await.unwrap(); -// tb.inputs -// .iter() -// .filter_map(|input: &Input| match input { -// Input::ResourceSigned { resource } -// if resource.coin_asset_id().unwrap() == AssetId::BASE => -// { -// Some(resource.amount()) -// } -// _ => None, -// }) -// .sum::() -// } -// }; -// -// let no_increase_max_fee = max_fee_from_tx(0.0).await; -// let increased_max_fee = max_fee_from_tx(2.00).await; -// -// assert_eq!( -// increased_max_fee as f64 / no_increase_max_fee as f64, -// 1.00 + 2.00 -// ); -// -// let no_increase_max_fee = max_fee_from_builder(0.0).await; -// let increased_max_fee = max_fee_from_builder(2.00).await; -// assert_eq!( -// increased_max_fee as f64 / no_increase_max_fee as f64, -// 1.00 + 2.00 -// ); -// -// let normal_base_asset = base_amount_in_inputs(0.0).await; -// let more_base_asset_due_to_bigger_tolerance = base_amount_in_inputs(2.00).await; -// assert_eq!( -// more_base_asset_due_to_bigger_tolerance as f64 / normal_base_asset as f64, -// 1.00 + 2.00 -// ); -// -// Ok(()) -// } -// -// #[tokio::test] -// async fn blob_contract_deployment() -> Result<()> { -// abigen!(Contract( -// name = "MyContract", -// abi = "e2e/sway/contracts/huge_contract/out/release/huge_contract-abi.json" -// )); -// -// let contract_binary = "sway/contracts/huge_contract/out/release/huge_contract.bin"; -// let contract_size = std::fs::metadata(contract_binary) -// .expect("contract file not found") -// .len(); -// -// assert!( -// contract_size > 150_000, -// "the testnet size limit was around 100kB, we want a contract bigger than that to reflect prod (current: {contract_size}B)" -// ); -// -// let wallets = -// launch_custom_provider_and_get_wallets(WalletsConfig::new(Some(2), None, None), None, None) -// .await?; -// -// let provider = wallets[0].provider().unwrap().clone(); -// -// let consensus_parameters = provider.consensus_parameters(); -// -// let contract_max_size = consensus_parameters.contract_params().contract_max_size(); -// assert!( -// contract_size > contract_max_size, -// "this test should ideally be run with a contract bigger than the max contract size ({contract_max_size}B) so that we know deployment couldn't have happened without blobs" -// ); -// -// let contract = Contract::load_from(contract_binary, LoadConfiguration::default())?; -// -// let deploy_and_test = |wallet: WalletUnlocked, blob_size: BlobSizePolicy| { -// let contract = &contract; -// async move { -// let contract_id = contract -// .clone() -// .deploy_as_loader(&wallet, TxPolicies::default(), blob_size) -// .await?; -// -// let contract_instance = MyContract::new(contract_id, wallet.clone()); -// -// let response = contract_instance.methods().something().call().await?.value; -// -// assert_eq!(response, 1001); -// Result::Ok(()) -// } -// }; -// -// { -// // We're mostly limited by the payload size of the fuel-core endpoints -// let percentage_of_theoretical_max = 0.95; -// -// deploy_and_test( -// wallets[0].clone(), -// BlobSizePolicy::Estimate { -// percentage_of_theoretical_max, -// }, -// ) -// .await?; -// } -// -// { -// deploy_and_test(wallets[1].clone(), BlobSizePolicy::AtMost { words: 6_000 }).await?; -// } -// -// Ok(()) -// } + +#[tokio::test] +async fn test_multiple_args() -> Result<()> { + setup_program_test!( + Wallets("wallet"), + Abigen(Contract( + name = "TestContract", + project = "e2e/sway/contracts/contract_test" + )), + Deploy( + name = "contract_instance", + contract = "TestContract", + wallet = "wallet" + ), + ); + + // Make sure we can call the contract with multiple arguments + let contract_methods = contract_instance.methods(); + let response = contract_methods.get(5, 6).call().await?; + + assert_eq!(response.value, 11); + + let t = MyType { x: 5, y: 6 }; + let response = contract_methods.get_alt(t.clone()).call().await?; + assert_eq!(response.value, t); + + let response = contract_methods.get_single(5).call().await?; + assert_eq!(response.value, 5); + Ok(()) +} + +#[tokio::test] +async fn test_contract_calling_contract() -> Result<()> { + // Tests a contract call that calls another contract (FooCaller calls FooContract underneath) + setup_program_test!( + Wallets("wallet"), + Abigen( + Contract( + name = "LibContract", + project = "e2e/sway/contracts/lib_contract" + ), + Contract( + name = "LibContractCaller", + project = "e2e/sway/contracts/lib_contract_caller" + ), + ), + Deploy( + name = "lib_contract_instance", + contract = "LibContract", + wallet = "wallet" + ), + Deploy( + name = "lib_contract_instance2", + contract = "LibContract", + wallet = "wallet" + ), + Deploy( + name = "contract_caller_instance", + contract = "LibContractCaller", + wallet = "wallet" + ), + ); + let lib_contract_id = lib_contract_instance.contract_id(); + let lib_contract_id2 = lib_contract_instance2.contract_id(); + + // Call the contract directly. It increments the given value. + let response = lib_contract_instance.methods().increment(42).call().await?; + + assert_eq!(43, response.value); + + let response = contract_caller_instance + .methods() + .increment_from_contracts(lib_contract_id, lib_contract_id2, 42) + // Note that the two lib_contract_instances have different types + .with_contracts(&[&lib_contract_instance, &lib_contract_instance2]) + .call() + .await?; + + assert_eq!(86, response.value); + + // ANCHOR: external_contract + let response = contract_caller_instance + .methods() + .increment_from_contract(lib_contract_id, 42) + .with_contracts(&[&lib_contract_instance]) + .call() + .await?; + // ANCHOR_END: external_contract + + assert_eq!(43, response.value); + + // ANCHOR: external_contract_ids + let response = contract_caller_instance + .methods() + .increment_from_contract(lib_contract_id, 42) + .with_contract_ids(&[lib_contract_id.clone()]) + .call() + .await?; + // ANCHOR_END: external_contract_ids + + assert_eq!(43, response.value); + Ok(()) +} + +#[tokio::test] +async fn test_reverting_transaction() -> Result<()> { + setup_program_test!( + Wallets("wallet"), + Abigen(Contract( + name = "RevertContract", + project = "e2e/sway/contracts/revert_transaction_error" + )), + Deploy( + name = "contract_instance", + contract = "RevertContract", + wallet = "wallet" + ), + ); + + let response = contract_instance + .methods() + .make_transaction_fail(true) + .call() + .await; + + assert!(matches!( + response, + Err(Error::Transaction(Reason::Reverted { revert_id, .. })) if revert_id == 128 + )); + + Ok(()) +} + +#[tokio::test] +async fn test_multiple_read_calls() -> Result<()> { + setup_program_test!( + Wallets("wallet"), + Abigen(Contract( + name = "MultiReadContract", + project = "e2e/sway/contracts/multiple_read_calls" + )), + Deploy( + name = "contract_instance", + contract = "MultiReadContract", + wallet = "wallet" + ), + ); + + let contract_methods = contract_instance.methods(); + contract_methods.store(42).call().await?; + + // Use "simulate" because the methods don't actually + // run a transaction, but just a dry-run + let stored = contract_methods + .read() + .simulate(Execution::StateReadOnly) + .await?; + + assert_eq!(stored.value, 42); + + let stored = contract_methods + .read() + .simulate(Execution::StateReadOnly) + .await?; + + assert_eq!(stored.value, 42); + Ok(()) +} + +#[tokio::test] +async fn test_multi_call_beginner() -> Result<()> { + setup_program_test!( + Wallets("wallet"), + Abigen(Contract( + name = "TestContract", + project = "e2e/sway/contracts/contract_test" + )), + Deploy( + name = "contract_instance", + contract = "TestContract", + wallet = "wallet" + ), + ); + + let contract_methods = contract_instance.methods(); + let call_handler_1 = contract_methods.get_single(7); + let call_handler_2 = contract_methods.get_single(42); + + let multi_call_handler = CallHandler::new_multi_call(wallet.clone()) + .add_call(call_handler_1) + .add_call(call_handler_2); + + let (val_1, val_2): (u64, u64) = multi_call_handler.call().await?.value; + + assert_eq!(val_1, 7); + assert_eq!(val_2, 42); + + Ok(()) +} + +#[tokio::test] +async fn test_multi_call_pro() -> Result<()> { + setup_program_test!( + Wallets("wallet"), + Abigen(Contract( + name = "TestContract", + project = "e2e/sway/contracts/contract_test" + )), + Deploy( + name = "contract_instance", + contract = "TestContract", + wallet = "wallet" + ), + ); + + let my_type_1 = MyType { x: 1, y: 2 }; + let my_type_2 = MyType { x: 3, y: 4 }; + + let contract_methods = contract_instance.methods(); + let call_handler_1 = contract_methods.get_single(5); + let call_handler_2 = contract_methods.get_single(6); + let call_handler_3 = contract_methods.get_alt(my_type_1.clone()); + let call_handler_4 = contract_methods.get_alt(my_type_2.clone()); + let call_handler_5 = contract_methods.get_array([7; 2]); + let call_handler_6 = contract_methods.get_array([42; 2]); + + let multi_call_handler = CallHandler::new_multi_call(wallet.clone()) + .add_call(call_handler_1) + .add_call(call_handler_2) + .add_call(call_handler_3) + .add_call(call_handler_4) + .add_call(call_handler_5) + .add_call(call_handler_6); + + let (val_1, val_2, type_1, type_2, array_1, array_2): ( + u64, + u64, + MyType, + MyType, + [u64; 2], + [u64; 2], + ) = multi_call_handler.call().await?.value; + + assert_eq!(val_1, 5); + assert_eq!(val_2, 6); + assert_eq!(type_1, my_type_1); + assert_eq!(type_2, my_type_2); + assert_eq!(array_1, [7; 2]); + assert_eq!(array_2, [42; 2]); + + Ok(()) +} + +#[tokio::test] +async fn test_contract_call_fee_estimation() -> Result<()> { + setup_program_test!( + Wallets("wallet"), + Abigen(Contract( + name = "TestContract", + project = "e2e/sway/contracts/contract_test" + )), + Deploy( + name = "contract_instance", + contract = "TestContract", + wallet = "wallet" + ), + ); + + let gas_limit = 800; + let tolerance = Some(0.2); + let block_horizon = Some(1); + let expected_gas_used = 960; + let expected_metered_bytes_size = 824; + + let estimated_transaction_cost = contract_instance + .methods() + .initialize_counter(42) + .with_tx_policies(TxPolicies::default().with_script_gas_limit(gas_limit)) + .estimate_transaction_cost(tolerance, block_horizon) + .await?; + + assert_eq!(estimated_transaction_cost.gas_used, expected_gas_used); + assert_eq!( + estimated_transaction_cost.metered_bytes_size, + expected_metered_bytes_size + ); + + Ok(()) +} + +#[tokio::test] +async fn contract_call_has_same_estimated_and_used_gas() -> Result<()> { + setup_program_test!( + Wallets("wallet"), + Abigen(Contract( + name = "TestContract", + project = "e2e/sway/contracts/contract_test" + )), + Deploy( + name = "contract_instance", + contract = "TestContract", + wallet = "wallet" + ), + ); + let contract_methods = contract_instance.methods(); + + let tolerance = Some(0.0); + let block_horizon = Some(1); + + let estimated_gas_used = contract_methods + .initialize_counter(42) + .estimate_transaction_cost(tolerance, block_horizon) + .await? + .gas_used; + + let gas_used = contract_methods + .initialize_counter(42) + .call() + .await? + .gas_used; + + assert_eq!(estimated_gas_used, gas_used); + Ok(()) +} + +#[tokio::test] +async fn mult_call_has_same_estimated_and_used_gas() -> Result<()> { + setup_program_test!( + Wallets("wallet"), + Abigen(Contract( + name = "TestContract", + project = "e2e/sway/contracts/contract_test" + )), + Deploy( + name = "contract_instance", + contract = "TestContract", + wallet = "wallet" + ), + ); + + let contract_methods = contract_instance.methods(); + let call_handler_1 = contract_methods.initialize_counter(42); + let call_handler_2 = contract_methods.get_array([42; 2]); + + let multi_call_handler = CallHandler::new_multi_call(wallet.clone()) + .add_call(call_handler_1) + .add_call(call_handler_2); + + let tolerance = Some(0.0); + let block_horizon = Some(1); + let estimated_gas_used = multi_call_handler + .estimate_transaction_cost(tolerance, block_horizon) + .await? + .gas_used; + + let gas_used = multi_call_handler.call::<(u64, [u64; 2])>().await?.gas_used; + + assert_eq!(estimated_gas_used, gas_used); + Ok(()) +} + +#[tokio::test] +async fn contract_method_call_respects_maturity() -> Result<()> { + setup_program_test!( + Wallets("wallet"), + Abigen(Contract( + name = "BlockHeightContract", + project = "e2e/sway/contracts/transaction_block_height" + )), + Deploy( + name = "contract_instance", + contract = "BlockHeightContract", + wallet = "wallet" + ), + ); + + let call_w_maturity = |maturity| { + contract_instance + .methods() + .calling_this_will_produce_a_block() + .with_tx_policies(TxPolicies::default().with_maturity(maturity)) + }; + + call_w_maturity(1).call().await.expect( + "should have passed since we're calling with a maturity \ + that is less or equal to the current block height", + ); + + call_w_maturity(3).call().await.expect_err( + "should have failed since we're calling with a maturity \ + that is greater than the current block height", + ); + + Ok(()) +} + +#[tokio::test] +async fn test_auth_msg_sender_from_sdk() -> Result<()> { + setup_program_test!( + Wallets("wallet"), + Abigen(Contract( + name = "AuthContract", + project = "e2e/sway/contracts/auth_testing_contract" + )), + Deploy( + name = "contract_instance", + contract = "AuthContract", + wallet = "wallet" + ), + ); + + // Contract returns true if `msg_sender()` matches `wallet.address()`. + let response = contract_instance + .methods() + .check_msg_sender(wallet.address()) + .call() + .await?; + + assert!(response.value); + Ok(()) +} + +#[tokio::test] +async fn test_large_return_data() -> Result<()> { + setup_program_test!( + Wallets("wallet"), + Abigen(Contract( + name = "TestContract", + project = "e2e/sway/contracts/large_return_data" + )), + Deploy( + name = "contract_instance", + contract = "TestContract", + wallet = "wallet" + ), + ); + + let contract_methods = contract_instance.methods(); + let res = contract_methods.get_id().call().await?; + + assert_eq!( + res.value.0, + [ + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 + ] + ); + + // One word-sized string + let res = contract_methods.get_small_string().call().await?; + assert_eq!(res.value, "gggggggg"); + + // Two word-sized string + let res = contract_methods.get_large_string().call().await?; + assert_eq!(res.value, "ggggggggg"); + + // Large struct will be bigger than a `WORD`. + let res = contract_methods.get_large_struct().call().await?; + assert_eq!(res.value.foo, 12); + assert_eq!(res.value.bar, 42); + + // Array will be returned in `ReturnData`. + let res = contract_methods.get_large_array().call().await?; + assert_eq!(res.value, [1, 2]); + + let res = contract_methods.get_contract_id().call().await?; + + // First `value` is from `CallResponse`. + // Second `value` is from the `ContractId` type. + assert_eq!( + res.value, + ContractId::from([ + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 + ]) + ); + Ok(()) +} + +#[tokio::test] +async fn can_handle_function_called_new() -> Result<()> { + setup_program_test!( + Wallets("wallet"), + Abigen(Contract( + name = "TestContract", + project = "e2e/sway/contracts/contract_test" + )), + Deploy( + name = "contract_instance", + contract = "TestContract", + wallet = "wallet" + ), + ); + + let response = contract_instance.methods().new().call().await?.value; + + assert_eq!(response, 12345); + Ok(()) +} + +#[tokio::test] +async fn test_contract_setup_macro_deploy_with_salt() -> Result<()> { + // ANCHOR: contract_setup_macro_multi + setup_program_test!( + Wallets("wallet"), + Abigen( + Contract( + name = "LibContract", + project = "e2e/sway/contracts/lib_contract" + ), + Contract( + name = "LibContractCaller", + project = "e2e/sway/contracts/lib_contract_caller" + ), + ), + Deploy( + name = "lib_contract_instance", + contract = "LibContract", + wallet = "wallet" + ), + Deploy( + name = "contract_caller_instance", + contract = "LibContractCaller", + wallet = "wallet" + ), + Deploy( + name = "contract_caller_instance2", + contract = "LibContractCaller", + wallet = "wallet" + ), + ); + let lib_contract_id = lib_contract_instance.contract_id(); + + let contract_caller_id = contract_caller_instance.contract_id(); + + let contract_caller_id2 = contract_caller_instance2.contract_id(); + + // Because we deploy with salt, we can deploy the same contract multiple times + assert_ne!(contract_caller_id, contract_caller_id2); + + // The first contract can be called because they were deployed on the same provider + let response = contract_caller_instance + .methods() + .increment_from_contract(lib_contract_id, 42) + .with_contracts(&[&lib_contract_instance]) + .call() + .await?; + + assert_eq!(43, response.value); + + let response = contract_caller_instance2 + .methods() + .increment_from_contract(lib_contract_id, 42) + .with_contracts(&[&lib_contract_instance]) + .call() + .await?; + + assert_eq!(43, response.value); + // ANCHOR_END: contract_setup_macro_multi + + Ok(()) +} + +#[tokio::test] +async fn test_wallet_getter() -> Result<()> { + setup_program_test!( + Wallets("wallet"), + Abigen(Contract( + name = "TestContract", + project = "e2e/sway/contracts/contract_test" + )), + Deploy( + name = "contract_instance", + contract = "TestContract", + wallet = "wallet" + ), + ); + + assert_eq!(contract_instance.account().address(), wallet.address()); + //`contract_id()` is tested in + // async fn test_contract_calling_contract() -> Result<()> { + Ok(()) +} + +#[tokio::test] +async fn test_connect_wallet() -> Result<()> { + // ANCHOR: contract_setup_macro_manual_wallet + let config = WalletsConfig::new(Some(2), Some(1), Some(DEFAULT_COIN_AMOUNT)); + + let mut wallets = launch_custom_provider_and_get_wallets(config, None, None).await?; + let wallet = wallets.pop().unwrap(); + let wallet_2 = wallets.pop().unwrap(); + + setup_program_test!( + Abigen(Contract( + name = "TestContract", + project = "e2e/sway/contracts/contract_test" + )), + Deploy( + name = "contract_instance", + contract = "TestContract", + wallet = "wallet" + ), + ); + // ANCHOR_END: contract_setup_macro_manual_wallet + + // pay for call with wallet + let tx_policies = TxPolicies::default() + .with_tip(100) + .with_script_gas_limit(1_000_000); + + contract_instance + .methods() + .initialize_counter(42) + .with_tx_policies(tx_policies) + .call() + .await?; + + // confirm that funds have been deducted + let wallet_balance = wallet.get_asset_balance(&Default::default()).await?; + assert!(DEFAULT_COIN_AMOUNT > wallet_balance); + + // pay for call with wallet_2 + contract_instance + .with_account(wallet_2.clone()) + .methods() + .initialize_counter(42) + .with_tx_policies(tx_policies) + .call() + .await?; + + // confirm there are no changes to wallet, wallet_2 has been charged + let wallet_balance_second_call = wallet.get_asset_balance(&Default::default()).await?; + let wallet_2_balance = wallet_2.get_asset_balance(&Default::default()).await?; + assert_eq!(wallet_balance_second_call, wallet_balance); + assert!(DEFAULT_COIN_AMOUNT > wallet_2_balance); + + Ok(()) +} + +async fn setup_output_variable_estimation_test() -> Result<( + Vec, + [Identity; 3], + AssetId, + Bech32ContractId, +)> { + let wallet_config = WalletsConfig::new(Some(3), None, None); + let wallets = launch_custom_provider_and_get_wallets(wallet_config, None, None).await?; + + let contract_id = Contract::load_from( + "sway/contracts/token_ops/out/release/token_ops.bin", + LoadConfiguration::default(), + )? + .deploy(&wallets[0], TxPolicies::default()) + .await?; + + let mint_asset_id = contract_id.asset_id(&Bits256::zeroed()); + let addresses = wallets + .iter() + .map(|wallet| wallet.address().into()) + .collect::>() + .try_into() + .unwrap(); + + Ok((wallets, addresses, mint_asset_id, contract_id)) +} + +#[tokio::test] +async fn test_output_variable_estimation() -> Result<()> { + abigen!(Contract( + name = "MyContract", + abi = "e2e/sway/contracts/token_ops/out/release/token_ops-abi.json" + )); + + let (wallets, addresses, mint_asset_id, contract_id) = + setup_output_variable_estimation_test().await?; + + let contract_instance = MyContract::new(contract_id, wallets[0].clone()); + let contract_methods = contract_instance.methods(); + let amount = 1000; + + { + // Should fail due to lack of output variables + let response = contract_methods + .mint_to_addresses(amount, addresses) + .call() + .await; + + assert!(matches!( + response, + Err(Error::Transaction(Reason::Reverted { .. })) + )); + } + + { + // Should add 3 output variables automatically + let _ = contract_methods + .mint_to_addresses(amount, addresses) + .with_variable_output_policy(VariableOutputPolicy::EstimateMinimum) + .call() + .await?; + + for wallet in wallets.iter() { + let balance = wallet.get_asset_balance(&mint_asset_id).await?; + assert_eq!(balance, amount); + } + } + + Ok(()) +} + +#[tokio::test] +async fn test_output_variable_estimation_multicall() -> Result<()> { + abigen!(Contract( + name = "MyContract", + abi = "e2e/sway/contracts/token_ops/out/release/token_ops-abi.json" + )); + + let (wallets, addresses, mint_asset_id, contract_id) = + setup_output_variable_estimation_test().await?; + + let contract_instance = MyContract::new(contract_id.clone(), wallets[0].clone()); + let contract_methods = contract_instance.methods(); + const NUM_OF_CALLS: u64 = 3; + let amount = 1000; + let total_amount = amount * NUM_OF_CALLS; + + let mut multi_call_handler = CallHandler::new_multi_call(wallets[0].clone()); + for _ in 0..NUM_OF_CALLS { + let call_handler = contract_methods.mint_to_addresses(amount, addresses); + multi_call_handler = multi_call_handler.add_call(call_handler); + } + + wallets[0] + .force_transfer_to_contract( + &contract_id, + total_amount, + AssetId::zeroed(), + TxPolicies::default(), + ) + .await + .unwrap(); + + let base_layer_address = Bits256([1u8; 32]); + let call_handler = contract_methods.send_message(base_layer_address, amount); + multi_call_handler = multi_call_handler.add_call(call_handler); + + let _ = multi_call_handler + .with_variable_output_policy(VariableOutputPolicy::EstimateMinimum) + .call::<((), (), ())>() + .await?; + + for wallet in wallets.iter() { + let balance = wallet.get_asset_balance(&mint_asset_id).await?; + assert_eq!(balance, 3 * amount); + } + + Ok(()) +} + +#[tokio::test] +async fn test_contract_instance_get_balances() -> Result<()> { + let mut wallet = WalletUnlocked::new_random(None); + let (coins, asset_ids) = setup_multiple_assets_coins(wallet.address(), 2, 4, 8); + + let random_asset_id = &asset_ids[1]; + let provider = setup_test_provider(coins.clone(), vec![], None, None).await?; + wallet.set_provider(provider.clone()); + + setup_program_test!( + Abigen(Contract( + name = "TestContract", + project = "e2e/sway/contracts/contract_test" + )), + Deploy( + name = "contract_instance", + contract = "TestContract", + wallet = "wallet" + ), + ); + let contract_id = contract_instance.contract_id(); + + // Check the current balance of the contract with id 'contract_id' + let contract_balances = contract_instance.get_balances().await?; + assert!(contract_balances.is_empty()); + + // Transfer an amount to the contract + let amount = 8; + wallet + .force_transfer_to_contract(contract_id, amount, *random_asset_id, TxPolicies::default()) + .await?; + + // Check that the contract now has 1 coin + let contract_balances = contract_instance.get_balances().await?; + assert_eq!(contract_balances.len(), 1); + + let random_asset_balance = contract_balances.get(random_asset_id).unwrap(); + assert_eq!(*random_asset_balance, amount); + + Ok(()) +} + +#[tokio::test] +async fn contract_call_futures_implement_send() -> Result<()> { + use std::future::Future; + + fn tokio_spawn_imitation(_: T) + where + T: Future + Send + 'static, + { + } + + setup_program_test!( + Wallets("wallet"), + Abigen(Contract( + name = "TestContract", + project = "e2e/sway/contracts/contract_test" + )), + Deploy( + name = "contract_instance", + contract = "TestContract", + wallet = "wallet" + ), + ); + + tokio_spawn_imitation(async move { + contract_instance + .methods() + .initialize_counter(42) + .call() + .await + .unwrap(); + }); + Ok(()) +} + +#[tokio::test] +async fn test_contract_set_estimation() -> Result<()> { + setup_program_test!( + Wallets("wallet"), + Abigen( + Contract( + name = "LibContract", + project = "e2e/sway/contracts/lib_contract" + ), + Contract( + name = "LibContractCaller", + project = "e2e/sway/contracts/lib_contract_caller" + ), + ), + Deploy( + name = "lib_contract_instance", + contract = "LibContract", + wallet = "wallet" + ), + Deploy( + name = "contract_caller_instance", + contract = "LibContractCaller", + wallet = "wallet" + ), + ); + let lib_contract_id = lib_contract_instance.contract_id(); + + let res = lib_contract_instance.methods().increment(42).call().await?; + assert_eq!(43, res.value); + + { + // Should fail due to missing external contracts + let res = contract_caller_instance + .methods() + .increment_from_contract(lib_contract_id, 42) + .call() + .await; + + assert!(matches!( + res, + Err(Error::Transaction(Reason::Reverted { .. })) + )); + } + + let res = contract_caller_instance + .methods() + .increment_from_contract(lib_contract_id, 42) + .determine_missing_contracts(None) + .await? + .call() + .await?; + + assert_eq!(43, res.value); + Ok(()) +} + +#[tokio::test] +async fn test_output_variable_contract_id_estimation_multicall() -> Result<()> { + setup_program_test!( + Wallets("wallet"), + Abigen( + Contract( + name = "LibContract", + project = "e2e/sway/contracts/lib_contract" + ), + Contract( + name = "LibContractCaller", + project = "e2e/sway/contracts/lib_contract_caller" + ), + Contract( + name = "TestContract", + project = "e2e/sway/contracts/contract_test" + ), + ), + Deploy( + name = "lib_contract_instance", + contract = "LibContract", + wallet = "wallet" + ), + Deploy( + name = "contract_caller_instance", + contract = "LibContractCaller", + wallet = "wallet" + ), + Deploy( + name = "contract_test_instance", + contract = "TestContract", + wallet = "wallet" + ), + ); + + let lib_contract_id = lib_contract_instance.contract_id(); + + let contract_methods = contract_caller_instance.methods(); + + let mut multi_call_handler = + CallHandler::new_multi_call(wallet.clone()).with_tx_policies(Default::default()); + + for _ in 0..3 { + let call_handler = contract_methods.increment_from_contract(lib_contract_id, 42); + multi_call_handler = multi_call_handler.add_call(call_handler); + } + + // add call that does not need ContractId + let contract_methods = contract_test_instance.methods(); + let call_handler = contract_methods.get(5, 6); + + multi_call_handler = multi_call_handler.add_call(call_handler); + + let call_response = multi_call_handler + .determine_missing_contracts(None) + .await? + .call::<(u64, u64, u64, u64)>() + .await?; + + assert_eq!(call_response.value, (43, 43, 43, 11)); + + Ok(()) +} + +#[tokio::test] +async fn test_contract_call_with_non_default_max_input() -> Result<()> { + use fuels::{ + tx::{ConsensusParameters, TxParameters}, + types::coin::Coin, + }; + + let mut consensus_parameters = ConsensusParameters::default(); + let tx_params = TxParameters::default() + .with_max_inputs(123) + .with_max_size(1_000_000); + consensus_parameters.set_tx_params(tx_params); + let contract_params = ContractParameters::default().with_contract_max_size(1_000_000); + consensus_parameters.set_contract_params(contract_params); + + let mut wallet = WalletUnlocked::new_random(None); + + let coins: Vec = setup_single_asset_coins( + wallet.address(), + Default::default(), + DEFAULT_NUM_COINS, + DEFAULT_COIN_AMOUNT, + ); + let chain_config = ChainConfig { + consensus_parameters: consensus_parameters.clone(), + ..ChainConfig::default() + }; + + let provider = setup_test_provider(coins, vec![], None, Some(chain_config)).await?; + wallet.set_provider(provider.clone()); + assert_eq!(consensus_parameters, *provider.consensus_parameters()); + + setup_program_test!( + Abigen(Contract( + name = "TestContract", + project = "e2e/sway/contracts/contract_test" + )), + Deploy( + name = "contract_instance", + contract = "TestContract", + wallet = "wallet" + ), + ); + + let response = contract_instance.methods().get(5, 6).call().await?; + + assert_eq!(response.value, 11); + + Ok(()) +} + +#[tokio::test] +async fn test_add_custom_assets() -> Result<()> { + let initial_amount = 100_000; + let asset_base = AssetConfig { + id: AssetId::zeroed(), + num_coins: 1, + coin_amount: initial_amount, + }; + + let asset_id_1 = AssetId::from([3u8; 32]); + let asset_1 = AssetConfig { + id: asset_id_1, + num_coins: 1, + coin_amount: initial_amount, + }; + + let asset_id_2 = AssetId::from([1u8; 32]); + let asset_2 = AssetConfig { + id: asset_id_2, + num_coins: 1, + coin_amount: initial_amount, + }; + + let assets = vec![asset_base, asset_1, asset_2]; + + let num_wallets = 2; + let wallet_config = WalletsConfig::new_multiple_assets(num_wallets, assets); + let mut wallets = launch_custom_provider_and_get_wallets(wallet_config, None, None).await?; + let wallet_1 = wallets.pop().unwrap(); + let wallet_2 = wallets.pop().unwrap(); + + setup_program_test!( + Abigen(Contract( + name = "MyContract", + project = "e2e/sway/contracts/contract_test" + )), + Deploy( + name = "contract_instance", + contract = "MyContract", + wallet = "wallet_1" + ), + ); + + let amount_1 = 5000; + let amount_2 = 3000; + let response = contract_instance + .methods() + .get(5, 6) + .add_custom_asset(asset_id_1, amount_1, Some(wallet_2.address().clone())) + .add_custom_asset(asset_id_2, amount_2, Some(wallet_2.address().clone())) + .call() + .await?; + + assert_eq!(response.value, 11); + + let balance_asset_1 = wallet_1.get_asset_balance(&asset_id_1).await?; + let balance_asset_2 = wallet_1.get_asset_balance(&asset_id_2).await?; + assert_eq!(balance_asset_1, initial_amount - amount_1); + assert_eq!(balance_asset_2, initial_amount - amount_2); + + let balance_asset_1 = wallet_2.get_asset_balance(&asset_id_1).await?; + let balance_asset_2 = wallet_2.get_asset_balance(&asset_id_2).await?; + assert_eq!(balance_asset_1, initial_amount + amount_1); + assert_eq!(balance_asset_2, initial_amount + amount_2); + + Ok(()) +} + +#[tokio::test] +async fn contract_load_error_messages() { + { + let binary_path = "sway/contracts/contract_test/out/release/no_file_on_path.bin"; + let expected_error = format!("io: file \"{binary_path}\" does not exist"); + + let error = Contract::load_from(binary_path, LoadConfiguration::default()) + .expect_err("should have failed"); + + assert_eq!(error.to_string(), expected_error); + } + { + let binary_path = "sway/contracts/contract_test/out/release/contract_test-abi.json"; + let expected_error = format!("expected \"{binary_path}\" to have '.bin' extension"); + + let error = Contract::load_from(binary_path, LoadConfiguration::default()) + .expect_err("should have failed"); + + assert_eq!(error.to_string(), expected_error); + } +} + +#[tokio::test] +async fn test_payable_annotation() -> Result<()> { + setup_program_test!( + Wallets("wallet"), + Abigen(Contract( + name = "TestContract", + project = "e2e/sway/contracts/payable_annotation" + )), + Deploy( + name = "contract_instance", + contract = "TestContract", + wallet = "wallet" + ), + ); + + let contract_methods = contract_instance.methods(); + + let response = contract_methods + .payable() + .call_params( + CallParameters::default() + .with_amount(100) + .with_gas_forwarded(20_000), + )? + .call() + .await?; + + assert_eq!(response.value, 42); + + // ANCHOR: non_payable_params + let err = contract_methods + .non_payable() + .call_params(CallParameters::default().with_amount(100)) + .expect_err("should return error"); + + assert!(matches!(err, Error::Other(s) if s.contains("assets forwarded to non-payable method"))); + // ANCHOR_END: non_payable_params + + let response = contract_methods + .non_payable() + .call_params(CallParameters::default().with_gas_forwarded(20_000))? + .call() + .await?; + + assert_eq!(response.value, 42); + + Ok(()) +} + +#[tokio::test] +async fn multi_call_from_calls_with_different_account_types() -> Result<()> { + use fuels::prelude::*; + + abigen!(Contract( + name = "MyContract", + abi = "e2e/sway/contracts/contract_test/out/release/contract_test-abi.json" + )); + + let wallet = WalletUnlocked::new_random(None); + let predicate = Predicate::from_code(vec![]); + + let contract_methods_wallet = + MyContract::new(Bech32ContractId::default(), wallet.clone()).methods(); + let contract_methods_predicate = + MyContract::new(Bech32ContractId::default(), predicate).methods(); + + let call_handler_1 = contract_methods_wallet.initialize_counter(42); + let call_handler_2 = contract_methods_predicate.get_array([42; 2]); + + let _multi_call_handler = CallHandler::new_multi_call(wallet) + .add_call(call_handler_1) + .add_call(call_handler_2); + + Ok(()) +} + +#[tokio::test] +async fn low_level_call() -> Result<()> { + use fuels::types::SizedAsciiString; + + setup_program_test!( + Wallets("wallet"), + Abigen( + Contract( + name = "MyCallerContract", + project = "e2e/sway/contracts/low_level_caller" + ), + Contract( + name = "MyTargetContract", + project = "e2e/sway/contracts/contract_test" + ), + ), + Deploy( + name = "caller_contract_instance", + contract = "MyCallerContract", + wallet = "wallet" + ), + Deploy( + name = "target_contract_instance", + contract = "MyTargetContract", + wallet = "wallet" + ), + ); + + let function_selector = encode_fn_selector("initialize_counter"); + let call_data = calldata!(42u64)?; + + caller_contract_instance + .methods() + .call_low_level_call( + target_contract_instance.id(), + Bytes(function_selector), + Bytes(call_data), + ) + .determine_missing_contracts(None) + .await? + .call() + .await?; + + let response = target_contract_instance + .methods() + .get_counter() + .call() + .await?; + assert_eq!(response.value, 42); + + let function_selector = encode_fn_selector("set_value_multiple_complex"); + let call_data = calldata!( + MyStruct { + a: true, + b: [1, 2, 3], + }, + SizedAsciiString::<4>::try_from("fuel")? + )?; + + caller_contract_instance + .methods() + .call_low_level_call( + target_contract_instance.id(), + Bytes(function_selector), + Bytes(call_data), + ) + .determine_missing_contracts(None) + .await? + .call() + .await?; + + let result_uint = target_contract_instance + .methods() + .get_counter() + .call() + .await + .unwrap() + .value; + + let result_bool = target_contract_instance + .methods() + .get_bool_value() + .call() + .await + .unwrap() + .value; + + let result_str = target_contract_instance + .methods() + .get_str_value() + .call() + .await + .unwrap() + .value; + + assert_eq!(result_uint, 42); + assert!(result_bool); + assert_eq!(result_str, "fuel"); + + Ok(()) +} + +#[cfg(any(not(feature = "fuel-core-lib"), feature = "rocksdb"))] +#[test] +fn db_rocksdb() { + use std::{fs, str::FromStr}; + + use fuels::{ + accounts::wallet::WalletUnlocked, + client::{PageDirection, PaginationRequest}, + crypto::SecretKey, + prelude::{setup_test_provider, DbType, Error, ViewOnlyAccount, DEFAULT_COIN_AMOUNT}, + }; + + let temp_dir = tempfile::tempdir().expect("failed to make tempdir"); + let temp_dir_name = temp_dir + .path() + .file_name() + .expect("failed to get file name") + .to_string_lossy() + .to_string(); + let temp_database_path = temp_dir.path().join("db"); + + tokio::runtime::Runtime::new() + .expect("tokio runtime failed") + .block_on(async { + let _ = temp_dir; + let wallet = WalletUnlocked::new_from_private_key( + SecretKey::from_str( + "0x4433d156e8c53bf5b50af07aa95a29436f29a94e0ccc5d58df8e57bdc8583c32", + )?, + None, + ); + + const NUMBER_OF_ASSETS: u64 = 2; + let node_config = NodeConfig { + database_type: DbType::RocksDb(Some(temp_database_path.clone())), + ..NodeConfig::default() + }; + + let chain_config = ChainConfig { + chain_name: temp_dir_name.clone(), + consensus_parameters: Default::default(), + ..ChainConfig::local_testnet() + }; + + let (coins, _) = setup_multiple_assets_coins( + wallet.address(), + NUMBER_OF_ASSETS, + DEFAULT_NUM_COINS, + DEFAULT_COIN_AMOUNT, + ); + + let provider = + setup_test_provider(coins.clone(), vec![], Some(node_config), Some(chain_config)) + .await?; + + provider.produce_blocks(2, None).await?; + + Ok::<(), Error>(()) + }) + .unwrap(); + + // The runtime needs to be terminated because the node can currently only be killed when the runtime itself shuts down. + + tokio::runtime::Runtime::new() + .expect("tokio runtime failed") + .block_on(async { + let node_config = NodeConfig { + database_type: DbType::RocksDb(Some(temp_database_path.clone())), + ..NodeConfig::default() + }; + + let provider = setup_test_provider(vec![], vec![], Some(node_config), None).await?; + // the same wallet that was used when rocksdb was built. When we connect it to the provider, we expect it to have the same amount of assets + let mut wallet = WalletUnlocked::new_from_private_key( + SecretKey::from_str( + "0x4433d156e8c53bf5b50af07aa95a29436f29a94e0ccc5d58df8e57bdc8583c32", + )?, + None, + ); + + wallet.set_provider(provider.clone()); + + let blocks = provider + .get_blocks(PaginationRequest { + cursor: None, + results: 10, + direction: PageDirection::Forward, + }) + .await? + .results; + + assert_eq!(blocks.len(), 3); + assert_eq!( + *wallet.get_balances().await?.iter().next().unwrap().1, + DEFAULT_COIN_AMOUNT + ); + assert_eq!( + *wallet.get_balances().await?.iter().next().unwrap().1, + DEFAULT_COIN_AMOUNT + ); + assert_eq!(wallet.get_balances().await?.len(), 2); + + fs::remove_dir_all( + temp_database_path + .parent() + .expect("db parent folder does not exist"), + )?; + + Ok::<(), Error>(()) + }) + .unwrap(); +} + +#[tokio::test] +async fn can_configure_decoding_of_contract_return() -> Result<()> { + setup_program_test!( + Wallets("wallet"), + Abigen(Contract( + name = "MyContract", + project = "e2e/sway/contracts/needs_custom_decoder" + ),), + Deploy( + contract = "MyContract", + name = "contract_instance", + wallet = "wallet" + ) + ); + + let methods = contract_instance.methods(); + { + // Single call: Will not work if max_tokens not big enough + methods.i_return_a_1k_el_array().with_decoder_config(DecoderConfig{max_tokens: 100, ..Default::default()}).call().await.expect_err( + "should have failed because there are more tokens than what is supported by default", + ); + } + { + // Single call: Works when limit is bumped + let result = methods + .i_return_a_1k_el_array() + .with_decoder_config(DecoderConfig { + max_tokens: 1001, + ..Default::default() + }) + .call() + .await? + .value; + + assert_eq!(result, [0; 1000]); + } + { + // Multi call: Will not work if max_tokens not big enough + CallHandler::new_multi_call(wallet.clone()) + .add_call(methods.i_return_a_1k_el_array()) + .with_decoder_config(DecoderConfig { max_tokens: 100, ..Default::default() }) + .call::<([u8; 1000],)>().await.expect_err( + "should have failed because there are more tokens than what is supported by default", + ); + } + { + // Multi call: Works when configured + CallHandler::new_multi_call(wallet.clone()) + .add_call(methods.i_return_a_1k_el_array()) + .with_decoder_config(DecoderConfig { + max_tokens: 1001, + ..Default::default() + }) + .call::<([u8; 1000],)>() + .await + .unwrap(); + } + + Ok(()) +} + +#[tokio::test] +async fn test_contract_submit_and_response() -> Result<()> { + setup_program_test!( + Wallets("wallet"), + Abigen(Contract( + name = "TestContract", + project = "e2e/sway/contracts/contract_test" + )), + Deploy( + name = "contract_instance", + contract = "TestContract", + wallet = "wallet" + ), + ); + + let contract_methods = contract_instance.methods(); + + let submitted_tx = contract_methods.get(1, 2).submit().await?; + let value = submitted_tx.response().await?.value; + + assert_eq!(value, 3); + + let contract_methods = contract_instance.methods(); + let call_handler_1 = contract_methods.get_single(7); + let call_handler_2 = contract_methods.get_single(42); + + let multi_call_handler = CallHandler::new_multi_call(wallet.clone()) + .add_call(call_handler_1) + .add_call(call_handler_2); + + let handle = multi_call_handler.submit().await?; + let (val_1, val_2): (u64, u64) = handle.response().await?.value; + + assert_eq!(val_1, 7); + assert_eq!(val_2, 42); + + Ok(()) +} + +#[tokio::test] +async fn test_heap_type_multicall() -> Result<()> { + setup_program_test!( + Wallets("wallet"), + Abigen( + Contract( + name = "TestContract", + project = "e2e/sway/contracts/contract_test" + ), + Contract( + name = "VectorOutputContract", + project = "e2e/sway/types/contracts/vector_output" + ) + ), + Deploy( + name = "contract_instance", + contract = "VectorOutputContract", + wallet = "wallet" + ), + Deploy( + name = "contract_instance_2", + contract = "TestContract", + wallet = "wallet" + ), + ); + + { + let call_handler_1 = contract_instance.methods().u8_in_vec(5); + let call_handler_2 = contract_instance_2.methods().get_single(7); + let call_handler_3 = contract_instance.methods().u8_in_vec(3); + + let multi_call_handler = CallHandler::new_multi_call(wallet.clone()) + .add_call(call_handler_1) + .add_call(call_handler_2) + .add_call(call_handler_3); + + let (val_1, val_2, val_3): (Vec, u64, Vec) = multi_call_handler.call().await?.value; + + assert_eq!(val_1, vec![0, 1, 2, 3, 4]); + assert_eq!(val_2, 7); + assert_eq!(val_3, vec![0, 1, 2]); + } + + Ok(()) +} + +#[tokio::test] +async fn heap_types_correctly_offset_in_create_transactions_w_storage_slots() -> Result<()> { + setup_program_test!( + Wallets("wallet"), + Abigen(Predicate( + name = "MyPredicate", + project = "e2e/sway/types/predicates/predicate_vector" + ),), + ); + + let provider = wallet.try_provider()?.clone(); + let data = MyPredicateEncoder::default().encode_data(18, 24, vec![2, 4, 42])?; + let predicate = Predicate::load_from( + "sway/types/predicates/predicate_vector/out/release/predicate_vector.bin", + )? + .with_data(data) + .with_provider(provider); + + wallet + .transfer( + predicate.address(), + 10_000, + AssetId::zeroed(), + TxPolicies::default(), + ) + .await?; + + // if the contract is successfully deployed then the predicate was unlocked. This further means + // the offsets were setup correctly since the predicate uses heap types in its arguments. + // Storage slots were loaded automatically by default + Contract::load_from( + "sway/contracts/storage/out/release/storage.bin", + LoadConfiguration::default(), + )? + .deploy(&predicate, TxPolicies::default()) + .await?; + + Ok(()) +} + +#[tokio::test] +async fn test_arguments_with_gas_forwarded() -> Result<()> { + setup_program_test!( + Wallets("wallet"), + Abigen( + Contract( + name = "TestContract", + project = "e2e/sway/contracts/contract_test" + ), + Contract( + name = "VectorOutputContract", + project = "e2e/sway/types/contracts/vectors" + ) + ), + Deploy( + name = "contract_instance", + contract = "TestContract", + wallet = "wallet" + ), + Deploy( + name = "contract_instance_2", + contract = "VectorOutputContract", + wallet = "wallet" + ), + ); + + let x = 128; + let vec_input = vec![0, 1, 2]; + { + let response = contract_instance + .methods() + .get_single(x) + .call_params(CallParameters::default().with_gas_forwarded(4096))? + .call() + .await?; + + assert_eq!(response.value, x); + } + { + contract_instance_2 + .methods() + .u32_vec(vec_input.clone()) + .call_params(CallParameters::default().with_gas_forwarded(4096))? + .call() + .await?; + } + { + let call_handler_1 = contract_instance.methods().get_single(x); + let call_handler_2 = contract_instance_2.methods().u32_vec(vec_input); + + let multi_call_handler = CallHandler::new_multi_call(wallet.clone()) + .add_call(call_handler_1) + .add_call(call_handler_2); + + let (value, _): (u64, ()) = multi_call_handler.call().await?.value; + + assert_eq!(value, x); + } + + Ok(()) +} + +#[tokio::test] +async fn contract_custom_call_no_signatures_strategy() -> Result<()> { + setup_program_test!( + Wallets("wallet"), + Abigen(Contract( + name = "TestContract", + project = "e2e/sway/contracts/contract_test" + )), + Deploy( + name = "contract_instance", + contract = "TestContract", + wallet = "wallet" + ), + ); + let provider = wallet.try_provider()?; + + let counter = 42; + let call_handler = contract_instance.methods().initialize_counter(counter); + + let mut tb = call_handler.transaction_builder().await?; + + let amount = 10; + let new_base_inputs = wallet + .get_asset_inputs_for_amount(*provider.base_asset_id(), amount, None) + .await?; + tb.inputs_mut().extend(new_base_inputs); + + // ANCHOR: tb_no_signatures_strategy + let mut tx = tb + .with_build_strategy(ScriptBuildStrategy::NoSignatures) + .build(provider) + .await?; + // ANCHOR: tx_sign_with + tx.sign_with(&wallet, provider.chain_id()).await?; + // ANCHOR_END: tx_sign_with + // ANCHOR_END: tb_no_signatures_strategy + + let tx_id = provider.send_transaction(tx).await?; + let tx_status = provider.tx_status(&tx_id).await?; + + let response = call_handler.get_response_from(tx_status)?; + + assert_eq!(counter, response.value); + + Ok(()) +} + +#[tokio::test] +async fn contract_encoder_config_is_applied() -> Result<()> { + setup_program_test!( + Abigen(Contract( + name = "TestContract", + project = "e2e/sway/contracts/contract_test" + )), + Wallets("wallet") + ); + let contract_id = Contract::load_from( + "sway/contracts/contract_test/out/release/contract_test.bin", + LoadConfiguration::default(), + )? + .deploy(&wallet, TxPolicies::default()) + .await?; + + let instance = TestContract::new(contract_id.clone(), wallet.clone()); + + { + let _encoding_ok = instance + .methods() + .get(0, 1) + .call() + .await + .expect("should not fail as it uses the default encoder config"); + } + { + let encoder_config = EncoderConfig { + max_tokens: 1, + ..Default::default() + }; + let instance_with_encoder_config = instance.with_encoder_config(encoder_config); + + // uses 2 tokens when 1 is the limit + let encoding_error = instance_with_encoder_config + .methods() + .get(0, 1) + .call() + .await + .expect_err("should error"); + + assert!(encoding_error.to_string().contains( + "cannot encode contract call arguments: codec: token limit `1` reached while encoding." + )); + + let encoding_error = instance_with_encoder_config + .methods() + .get(0, 1) + .simulate(Execution::Realistic) + .await + .expect_err("should error"); + + assert!(encoding_error.to_string().contains( + "cannot encode contract call arguments: codec: token limit `1` reached while encoding." + )); + } + + Ok(()) +} + +#[tokio::test] +async fn test_reentrant_calls() -> Result<()> { + setup_program_test!( + Wallets("wallet"), + Abigen(Contract( + name = "LibContractCaller", + project = "e2e/sway/contracts/lib_contract_caller" + ),), + Deploy( + name = "contract_caller_instance", + contract = "LibContractCaller", + wallet = "wallet" + ), + ); + + let contract_id = contract_caller_instance.contract_id(); + let response = contract_caller_instance + .methods() + .re_entrant(contract_id, true) + .call() + .await?; + + assert_eq!(42, response.value); + + Ok(()) +} + +#[tokio::test] +async fn msg_sender_gas_estimation_issue() { + // Gas estimation requires an input of the base asset. If absent, a fake input is + // added. However, if a non-base coin is present and the fake input introduces a + // second owner, it causes the `msg_sender` sway fn to fail. This leads + // to a premature failure in gas estimation, risking transaction failure due to + // a low gas limit. + let mut wallet = WalletUnlocked::new_random(None); + + let (coins, ids) = + setup_multiple_assets_coins(wallet.address(), 2, DEFAULT_NUM_COINS, DEFAULT_COIN_AMOUNT); + + let provider = setup_test_provider(coins, vec![], None, None) + .await + .unwrap(); + wallet.set_provider(provider.clone()); + + setup_program_test!( + Abigen(Contract( + name = "MyContract", + project = "e2e/sway/contracts/msg_methods" + )), + Deploy( + contract = "MyContract", + name = "contract_instance", + wallet = "wallet" + ) + ); + + let asset_id = ids[0]; + + // The fake coin won't be added if we add a base asset, so let's not do that + assert!(asset_id != *provider.base_asset_id()); + let call_params = CallParameters::default() + .with_amount(100) + .with_asset_id(asset_id); + + contract_instance + .methods() + .message_sender() + .call_params(call_params) + .unwrap() + .call() + .await + .unwrap(); +} + +#[tokio::test] +async fn variable_output_estimation_is_optimized() -> Result<()> { + setup_program_test!( + Wallets("wallet"), + Abigen(Contract( + name = "MyContract", + project = "e2e/sway/contracts/var_outputs" + )), + Deploy( + contract = "MyContract", + name = "contract_instance", + wallet = "wallet" + ) + ); + + let contract_methods = contract_instance.methods(); + + let coins = 252; + let recipient = Identity::Address(wallet.address().into()); + let start = Instant::now(); + let _ = contract_methods + .mint(coins, recipient) + .with_variable_output_policy(VariableOutputPolicy::EstimateMinimum) + .call() + .await?; + + // debug builds are slower (20x for `fuel-core-lib`, 4x for a release-fuel-core-binary) + // we won't validate in that case so we don't have to maintain two expectations + if !cfg!(debug_assertions) { + let elapsed = start.elapsed().as_secs(); + let limit = 2; + if elapsed > limit { + panic!("Estimation took too long ({elapsed}). Limit is {limit}"); + } + } + + Ok(()) +} + +#[tokio::test] +async fn simulations_can_be_made_without_coins() -> Result<()> { + setup_program_test!( + Wallets("wallet"), + Abigen(Contract( + name = "MyContract", + project = "e2e/sway/contracts/contract_test" + )), + Deploy( + name = "contract_instance", + contract = "MyContract", + wallet = "wallet" + ) + ); + let contract_id = contract_instance.contract_id(); + let provider = wallet.provider().cloned(); + + let no_funds_wallet = WalletUnlocked::new_random(provider); + + let response = MyContract::new(contract_id, no_funds_wallet.clone()) + .methods() + .get(5, 6) + .simulate(Execution::StateReadOnly) + .await?; + + assert_eq!(response.value, 11); + + Ok(()) +} + +#[tokio::test] +async fn simulations_can_be_made_without_coins_multicall() -> Result<()> { + setup_program_test!( + Wallets("wallet"), + Abigen(Contract( + name = "MyContract", + project = "e2e/sway/contracts/contract_test" + )), + Deploy( + name = "contract_instance", + contract = "MyContract", + wallet = "wallet" + ) + ); + let contract_id = contract_instance.contract_id(); + let provider = wallet.provider().cloned(); + + let no_funds_wallet = WalletUnlocked::new_random(provider); + let contract_instance = MyContract::new(contract_id, no_funds_wallet.clone()); + + let contract_methods = contract_instance.methods(); + + let call_handler_1 = contract_methods.get(1, 2); + let call_handler_2 = contract_methods.get(3, 4); + + let mut multi_call_handler = CallHandler::new_multi_call(no_funds_wallet) + .add_call(call_handler_1) + .add_call(call_handler_2); + + let value: (u64, u64) = multi_call_handler + .simulate(Execution::StateReadOnly) + .await? + .value; + + assert_eq!(value, (3, 7)); + + Ok(()) +} + +#[tokio::test] +async fn contract_call_with_non_zero_base_asset_id_and_tip() -> Result<()> { + use fuels::{prelude::*, tx::ConsensusParameters}; + + abigen!(Contract( + name = "MyContract", + abi = "e2e/sway/contracts/contract_test/out/release/contract_test-abi.json" + )); + + let asset_id = AssetId::new([1; 32]); + + let mut consensus_parameters = ConsensusParameters::default(); + consensus_parameters.set_base_asset_id(asset_id); + + let config = ChainConfig { + consensus_parameters, + ..Default::default() + }; + + let asset_base = AssetConfig { + id: asset_id, + num_coins: 1, + coin_amount: 10_000, + }; + + let wallet_config = WalletsConfig::new_multiple_assets(1, vec![asset_base]); + let wallets = launch_custom_provider_and_get_wallets(wallet_config, None, Some(config)).await?; + let wallet = wallets.first().expect("has wallet"); + + let contract_id = Contract::load_from( + "sway/contracts/contract_test/out/release/contract_test.bin", + LoadConfiguration::default(), + )? + .deploy(wallet, TxPolicies::default()) + .await?; + + let contract_instance = MyContract::new(contract_id, wallet.clone()); + + let response = contract_instance + .methods() + .initialize_counter(42) + .with_tx_policies(TxPolicies::default().with_tip(10)) + .call() + .await?; + + assert_eq!(42, response.value); + + Ok(()) +} + +#[tokio::test] +async fn max_fee_estimation_respects_tolerance() -> Result<()> { + use fuels::prelude::*; + + let mut call_wallet = WalletUnlocked::new_random(None); + + let call_coins = setup_single_asset_coins(call_wallet.address(), AssetId::BASE, 1000, 1); + + let mut deploy_wallet = WalletUnlocked::new_random(None); + let deploy_coins = + setup_single_asset_coins(deploy_wallet.address(), AssetId::BASE, 1, 1_000_000); + + let provider = + setup_test_provider([call_coins, deploy_coins].concat(), vec![], None, None).await?; + + call_wallet.set_provider(provider.clone()); + deploy_wallet.set_provider(provider.clone()); + + setup_program_test!( + Abigen(Contract( + name = "MyContract", + project = "e2e/sway/contracts/contract_test" + )), + Deploy( + name = "contract_instance", + wallet = "deploy_wallet", + contract = "MyContract" + ) + ); + let contract_instance = contract_instance.with_account(call_wallet.clone()); + + let max_fee_from_tx = |tolerance: f32| { + let contract_instance = contract_instance.clone(); + let provider = provider.clone(); + async move { + let builder = contract_instance + .methods() + .initialize_counter(42) + .transaction_builder() + .await + .unwrap(); + + assert_eq!( + builder.max_fee_estimation_tolerance, 0.05, + "Expected pre-set tolerance of 0.05" + ); + + builder + .with_max_fee_estimation_tolerance(tolerance) + .build(&provider) + .await + .unwrap() + .max_fee() + .unwrap() + } + }; + + let max_fee_from_builder = |tolerance: f32| { + let contract_instance = contract_instance.clone(); + let provider = provider.clone(); + async move { + contract_instance + .methods() + .initialize_counter(42) + .transaction_builder() + .await + .unwrap() + .with_max_fee_estimation_tolerance(tolerance) + .estimate_max_fee(&provider) + .await + .unwrap() + } + }; + + let base_amount_in_inputs = |tolerance: f32| { + let contract_instance = contract_instance.clone(); + let call_wallet = &call_wallet; + async move { + let mut tb = contract_instance + .methods() + .initialize_counter(42) + .transaction_builder() + .await + .unwrap() + .with_max_fee_estimation_tolerance(tolerance); + + call_wallet.adjust_for_fee(&mut tb, 0).await.unwrap(); + tb.inputs + .iter() + .filter_map(|input: &Input| match input { + Input::ResourceSigned { resource } + if resource.coin_asset_id().unwrap() == AssetId::BASE => + { + Some(resource.amount()) + } + _ => None, + }) + .sum::() + } + }; + + let no_increase_max_fee = max_fee_from_tx(0.0).await; + let increased_max_fee = max_fee_from_tx(2.00).await; + + assert_eq!( + increased_max_fee as f64 / no_increase_max_fee as f64, + 1.00 + 2.00 + ); + + let no_increase_max_fee = max_fee_from_builder(0.0).await; + let increased_max_fee = max_fee_from_builder(2.00).await; + assert_eq!( + increased_max_fee as f64 / no_increase_max_fee as f64, + 1.00 + 2.00 + ); + + let normal_base_asset = base_amount_in_inputs(0.0).await; + let more_base_asset_due_to_bigger_tolerance = base_amount_in_inputs(2.00).await; + assert_eq!( + more_base_asset_due_to_bigger_tolerance as f64 / normal_base_asset as f64, + 1.00 + 2.00 + ); + + Ok(()) +} + +#[tokio::test] +async fn blob_contract_deployment() -> Result<()> { + // TODO: segfault record transactions again + abigen!(Contract( + name = "MyContract", + abi = "e2e/sway/contracts/huge_contract/out/release/huge_contract-abi.json" + )); + + let contract_binary = "sway/contracts/huge_contract/out/release/huge_contract.bin"; + let contract_size = std::fs::metadata(contract_binary) + .expect("contract file not found") + .len(); + + assert!( + contract_size > 150_000, + "the testnet size limit was around 100kB, we want a contract bigger than that to reflect prod (current: {contract_size}B)" + ); + + let wallets = + launch_custom_provider_and_get_wallets(WalletsConfig::new(Some(2), None, None), None, None) + .await?; + + let provider = wallets[0].provider().unwrap().clone(); + + let consensus_parameters = provider.consensus_parameters(); + + let contract_max_size = consensus_parameters.contract_params().contract_max_size(); + assert!( + contract_size > contract_max_size, + "this test should ideally be run with a contract bigger than the max contract size ({contract_max_size}B) so that we know deployment couldn't have happened without blobs" + ); + + let contract = Contract::load_from(contract_binary, LoadConfiguration::default())?; + + let contract_id = contract + .convert_to_loader(100_000)? + .deploy(&wallets[0], TxPolicies::default()) + .await?; + + let contract_instance = MyContract::new(contract_id, wallets[0].clone()); + + let response = contract_instance.methods().something().call().await?.value; + + assert_eq!(response, 1001); + + Ok(()) +} #[test] fn blob_size_must_be_greater_than_zero() { diff --git a/examples/contracts/src/lib.rs b/examples/contracts/src/lib.rs index fd2fbe027f..59729c04ac 100644 --- a/examples/contracts/src/lib.rs +++ b/examples/contracts/src/lib.rs @@ -834,7 +834,7 @@ mod tests { let load_config = LoadConfiguration::default().with_storage_configuration(storage_config); - let _: Result = Contract::load_from("...", load_config); + let _: Result<_> = Contract::load_from("...", load_config); // ANCHOR_END: storage_slots_override } @@ -845,7 +845,7 @@ mod tests { let load_config = LoadConfiguration::default().with_storage_configuration(storage_config); - let _: Result = Contract::load_from("...", load_config); + let _: Result<_> = Contract::load_from("...", load_config); // ANCHOR_END: storage_slots_disable_autoload } diff --git a/packages/fuels-accounts/src/provider/supported_fuel_core_version.rs b/packages/fuels-accounts/src/provider/supported_fuel_core_version.rs index b4ba559148..b536cb2aa8 100644 --- a/packages/fuels-accounts/src/provider/supported_fuel_core_version.rs +++ b/packages/fuels-accounts/src/provider/supported_fuel_core_version.rs @@ -1 +1 @@ -pub const SUPPORTED_FUEL_CORE_VERSION: semver::Version = semver::Version::new(0, 31, 0); +pub const SUPPORTED_FUEL_CORE_VERSION: semver::Version = semver::Version::new(0, 32, 0); diff --git a/packages/fuels-programs/src/contract/regular.rs b/packages/fuels-programs/src/contract/regular.rs index 9ac5f244ea..14171ec23d 100644 --- a/packages/fuels-programs/src/contract/regular.rs +++ b/packages/fuels-programs/src/contract/regular.rs @@ -124,7 +124,7 @@ impl Contract { let storage_slots = self.storage_slots; let mut tb = CreateTransactionBuilder::prepare_contract_deployment( - self.code.code.to_vec(), + self.code.code(), contract_id, state_root, salt, From a73260ab6da645d3a58a591edbb46bbcb8a01902 Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Thu, 8 Aug 2024 21:24:40 +0200 Subject: [PATCH 36/50] tests passing --- e2e/tests/contracts.rs | 30 +++++ examples/contracts/Cargo.toml | 2 +- examples/contracts/src/lib.rs | 123 ++++++++++-------- examples/providers/src/lib.rs | 1 + .../fuels-programs/src/contract/loader.rs | 28 ++-- .../fuels-programs/src/contract/regular.rs | 71 ++++++---- 6 files changed, 168 insertions(+), 87 deletions(-) diff --git a/e2e/tests/contracts.rs b/e2e/tests/contracts.rs index a41baadb18..de05784450 100644 --- a/e2e/tests/contracts.rs +++ b/e2e/tests/contracts.rs @@ -2478,3 +2478,33 @@ async fn unuploaded_loader_can_upload_blobs_separately_then_deploy() -> Result<( Ok(()) } + +#[tokio::test] +async fn loader_blob_already_uploaded_not_an_issue() -> Result<()> { + setup_program_test!( + Wallets("wallet"), + Abigen(Contract( + name = "MyContract", + project = "e2e/sway/contracts/huge_contract" + )), + ); + + let contract_binary = "sway/contracts/huge_contract/out/release/huge_contract.bin"; + let contract = Contract::load_from(contract_binary, LoadConfiguration::default())? + .convert_to_loader(1024)?; + + // this will upload blobs + contract + .clone() + .upload_blobs(&wallet, TxPolicies::default()) + .await?; + + // this will try to upload the blobs but skip upon encountering an error + let contract_id = contract.deploy(&wallet, TxPolicies::default()).await?; + + let contract_instance = MyContract::new(contract_id, wallet); + let response = contract_instance.methods().something().call().await?.value; + assert_eq!(response, 1001); + + Ok(()) +} diff --git a/examples/contracts/Cargo.toml b/examples/contracts/Cargo.toml index 08d417f368..4fd27acb9b 100644 --- a/examples/contracts/Cargo.toml +++ b/examples/contracts/Cargo.toml @@ -11,7 +11,7 @@ description = "Fuel Rust SDK contract examples." [dev-dependencies] fuels = { workspace = true, features = ["default"] } -rand = { workspace = true } +rand = { workspace = true, features = ["default"] } tokio = { workspace = true, features = ["full"] } [features] diff --git a/examples/contracts/src/lib.rs b/examples/contracts/src/lib.rs index 59729c04ac..6bdefe99bc 100644 --- a/examples/contracts/src/lib.rs +++ b/examples/contracts/src/lib.rs @@ -1,5 +1,6 @@ #[cfg(test)] mod tests { + use rand::Rng; use std::collections::HashSet; use fuels::{ @@ -987,6 +988,7 @@ mod tests { #[tokio::test] async fn deploying_via_loader() -> Result<()> { + #[allow(unused_variables)] use fuels::prelude::*; setup_program_test!( @@ -1001,8 +1003,12 @@ mod tests { let provider: Provider = main_wallet.try_provider()?.clone(); + let random_salt = || Salt::new(rand::thread_rng().gen()); // ANCHOR: show_contract_is_too_big - let contract = Contract::load_from(contract_binary, LoadConfiguration::default())?; + let contract = Contract::load_from( + contract_binary, + LoadConfiguration::default().with_salt(random_salt()), + )?; let max_allowed = provider .consensus_parameters() .contract_params() @@ -1011,29 +1017,78 @@ mod tests { assert!(contract.code().len() as u64 > max_allowed); // ANCHOR_END: show_contract_is_too_big - let wallet = &main_wallet; - // ANCHOR: deploy_via_loader + let wallet = main_wallet.clone(); + + // ANCHOR: manual_blob_upload_then_deploy let max_words_per_blob = 10_000; - let contract_id = Contract::load_from(contract_binary, LoadConfiguration::default())? - .convert_to_loader(max_words_per_blob)? - .deploy(wallet, TxPolicies::default()) + let blobs = Contract::load_from( + contract_binary, + LoadConfiguration::default().with_salt(random_salt()), + )? + .convert_to_loader(max_words_per_blob)? + .blobs() + .to_vec(); + + let mut all_blob_ids = vec![]; + let mut already_uploaded_blobs = HashSet::new(); + for blob in blobs { + let blob_id = blob.id(); + all_blob_ids.push(blob_id); + + // uploading the same blob twice is not allowed + if already_uploaded_blobs.contains(&blob_id) { + continue; + } + + let mut tb = BlobTransactionBuilder::default().with_blob(blob); + wallet.adjust_for_fee(&mut tb, 0).await?; + wallet.add_witnesses(&mut tb)?; + + let tx = tb.build(&provider).await?; + provider + .send_transaction_and_await_commit(tx) + .await? + .check(None)?; + + already_uploaded_blobs.insert(blob_id); + } + + let contract_id = Contract::loader_for_blob_ids(all_blob_ids, random_salt(), vec![])? + .deploy(&wallet, TxPolicies::default()) .await?; + // ANCHOR_END: manual_blob_upload_then_deploy + + // ANCHOR: deploy_via_loader + let max_words_per_blob = 10_000; + let contract_id = Contract::load_from( + contract_binary, + LoadConfiguration::default().with_salt(random_salt()), + )? + .convert_to_loader(max_words_per_blob)? + .deploy(&wallet, TxPolicies::default()) + .await?; // ANCHOR_END: deploy_via_loader // ANCHOR: auto_convert_to_loader let max_words_per_blob = 10_000; - let contract_id = Contract::load_from(contract_binary, LoadConfiguration::default())? - .smart_deploy(wallet, TxPolicies::default(), max_words_per_blob) - .await?; + let contract_id = Contract::load_from( + contract_binary, + LoadConfiguration::default().with_salt(random_salt()), + )? + .smart_deploy(&wallet, TxPolicies::default(), max_words_per_blob) + .await?; // ANCHOR_END: auto_convert_to_loader // ANCHOR: upload_blobs_then_deploy - let contract_id = Contract::load_from(contract_binary, LoadConfiguration::default())? - .convert_to_loader(max_words_per_blob)? - .upload_blobs(wallet, TxPolicies::default()) - .await? - .deploy(wallet, TxPolicies::default()) - .await?; + let contract_id = Contract::load_from( + contract_binary, + LoadConfiguration::default().with_salt(random_salt()), + )? + .convert_to_loader(max_words_per_blob)? + .upload_blobs(&wallet, TxPolicies::default()) + .await? + .deploy(&wallet, TxPolicies::default()) + .await?; // ANCHOR_END: upload_blobs_then_deploy let wallet = main_wallet.clone(); @@ -1064,47 +1119,11 @@ mod tests { .map(|chunk| Blob::new(chunk.to_vec())) .collect(); - let contract_id = Contract::loader_for_blobs(blobs, Salt::zeroed(), vec![])? + let contract_id = Contract::loader_for_blobs(blobs, random_salt(), vec![])? .deploy(&wallet, TxPolicies::default()) .await?; // ANCHOR_END: manual_blobs_then_deploy - // ANCHOR: manual_blob_upload_then_deploy - let max_words_per_blob = 10_000; - let blobs = Contract::load_from(contract_binary, LoadConfiguration::default())? - .convert_to_loader(max_words_per_blob)? - .blobs() - .to_vec(); - - let mut all_blob_ids = vec![]; - let mut already_uploaded_blobs = HashSet::new(); - for blob in blobs { - let blob_id = blob.id(); - all_blob_ids.push(blob_id); - - // uploading the same blob twice is not allowed - if already_uploaded_blobs.contains(&blob_id) { - continue; - } - - let mut tb = BlobTransactionBuilder::default().with_blob(blob); - wallet.adjust_for_fee(&mut tb, 0).await?; - wallet.add_witnesses(&mut tb)?; - - let tx = tb.build(&provider).await?; - provider - .send_transaction_and_await_commit(tx) - .await? - .check(None)?; - - already_uploaded_blobs.insert(blob_id); - } - - let contract_id = Contract::loader_for_blob_ids(all_blob_ids, Salt::zeroed(), vec![])? - .deploy(&wallet, TxPolicies::default()) - .await?; - // ANCHOR_END: manual_blob_upload_then_deploy - Ok(()) } } diff --git a/examples/providers/src/lib.rs b/examples/providers/src/lib.rs index 43fa58ce4a..f93be95141 100644 --- a/examples/providers/src/lib.rs +++ b/examples/providers/src/lib.rs @@ -4,6 +4,7 @@ mod tests { use fuels::prelude::Result; + #[ignore = "testnet currently not compatible with the sdk"] #[tokio::test] async fn connect_to_fuel_node() -> Result<()> { // ANCHOR: connect_to_testnet diff --git a/packages/fuels-programs/src/contract/loader.rs b/packages/fuels-programs/src/contract/loader.rs index 775f7791c1..252577bfe8 100644 --- a/packages/fuels-programs/src/contract/loader.rs +++ b/packages/fuels-programs/src/contract/loader.rs @@ -99,11 +99,10 @@ pub struct Loader { } impl Contract> { - pub fn code(&self) -> Cow<[u8]> { + pub fn code(&self) -> Vec { let ids: Vec<_> = self.blob_ids(); loader_contract_asm(&ids) .expect("a contract to be creatable due to the check done in loader_for_blobs") - .into() } pub fn contract_id(&self) -> ContractId { @@ -204,10 +203,22 @@ impl Contract> { account.add_witnesses(&mut tb)?; let tx = tb.build(provider).await?; - provider - .send_transaction_and_await_commit(tx) - .await? - .check(None)?; + + let tx_status_response = provider.send_transaction_and_await_commit(tx).await; + + match tx_status_response { + Ok(tx_status_response) => { + tx_status_response.check(None)?; + } + Err(err) => { + if !err + .to_string() + .contains("Execution error: BlobIdAlreadyUploaded") + { + return Err(err); + } + } + } already_uploaded.insert(id); } @@ -240,10 +251,9 @@ impl Contract> { } impl Contract> { - pub fn code(&self) -> Cow<[u8]> { + pub fn code(&self) -> Vec { loader_contract_asm(&self.code.as_blobs.blob_ids) .expect("a contract to be creatable due to the check done in loader_for_blobs") - .into() } pub fn contract_id(&self) -> ContractId { @@ -294,7 +304,7 @@ impl Contract> { account: &impl Account, tx_policies: TxPolicies, ) -> Result { - Contract::regular(self.code().into_owned(), self.salt, self.storage_slots) + Contract::regular(self.code(), self.salt, self.storage_slots) .deploy(account, tx_policies) .await } diff --git a/packages/fuels-programs/src/contract/regular.rs b/packages/fuels-programs/src/contract/regular.rs index 14171ec23d..0ea38a2194 100644 --- a/packages/fuels-programs/src/contract/regular.rs +++ b/packages/fuels-programs/src/contract/regular.rs @@ -22,16 +22,49 @@ use super::{ Loader, StorageConfiguration, }; -#[derive(Debug, Clone, PartialEq)] -pub struct Regular { - code: Vec, - configurables: Configurables, +// In a mod so that we eliminate the footgun of getting the private `code` field without applying +// configurables +mod code_types { + use fuels_core::Configurables; + + #[derive(Debug, Clone, PartialEq)] + pub struct Regular { + code: Vec, + configurables: Configurables, + } + + impl Regular { + pub(crate) fn new(code: Vec, configurables: Configurables) -> Self { + Self { + code, + configurables, + } + } + + pub(crate) fn with_code(self, code: Vec) -> Self { + Self { code, ..self } + } + + pub(crate) fn with_configurables(self, configurables: Configurables) -> Self { + Self { + configurables, + ..self + } + } + + pub(crate) fn code(&self) -> Vec { + let mut code = self.code.clone(); + self.configurables.update_constants_in(&mut code); + code + } + } } +pub use code_types::*; impl Contract { pub fn with_code(self, code: Vec) -> Self { Self { - code: Regular { code, ..self.code }, + code: self.code.with_code(code), salt: self.salt, storage_slots: self.storage_slots, } @@ -39,18 +72,13 @@ impl Contract { pub fn with_configurables(self, configurables: impl Into) -> Self { Self { - code: Regular { - configurables: configurables.into(), - ..self.code - }, + code: self.code.with_configurables(configurables.into()), ..self } } - pub fn code(&self) -> Cow<[u8]> { - let mut code = self.code.code.clone(); - self.code.configurables.update_constants_in(&mut code); - code.into() + pub fn code(&self) -> Vec { + self.code.code() } pub fn contract_id(&self) -> ContractId { @@ -66,7 +94,7 @@ impl Contract { } fn compute_roots(&self) -> (ContractId, Bytes32, Bytes32) { - compute_contract_id_and_state_root(&self.code.code, &self.salt, &self.storage_slots) + compute_contract_id_and_state_root(&self.code(), &self.salt, &self.storage_slots) } pub fn load_from( @@ -86,10 +114,7 @@ impl Contract { let storage_slots = super::determine_storage_slots(config.storage, binary_filepath)?; Ok(Contract { - code: Regular { - code: binary, - configurables: config.configurables, - }, + code: Regular::new(binary, config.configurables), salt: config.salt, storage_slots, }) @@ -101,10 +126,7 @@ impl Contract { storage_slots: Vec, ) -> Contract { Contract { - code: Regular { - code, - configurables: Configurables::default(), - }, + code: Regular::new(code, Configurables::default()), salt, storage_slots, } @@ -156,8 +178,7 @@ impl Contract { return Err(error!(Other, "blob size must be greater than 0")); } let blobs = self - .code - .code + .code() .chunks(max_words_per_blob.saturating_mul(WORD_SIZE)) .map(|chunk| Blob::new(chunk.to_vec())) .collect(); @@ -177,7 +198,7 @@ impl Contract { .contract_params() .contract_max_size() as usize; - if self.code.code.len() <= max_contract_size { + if self.code().len() <= max_contract_size { self.deploy(account, tx_policies).await } else { self.convert_to_loader(max_words_per_blob)? From 284e0885c623c2a0849cd8d6fc4ebc195364daa8 Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Thu, 8 Aug 2024 21:25:07 +0200 Subject: [PATCH 37/50] unused imports --- packages/fuels-programs/src/contract.rs | 25 +++---------------- .../fuels-programs/src/contract/loader.rs | 7 +++--- .../fuels-programs/src/contract/regular.rs | 2 +- 3 files changed, 8 insertions(+), 26 deletions(-) diff --git a/packages/fuels-programs/src/contract.rs b/packages/fuels-programs/src/contract.rs index 694ccb2317..7a23b6ba50 100644 --- a/packages/fuels-programs/src/contract.rs +++ b/packages/fuels-programs/src/contract.rs @@ -1,27 +1,8 @@ mod storage; -use std::{ - borrow::Cow, - collections::HashSet, - fmt::Debug, - fs, - path::{Path, PathBuf}, -}; - -use fuel_asm::{op, Instruction, RegId}; +use std::fmt::Debug; + use fuel_tx::{Bytes32, Contract as FuelContract, ContractId, Salt, StorageSlot}; -use fuels_accounts::{provider::Provider, Account}; -use fuels_core::{ - constants::WORD_SIZE, - types::{ - bech32::Bech32ContractId, - errors::{error, Result}, - transaction::TxPolicies, - transaction_builders::{ - Blob, BlobId, BlobTransactionBuilder, CreateTransactionBuilder, TransactionBuilder, - }, - }, -}; pub use storage::*; #[derive(Debug, Clone, PartialEq)] @@ -73,6 +54,8 @@ fn compute_contract_id_and_state_root( #[cfg(test)] mod tests { + use std::path::Path; + use fuels_accounts::wallet::WalletUnlocked; use fuels_core::types::errors::Error; use tempfile::tempdir; diff --git a/packages/fuels-programs/src/contract/loader.rs b/packages/fuels-programs/src/contract/loader.rs index 252577bfe8..a8cc3274ab 100644 --- a/packages/fuels-programs/src/contract/loader.rs +++ b/packages/fuels-programs/src/contract/loader.rs @@ -1,9 +1,8 @@ -use std::borrow::Cow; use std::collections::HashSet; use fuel_asm::{op, Instruction, RegId}; -use fuel_tx::{Bytes32, Contract as FuelContract, ContractId, Salt, StorageSlot}; -use fuels_accounts::{provider::Provider, Account}; +use fuel_tx::{Bytes32, ContractId, Salt, StorageSlot}; +use fuels_accounts::{Account}; use fuels_core::types::errors::Result; use fuels_core::types::transaction_builders::{Blob, BlobId}; use fuels_core::{ @@ -13,7 +12,7 @@ use fuels_core::{ errors::error, transaction::TxPolicies, transaction_builders::{ - BlobTransactionBuilder, CreateTransactionBuilder, TransactionBuilder, + BlobTransactionBuilder, TransactionBuilder, }, }, }; diff --git a/packages/fuels-programs/src/contract/regular.rs b/packages/fuels-programs/src/contract/regular.rs index 0ea38a2194..376afab1a9 100644 --- a/packages/fuels-programs/src/contract/regular.rs +++ b/packages/fuels-programs/src/contract/regular.rs @@ -1,4 +1,4 @@ -use std::{borrow::Cow, path::Path}; +use std::{path::Path}; use std::{default::Default, fmt::Debug}; From 4c8fbfe3d72ce385c8c09c78e7c0f95cf9cfb7c1 Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Thu, 8 Aug 2024 21:26:21 +0200 Subject: [PATCH 38/50] unused imports --- e2e/tests/contracts.rs | 3 --- examples/contracts/src/lib.rs | 2 +- packages/fuels-programs/src/contract.rs | 1 - packages/fuels-programs/src/contract/loader.rs | 6 ++---- packages/fuels-programs/src/contract/regular.rs | 4 +--- 5 files changed, 4 insertions(+), 12 deletions(-) diff --git a/e2e/tests/contracts.rs b/e2e/tests/contracts.rs index de05784450..a8d36c625e 100644 --- a/e2e/tests/contracts.rs +++ b/e2e/tests/contracts.rs @@ -1,6 +1,3 @@ -use std::collections::HashSet; - -use fuel_tx::Bytes32; use fuels::{ core::codec::{calldata, encode_fn_selector, DecoderConfig, EncoderConfig}, prelude::*, diff --git a/examples/contracts/src/lib.rs b/examples/contracts/src/lib.rs index 6bdefe99bc..0e198a2473 100644 --- a/examples/contracts/src/lib.rs +++ b/examples/contracts/src/lib.rs @@ -987,8 +987,8 @@ mod tests { } #[tokio::test] + #[allow(unused_variables)] async fn deploying_via_loader() -> Result<()> { - #[allow(unused_variables)] use fuels::prelude::*; setup_program_test!( diff --git a/packages/fuels-programs/src/contract.rs b/packages/fuels-programs/src/contract.rs index 7a23b6ba50..17af2de39f 100644 --- a/packages/fuels-programs/src/contract.rs +++ b/packages/fuels-programs/src/contract.rs @@ -56,7 +56,6 @@ fn compute_contract_id_and_state_root( mod tests { use std::path::Path; - use fuels_accounts::wallet::WalletUnlocked; use fuels_core::types::errors::Error; use tempfile::tempdir; diff --git a/packages/fuels-programs/src/contract/loader.rs b/packages/fuels-programs/src/contract/loader.rs index a8cc3274ab..3160a3425b 100644 --- a/packages/fuels-programs/src/contract/loader.rs +++ b/packages/fuels-programs/src/contract/loader.rs @@ -2,7 +2,7 @@ use std::collections::HashSet; use fuel_asm::{op, Instruction, RegId}; use fuel_tx::{Bytes32, ContractId, Salt, StorageSlot}; -use fuels_accounts::{Account}; +use fuels_accounts::Account; use fuels_core::types::errors::Result; use fuels_core::types::transaction_builders::{Blob, BlobId}; use fuels_core::{ @@ -11,9 +11,7 @@ use fuels_core::{ bech32::Bech32ContractId, errors::error, transaction::TxPolicies, - transaction_builders::{ - BlobTransactionBuilder, TransactionBuilder, - }, + transaction_builders::{BlobTransactionBuilder, TransactionBuilder}, }, }; diff --git a/packages/fuels-programs/src/contract/regular.rs b/packages/fuels-programs/src/contract/regular.rs index 376afab1a9..42158f8367 100644 --- a/packages/fuels-programs/src/contract/regular.rs +++ b/packages/fuels-programs/src/contract/regular.rs @@ -1,10 +1,8 @@ -use std::{path::Path}; - +use std::path::Path; use std::{default::Default, fmt::Debug}; use fuel_tx::{Bytes32, ContractId, Salt, StorageSlot}; use fuels_accounts::Account; -use fuels_core::types::DryRunner; use fuels_core::Configurables; use fuels_core::{ constants::WORD_SIZE, From 622336a91401d5050b3ed97f0c7dcc81a13000d7 Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Thu, 8 Aug 2024 21:29:39 +0200 Subject: [PATCH 39/50] group imports --- e2e/tests/contracts.rs | 2 +- examples/contracts/src/lib.rs | 5 +++-- .../fuels-core/src/types/transaction_builders/blob.rs | 9 ++++----- packages/fuels-core/src/types/wrappers/transaction.rs | 4 ++-- packages/fuels-programs/src/contract/loader.rs | 6 ++---- packages/fuels-programs/src/contract/regular.rs | 5 ++--- 6 files changed, 14 insertions(+), 17 deletions(-) diff --git a/e2e/tests/contracts.rs b/e2e/tests/contracts.rs index a8d36c625e..b0f5ae2274 100644 --- a/e2e/tests/contracts.rs +++ b/e2e/tests/contracts.rs @@ -2402,7 +2402,7 @@ fn unuploaded_loader_requires_at_least_one_blob() -> Result<()> { let loader = Contract::loader_for_blob_ids(no_blob_ids, Salt::default(), vec![]) .expect_err("should have failed because there are no blobs"); - //then + // then assert_eq!( loader.to_string(), "must provide at least one blob".to_string() diff --git a/examples/contracts/src/lib.rs b/examples/contracts/src/lib.rs index 0e198a2473..05eea189fa 100644 --- a/examples/contracts/src/lib.rs +++ b/examples/contracts/src/lib.rs @@ -1,6 +1,5 @@ #[cfg(test)] mod tests { - use rand::Rng; use std::collections::HashSet; use fuels::{ @@ -13,6 +12,7 @@ mod tests { Bits256, }, }; + use rand::Rng; #[tokio::test] async fn instantiate_client() -> Result<()> { @@ -930,9 +930,10 @@ mod tests { #[tokio::test] async fn contract_call_impersonation() -> Result<()> { - use fuels::prelude::*; use std::str::FromStr; + use fuels::prelude::*; + abigen!(Contract( name = "MyContract", abi = "e2e/sway/contracts/contract_test/out/release/contract_test-abi.json" diff --git a/packages/fuels-core/src/types/transaction_builders/blob.rs b/packages/fuels-core/src/types/transaction_builders/blob.rs index fa518164fc..d444093915 100644 --- a/packages/fuels-core/src/types/transaction_builders/blob.rs +++ b/packages/fuels-core/src/types/transaction_builders/blob.rs @@ -10,6 +10,10 @@ use fuel_tx::{ use fuel_types::bytes::padded_len_usize; use itertools::Itertools; +use super::{ + generate_missing_witnesses, impl_tx_builder_trait, resolve_fuel_inputs, BuildableTransaction, + Strategy, TransactionBuilder, UnresolvedWitnessIndexes, +}; use crate::{ constants::SIGNATURE_WITNESS_SIZE, traits::Signer, @@ -22,11 +26,6 @@ use crate::{ utils::{calculate_witnesses_size, sealed}, }; -use super::{ - generate_missing_witnesses, impl_tx_builder_trait, resolve_fuel_inputs, BuildableTransaction, - Strategy, TransactionBuilder, UnresolvedWitnessIndexes, -}; - #[derive(Default, Clone, Debug, PartialEq)] pub struct Blob { pub data: Vec, diff --git a/packages/fuels-core/src/types/wrappers/transaction.rs b/packages/fuels-core/src/types/wrappers/transaction.rs index 18ab3439a9..add8048ee4 100644 --- a/packages/fuels-core/src/types/wrappers/transaction.rs +++ b/packages/fuels-core/src/types/wrappers/transaction.rs @@ -105,7 +105,7 @@ impl MintTransaction { } #[derive(Default, Debug, Copy, Clone)] -//ANCHOR: tx_policies_struct +// ANCHOR: tx_policies_struct pub struct TxPolicies { tip: Option, witness_limit: Option, @@ -113,7 +113,7 @@ pub struct TxPolicies { max_fee: Option, script_gas_limit: Option, } -//ANCHOR_END: tx_policies_struct +// ANCHOR_END: tx_policies_struct impl TxPolicies { pub fn new( diff --git a/packages/fuels-programs/src/contract/loader.rs b/packages/fuels-programs/src/contract/loader.rs index 3160a3425b..866a2b178b 100644 --- a/packages/fuels-programs/src/contract/loader.rs +++ b/packages/fuels-programs/src/contract/loader.rs @@ -3,15 +3,13 @@ use std::collections::HashSet; use fuel_asm::{op, Instruction, RegId}; use fuel_tx::{Bytes32, ContractId, Salt, StorageSlot}; use fuels_accounts::Account; -use fuels_core::types::errors::Result; -use fuels_core::types::transaction_builders::{Blob, BlobId}; use fuels_core::{ constants::WORD_SIZE, types::{ bech32::Bech32ContractId, - errors::error, + errors::{error, Result}, transaction::TxPolicies, - transaction_builders::{BlobTransactionBuilder, TransactionBuilder}, + transaction_builders::{Blob, BlobId, BlobTransactionBuilder, TransactionBuilder}, }, }; diff --git a/packages/fuels-programs/src/contract/regular.rs b/packages/fuels-programs/src/contract/regular.rs index 42158f8367..b1ca1d8be0 100644 --- a/packages/fuels-programs/src/contract/regular.rs +++ b/packages/fuels-programs/src/contract/regular.rs @@ -1,9 +1,7 @@ -use std::path::Path; -use std::{default::Default, fmt::Debug}; +use std::{default::Default, fmt::Debug, path::Path}; use fuel_tx::{Bytes32, ContractId, Salt, StorageSlot}; use fuels_accounts::Account; -use fuels_core::Configurables; use fuels_core::{ constants::WORD_SIZE, error, @@ -13,6 +11,7 @@ use fuels_core::{ transaction::TxPolicies, transaction_builders::{Blob, CreateTransactionBuilder}, }, + Configurables, }; use super::{ From a11fd5f4a22f6e71199faf5c8a62efbc96c986fb Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Thu, 8 Aug 2024 21:39:28 +0200 Subject: [PATCH 40/50] docs --- docs/src/deploying/large_contract.md | 50 +++++++++++----------------- examples/contracts/src/lib.rs | 6 ++++ 2 files changed, 26 insertions(+), 30 deletions(-) diff --git a/docs/src/deploying/large_contract.md b/docs/src/deploying/large_contract.md index 215de57cc4..088da05524 100644 --- a/docs/src/deploying/large_contract.md +++ b/docs/src/deploying/large_contract.md @@ -6,51 +6,51 @@ If your contract exceeds the size limit for a single deployment: {{#include ../../../examples/contracts/src/lib.rs:show_contract_is_too_big}} ``` -you can deploy it in parts using a segmented approach: +you can deploy it in segments using a partitioned approach: ```rust,ignore {{#include ../../../examples/contracts/src/lib.rs:deploy_via_loader}} ``` -When you convert a regular contract into a loader contract the following happens: +When you convert a standard contract into a loader contract, the following changes occur: -* Your contract code is replaced with the code of the loader contract -* the original contract code is separated into blobs that will be deployed via blob transactions to the chain prior to the deployment of the contract itself. -* The new loader code will, upon invocation, load the blobs into memory and execute your original contract. +* The original contract code is replaced with the loader contract code. +* The original contract code is split into blobs, which will be deployed via blob transactions before deploying the contract itself. +* The new loader code, when invoked, loads these blobs into memory and executes your original contract. -After deploying the loader contract, you can interact with it just as you would with a traditionally deployed contract: +After deploying the loader contract, you can interact with it just as you would with a standard contract: ```rust,ignore {{#include ../../../examples/contracts/src/lib.rs:use_loader}} ``` -There is also a helper that will deploy your contract normally, if its size is below the limit, and as a loader contract otherwise: +A helper function is available to deploy your contract normally if it is within the size limit, or as a loader contract if it exceeds the limit: ```rust,ignore {{#include ../../../examples/contracts/src/lib.rs:auto_convert_to_loader}} ``` -You can also separate the blob upload from the deployment of the contract for more fine grained control: +You also have the option to separate the blob upload from the contract deployment for more granular control: ```rust,ignore {{#include ../../../examples/contracts/src/lib.rs:upload_blobs_then_deploy}} ``` -Or split your contract code into blobs however you wish and then create a loader and deploy: +Alternatively, you can manually split your contract code into blobs and then create and deploy a loader: ```rust,ignore {{#include ../../../examples/contracts/src/lib.rs:manual_blobs_then_deploy}} ``` -Or even upload the blobs yourself and just do the loader deployment: +Or you can upload the blobs yourself and proceed with just the loader deployment: ```rust,ignore {{#include ../../../examples/contracts/src/lib.rs:manual_blob_upload_then_deploy}} ``` -## Blob size +## Blob Size Considerations -The size of a Blob transaction is limited by three things: +The size of a Blob transaction is constrained by three factors: 1. The maximum size of a single transaction: @@ -58,33 +58,23 @@ The size of a Blob transaction is limited by three things: {{#include ../../../examples/contracts/src/lib.rs:show_max_tx_size}} ``` -2. Maximum gas usage for a single transaction: +2. The maximum gas usage for a single transaction: ```rust,ignore {{#include ../../../examples/contracts/src/lib.rs:show_max_tx_gas}} ``` -3. The maximum HTTP body size the Fuel node will accept. +3. The maximum HTTP body size accepted by the Fuel node. -When deploying, you can use an estimating blob size policy: +To estimate an appropriate size for your blobs, you can run: ```rust,ignore -{{#include ../../../examples/contracts/src/lib.rs:estimate_chunk_size}} +{{#include ../../../examples/contracts/src/lib.rs:estimate_max_blob_size}} ``` -and the SDK will limit the blob sizes to the given percentage of the maximum. +However, keep in mind the following limitations: -Note that this estimation has the following caveats: +* The estimation only considers the maximum transaction size, not the max gas usage or HTTP body limit. +* It does not account for any size increase that may occur after the transaction is funded. -* It only accounts for the maximum transaction size (max gas usage and HTTP body limit not considered). -* It doesn't account for any size increase that will happen after the transaction is funded. - -As such, you should use a percentage less than 100% to account for the caveats above. - -## Manually splitting up the contract - -If you wish, for any reason (such as resumability, retries, more control over the transactions, etc.), to manually split up and deploy the contract code, you can do so by following the example below: - -```rust,ignore -{{#include ../../../examples/contracts/src/lib.rs:manual_contract_chunking}} -``` +Therefore, it is advisable to make your blobs a few percent smaller than the estimated maximum size. diff --git a/examples/contracts/src/lib.rs b/examples/contracts/src/lib.rs index 05eea189fa..5b0e733265 100644 --- a/examples/contracts/src/lib.rs +++ b/examples/contracts/src/lib.rs @@ -1125,6 +1125,12 @@ mod tests { .await?; // ANCHOR_END: manual_blobs_then_deploy + // ANCHOR: estimate_max_blob_size + let max_blob_size = BlobTransactionBuilder::default() + .estimate_max_blob_size(&provider) + .await?; + // ANCHOR_END: estimate_max_blob_size + Ok(()) } } From 423d750cdd58dc0cad1e768b1bfadde7d8306701 Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Thu, 8 Aug 2024 22:42:29 +0200 Subject: [PATCH 41/50] docstrings --- .../fuels-programs/src/contract/loader.rs | 58 +++++++++++-------- .../fuels-programs/src/contract/regular.rs | 8 ++- 2 files changed, 39 insertions(+), 27 deletions(-) diff --git a/packages/fuels-programs/src/contract/loader.rs b/packages/fuels-programs/src/contract/loader.rs index 866a2b178b..1f586bffb0 100644 --- a/packages/fuels-programs/src/contract/loader.rs +++ b/packages/fuels-programs/src/contract/loader.rs @@ -15,7 +15,7 @@ use fuels_core::{ use super::{compute_contract_id_and_state_root, Contract, Regular}; -// create a contract that loads the specified blobs into memory and delegates the call to the code contained in the blobs. +// Creates a contract that loads the specified blobs into memory and delegates the call to the code contained in the blobs. pub fn loader_contract_asm(blob_ids: &[BlobId]) -> Result> { const BLOB_ID_SIZE: u16 = 32; let get_instructions = |num_of_instructions, num_of_blobs| { @@ -25,34 +25,34 @@ pub fn loader_contract_asm(blob_ids: &[BlobId]) -> Result> { // After that the execution continues normally with the loaded contract reading our // prepared fn selector and jumps to the selected contract method. [ - // 1. load the blob contents into memory - // find the start of the hardcoded blob ids, which are located after the code ends, + // 1. Load the blob contents into memory + // Find the start of the hardcoded blob IDs, which are located after the code ends. op::move_(0x10, RegId::IS), - // 0x10 to hold the address of the current blob id + // 0x10 to hold the address of the current blob ID. op::addi(0x10, 0x10, num_of_instructions * Instruction::SIZE as u16), // The contract is going to be loaded from the current value of SP onwards, save - // the location into 0x16 so we can jump into it later on + // the location into 0x16 so we can jump into it later on. op::move_(0x16, RegId::SP), - // loop counter + // Loop counter. op::movi(0x13, num_of_blobs), - // LOOP starts here - // 0x11 to hold the size of the current blob + // LOOP starts here. + // 0x11 to hold the size of the current blob. op::bsiz(0x11, 0x10), - // push the blob contents onto the stack + // Push the blob contents onto the stack. op::ldc(0x10, 0, 0x11, 1), - // move on to the next blob + // Move on to the next blob. op::addi(0x10, 0x10, BLOB_ID_SIZE), - // decrement the loop counter + // Decrement the loop counter. op::subi(0x13, 0x13, 1), - // Jump backwards (3+1) instructions if the counter has not reached 0 + // Jump backwards (3+1) instructions if the counter has not reached 0. op::jnzb(0x13, RegId::ZERO, 3), - // 2. Jump into the memory where the contract is loaded - // what follows is called _jmp_mem by the sway compiler - // subtract the address contained in IS because jmp will add it back + // 2. Jump into the memory where the contract is loaded. + // What follows is called _jmp_mem by the sway compiler. + // Subtract the address contained in IS because jmp will add it back. op::sub(0x16, 0x16, RegId::IS), - // jmp will multiply by 4 so we need to divide to cancel that out + // jmp will multiply by 4, so we need to divide to cancel that out. op::divi(0x16, 0x16, 4), - // jump to the start of the contract we loaded + // Jump to the start of the contract we loaded. op::jmp(0x16), ] }; @@ -116,10 +116,11 @@ impl Contract> { compute_contract_id_and_state_root(&self.code(), &self.salt, &self.storage_slots) } - /// This creates a loader contract for the code found in `blobs`. Deploying this contract - /// happens in two stages: - /// 1. the blobs are uploaded - /// 2. the loader contract is deployed + /// Creates a loader contract for the code found in `blobs`. Calling `deploy` on this contract + /// does two things: + /// 1. Uploads the code blobs. + /// 2. Deploys the loader contract. + /// /// The loader contract, when executed, will load all the given blobs into memory and delegate the call to the original contract code contained in the blobs. pub fn loader_for_blobs( blobs: Vec, @@ -147,7 +148,7 @@ impl Contract> { let ids = blobs.iter().map(|blob| blob.id()).collect::>(); - // validate that the loader contract can be created + // Validate that the loader contract can be created. loader_contract_asm(&ids)?; Ok(Self { @@ -172,6 +173,8 @@ impl Contract> { .collect() } + /// Uploads the blobs associated with this contract. Calling `deploy` on the result will only + /// deploy the loader contract. pub async fn upload_blobs( self, account: &impl Account, @@ -221,6 +224,7 @@ impl Contract> { Contract::loader_for_blob_ids(all_blob_ids, self.salt, self.storage_slots) } + /// Deploys the loader contract after uploading the code blobs. pub async fn deploy( self, account: &impl Account, @@ -232,6 +236,7 @@ impl Contract> { .await } + /// Reverts the contract from a loader contract back to a regular contract. pub fn revert_to_regular(self) -> Contract { let code = self .code @@ -267,8 +272,10 @@ impl Contract> { compute_contract_id_and_state_root(&self.code(), &self.salt, &self.storage_slots) } - /// The contract code has been uploaded in blobs with [`BlobId`]s specified in `blob_ids`. This will create a loader - /// contract that, when deployed and executed, will load all the specified blobs into memory and delegate the call to the code contained in the blobs. + /// Creates a loader contract using previously uploaded blobs. + /// + /// The contract code has been uploaded in blobs with [`BlobId`]s specified in `blob_ids`. + /// This will create a loader contract that, when deployed and executed, will load all the specified blobs into memory and delegate the call to the code contained in the blobs. pub fn loader_for_blob_ids( blob_ids: Vec, salt: Salt, @@ -278,7 +285,7 @@ impl Contract> { return Err(error!(Other, "must provide at least one blob")); } - // validate that the loader contract can be created + // Validate that the loader contract can be created. loader_contract_asm(&blob_ids)?; Ok(Self { @@ -294,6 +301,7 @@ impl Contract> { &self.code.as_blobs.blob_ids } + /// Deploys the loader contract. pub async fn deploy( self, account: &impl Account, diff --git a/packages/fuels-programs/src/contract/regular.rs b/packages/fuels-programs/src/contract/regular.rs index b1ca1d8be0..e36885af96 100644 --- a/packages/fuels-programs/src/contract/regular.rs +++ b/packages/fuels-programs/src/contract/regular.rs @@ -94,6 +94,7 @@ impl Contract { compute_contract_id_and_state_root(&self.code(), &self.salt, &self.storage_slots) } + /// Loads a contract from a binary file. Salt and storage slots are loaded as well, depending on the configuration provided. pub fn load_from( binary_filepath: impl AsRef, config: LoadConfiguration, @@ -117,6 +118,7 @@ impl Contract { }) } + /// Creates a regular contract with the given code, salt, and storage slots. pub fn regular( code: Vec, salt: Salt, @@ -129,7 +131,7 @@ impl Contract { } } - /// Deploys a compiled contract to a running node + /// Deploys a compiled contract to a running node. /// To deploy a contract, you need an account with enough assets to pay for deployment. /// This account will also receive the change. pub async fn deploy( @@ -167,6 +169,7 @@ impl Contract { Ok(contract_id.into()) } + /// Converts a regular contract into a loader contract, splitting the code into blobs. pub fn convert_to_loader( self, max_words_per_blob: usize, @@ -183,6 +186,7 @@ impl Contract { Contract::loader_for_blobs(blobs, self.salt, self.storage_slots) } + /// Deploys the contract either as a regular contract or as a loader contract if it exceeds the size limit. pub async fn smart_deploy( self, account: &impl Account, @@ -205,7 +209,7 @@ impl Contract { } } -/// Configuration for contract deployment +/// Configuration for contract deployment. #[derive(Debug, Clone, Default)] pub struct LoadConfiguration { pub(crate) storage: StorageConfiguration, From fed2af4c1fffafa98e442274d4852d830f5b3b0a Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Thu, 8 Aug 2024 22:58:47 +0200 Subject: [PATCH 42/50] separate out unit tests --- e2e/tests/contracts.rs | 225 ---------------------- packages/fuels-programs/src/contract.rs | 237 +++++++++++++++++++++++- 2 files changed, 236 insertions(+), 226 deletions(-) diff --git a/e2e/tests/contracts.rs b/e2e/tests/contracts.rs index b0f5ae2274..802699285f 100644 --- a/e2e/tests/contracts.rs +++ b/e2e/tests/contracts.rs @@ -2155,113 +2155,6 @@ async fn blob_contract_deployment() -> Result<()> { Ok(()) } -#[test] -fn blob_size_must_be_greater_than_zero() { - // given - let contract = Contract::regular(vec![0x00], Salt::zeroed(), vec![]); - - // when - let err = contract - .convert_to_loader(0) - .expect_err("should have failed because blob size is 0"); - - // then - assert_eq!( - err.to_string(), - "blob size must be greater than 0".to_string() - ); -} - -#[test] -fn contract_with_no_code_cannot_be_turned_into_a_loader() { - // given - let contract = Contract::regular(vec![], Salt::zeroed(), vec![]); - - // when - let err = contract - .convert_to_loader(100) - .expect_err("should have failed because there is no code"); - - // then - assert_eq!( - err.to_string(), - "must provide at least one blob".to_string() - ); -} - -#[test] -fn loader_needs_at_least_one_blob() { - // given - let no_blobs = vec![]; - - // when - let err = Contract::loader_for_blobs(no_blobs, Salt::default(), vec![]) - .expect_err("should have failed because there are no blobs"); - - // then - assert_eq!( - err.to_string(), - "must provide at least one blob".to_string() - ); -} - -#[test] -fn loader_requires_all_except_the_last_blob_to_be_word_sized() { - // given - let blobs = [vec![0; 9], vec![0; 8]].map(Blob::new).to_vec(); - - // when - let err = Contract::loader_for_blobs(blobs, Salt::default(), vec![]) - .expect_err("should have failed because the first blob is not word-sized"); - - // then - assert_eq!( - err.to_string(), - "blob 1/2 has a size of 9 bytes, which is not a multiple of 8".to_string() - ); -} - -#[test] -fn last_blob_in_loader_can_be_unaligned() { - // given - let blobs = [vec![0; 8], vec![0; 9]].map(Blob::new).to_vec(); - - // when - let result = Contract::loader_for_blobs(blobs, Salt::default(), vec![]); - - // then - let _ = result.unwrap(); -} - -#[test] -fn can_load_regular_contract() -> Result<()> { - // given - let contract_binary = "sway/contracts/contract_test/out/release/contract_test.bin"; - - // when - let contract = Contract::load_from(contract_binary, LoadConfiguration::default())?; - - // then - assert_eq!(contract.code(), std::fs::read(contract_binary)?); - - Ok(()) -} - -#[test] -fn can_manually_create_regular_contract() -> Result<()> { - // given - let contract_binary = "sway/contracts/contract_test/out/release/contract_test.bin"; - let binary = std::fs::read(contract_binary)?; - - // when - let contract = Contract::regular(binary.clone(), Salt::zeroed(), vec![]); - - // then - assert_eq!(contract.code(), binary); - - Ok(()) -} - #[tokio::test] async fn regular_contract_can_be_deployed() -> Result<()> { // given @@ -2295,78 +2188,6 @@ async fn regular_contract_can_be_deployed() -> Result<()> { Ok(()) } -macro_rules! getters_work { - ($contract: ident, $contract_id: expr, $state_root: expr, $code_root: expr, $salt: expr, $code: expr) => { - assert_eq!($contract.contract_id(), $contract_id); - assert_eq!($contract.state_root(), $state_root); - assert_eq!($contract.code_root(), $code_root); - assert_eq!($contract.salt(), $salt); - assert_eq!($contract.code(), $code); - }; -} - -#[test] -fn regular_contract_has_expected_getters() -> Result<()> { - let contract_binary = "sway/contracts/contract_test/out/release/contract_test.bin"; - let contract = Contract::load_from(contract_binary, LoadConfiguration::default())?; - let expected_binary = std::fs::read(contract_binary)?; - let expected_contract_id = - "d62e0d1326dd2aca749657c59c3288c0bdd0fe664482f72d3a85a9e289ff92cb".parse()?; - let expected_state_root = - "8aaf36bbaf5ef509ba6013e11b0f7176de429c9b6b3c1b09cc50b36e3113b901".parse()?; - let expected_code_root = - "d6721f6198f3765615222390655ce1acfe2ce1ec06002527cfa786b6d705ad0b".parse()?; - let expected_salt = Salt::zeroed(); - - getters_work!( - contract, - expected_contract_id, - expected_state_root, - expected_code_root, - expected_salt, - expected_binary - ); - - Ok(()) -} - -#[test] -fn regular_can_be_turned_into_loader_and_back() -> Result<()> { - let contract_binary = "sway/contracts/contract_test/out/release/contract_test.bin"; - - let contract_original = Contract::load_from(contract_binary, LoadConfiguration::default())?; - - let loader_contract = contract_original.clone().convert_to_loader(1024)?; - - let regular_recreated = loader_contract.clone().revert_to_regular(); - - assert_eq!(regular_recreated, contract_original); - - Ok(()) -} - -#[test] -fn unuploaded_loader_contract_has_expected_getters() -> Result<()> { - let contract_binary = "sway/contracts/contract_test/out/release/contract_test.bin"; - - let original = Contract::load_from(contract_binary, LoadConfiguration::default())?; - let loader = original.clone().convert_to_loader(1024)?; - - let loader_asm = loader_contract_asm(&loader.blob_ids()).unwrap(); - let manual_loader = original.with_code(loader_asm); - - getters_work!( - loader, - manual_loader.contract_id(), - manual_loader.state_root(), - manual_loader.code_root(), - manual_loader.salt(), - manual_loader.code() - ); - - Ok(()) -} - #[tokio::test] async fn unuploaded_loader_can_be_deployed_directly() -> Result<()> { setup_program_test!( @@ -2393,52 +2214,6 @@ async fn unuploaded_loader_can_be_deployed_directly() -> Result<()> { Ok(()) } -#[test] -fn unuploaded_loader_requires_at_least_one_blob() -> Result<()> { - // given - let no_blob_ids = vec![]; - - // when - let loader = Contract::loader_for_blob_ids(no_blob_ids, Salt::default(), vec![]) - .expect_err("should have failed because there are no blobs"); - - // then - assert_eq!( - loader.to_string(), - "must provide at least one blob".to_string() - ); - Ok(()) -} - -#[test] -fn uploaded_loader_has_expected_getters() -> Result<()> { - let contract_binary = "sway/contracts/huge_contract/out/release/huge_contract.bin"; - let original_contract = Contract::load_from(contract_binary, LoadConfiguration::default())?; - - let blob_ids = original_contract - .clone() - .convert_to_loader(1024)? - .blob_ids(); - - // we pretend we uploaded the blobs - let loader = Contract::loader_for_blob_ids(blob_ids.clone(), Salt::default(), vec![])?; - - let loader_asm = loader_contract_asm(&blob_ids).unwrap(); - let manual_loader = original_contract.with_code(loader_asm); - - getters_work!( - loader, - manual_loader.contract_id(), - manual_loader.state_root(), - manual_loader.code_root(), - manual_loader.salt(), - manual_loader.code() - ); - - Ok(()) -} - -// #[tokio::test] async fn unuploaded_loader_can_upload_blobs_separately_then_deploy() -> Result<()> { setup_program_test!( diff --git a/packages/fuels-programs/src/contract.rs b/packages/fuels-programs/src/contract.rs index 17af2de39f..7fdad0ec36 100644 --- a/packages/fuels-programs/src/contract.rs +++ b/packages/fuels-programs/src/contract.rs @@ -56,7 +56,10 @@ fn compute_contract_id_and_state_root( mod tests { use std::path::Path; - use fuels_core::types::errors::Error; + use fuels_core::types::{ + errors::{Error, Result}, + transaction_builders::Blob, + }; use tempfile::tempdir; use super::*; @@ -112,4 +115,236 @@ mod tests { ) .unwrap() } + + #[test] + fn blob_size_must_be_greater_than_zero() { + // given + let contract = Contract::regular(vec![0x00], Salt::zeroed(), vec![]); + + // when + let err = contract + .convert_to_loader(0) + .expect_err("should have failed because blob size is 0"); + + // then + assert_eq!( + err.to_string(), + "blob size must be greater than 0".to_string() + ); + } + + #[test] + fn contract_with_no_code_cannot_be_turned_into_a_loader() { + // given + let contract = Contract::regular(vec![], Salt::zeroed(), vec![]); + + // when + let err = contract + .convert_to_loader(100) + .expect_err("should have failed because there is no code"); + + // then + assert_eq!( + err.to_string(), + "must provide at least one blob".to_string() + ); + } + + #[test] + fn loader_needs_at_least_one_blob() { + // given + let no_blobs = vec![]; + + // when + let err = Contract::loader_for_blobs(no_blobs, Salt::default(), vec![]) + .expect_err("should have failed because there are no blobs"); + + // then + assert_eq!( + err.to_string(), + "must provide at least one blob".to_string() + ); + } + + #[test] + fn loader_requires_all_except_the_last_blob_to_be_word_sized() { + // given + let blobs = [vec![0; 9], vec![0; 8]].map(Blob::new).to_vec(); + + // when + let err = Contract::loader_for_blobs(blobs, Salt::default(), vec![]) + .expect_err("should have failed because the first blob is not word-sized"); + + // then + assert_eq!( + err.to_string(), + "blob 1/2 has a size of 9 bytes, which is not a multiple of 8".to_string() + ); + } + + #[test] + fn last_blob_in_loader_can_be_unaligned() { + // given + let blobs = [vec![0; 8], vec![0; 9]].map(Blob::new).to_vec(); + + // when + let result = Contract::loader_for_blobs(blobs, Salt::default(), vec![]); + + // then + let _ = result.unwrap(); + } + + #[test] + fn can_load_regular_contract() -> Result<()> { + // given + let tmp_dir = tempfile::tempdir()?; + let code_file = tmp_dir.path().join("contract.bin"); + let code = b"some fake contract code"; + std::fs::write(&code_file, code)?; + + // when + let contract = Contract::load_from( + code_file, + LoadConfiguration::default() + .with_storage_configuration(StorageConfiguration::default().with_autoload(false)), + )?; + + // then + assert_eq!(contract.code(), code); + + Ok(()) + } + + #[test] + fn can_manually_create_regular_contract() -> Result<()> { + // given + let binary = b"some fake contract code"; + + // when + let contract = Contract::regular(binary.to_vec(), Salt::zeroed(), vec![]); + + // then + assert_eq!(contract.code(), binary); + + Ok(()) + } + + macro_rules! getters_work { + ($contract: ident, $contract_id: expr, $state_root: expr, $code_root: expr, $salt: expr, $code: expr) => { + assert_eq!($contract.contract_id(), $contract_id); + assert_eq!($contract.state_root(), $state_root); + assert_eq!($contract.code_root(), $code_root); + assert_eq!($contract.salt(), $salt); + assert_eq!($contract.code(), $code); + }; + } + + #[test] + fn regular_contract_has_expected_getters() -> Result<()> { + let contract_binary = b"some fake contract code"; + let storage_slots = vec![StorageSlot::new([2; 32].into(), [1; 32].into())]; + let contract = Contract::regular(contract_binary.to_vec(), Salt::zeroed(), storage_slots); + + let expected_contract_id = + "93c9f1e61efb25458e3c56fdcfee62acb61c0533364eeec7ba61cb2957aa657b".parse()?; + let expected_state_root = + "852b7b7527124dbcd44302e52453b864dc6f4d9544851c729da666a430b84c97".parse()?; + let expected_code_root = + "69ca130191e9e469f1580229760b327a0729237f1aff65cf1d076b2dd8360031".parse()?; + let expected_salt = Salt::zeroed(); + + getters_work!( + contract, + expected_contract_id, + expected_state_root, + expected_code_root, + expected_salt, + contract_binary + ); + + Ok(()) + } + + #[test] + fn regular_can_be_turned_into_loader_and_back() -> Result<()> { + let contract_binary = b"some fake contract code"; + + let contract_original = Contract::regular(contract_binary.to_vec(), Salt::zeroed(), vec![]); + + let loader_contract = contract_original.clone().convert_to_loader(1)?; + + let regular_recreated = loader_contract.clone().revert_to_regular(); + + assert_eq!(regular_recreated, contract_original); + + Ok(()) + } + + #[test] + fn unuploaded_loader_contract_has_expected_getters() -> Result<()> { + let contract_binary = b"some fake contract code"; + + let storage_slots = vec![StorageSlot::new([2; 32].into(), [1; 32].into())]; + let original = Contract::regular(contract_binary.to_vec(), Salt::zeroed(), storage_slots); + let loader = original.clone().convert_to_loader(1024)?; + + let loader_asm = loader_contract_asm(&loader.blob_ids()).unwrap(); + let manual_loader = original.with_code(loader_asm); + + getters_work!( + loader, + manual_loader.contract_id(), + manual_loader.state_root(), + manual_loader.code_root(), + manual_loader.salt(), + manual_loader.code() + ); + + Ok(()) + } + + #[test] + fn unuploaded_loader_requires_at_least_one_blob() -> Result<()> { + // given + let no_blob_ids = vec![]; + + // when + let loader = Contract::loader_for_blob_ids(no_blob_ids, Salt::default(), vec![]) + .expect_err("should have failed because there are no blobs"); + + // then + assert_eq!( + loader.to_string(), + "must provide at least one blob".to_string() + ); + Ok(()) + } + + #[test] + fn uploaded_loader_has_expected_getters() -> Result<()> { + let contract_binary = b"some fake contract code"; + let original_contract = Contract::regular(contract_binary.to_vec(), Salt::zeroed(), vec![]); + + let blob_ids = original_contract + .clone() + .convert_to_loader(1024)? + .blob_ids(); + + // we pretend we uploaded the blobs + let loader = Contract::loader_for_blob_ids(blob_ids.clone(), Salt::default(), vec![])?; + + let loader_asm = loader_contract_asm(&blob_ids).unwrap(); + let manual_loader = original_contract.with_code(loader_asm); + + getters_work!( + loader, + manual_loader.contract_id(), + manual_loader.state_root(), + manual_loader.code_root(), + manual_loader.salt(), + manual_loader.code() + ); + + Ok(()) + } } From 8cd28bdfc2577668bf229e4748f76e02d72389cf Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Thu, 8 Aug 2024 23:48:52 +0200 Subject: [PATCH 43/50] clippy --- e2e/tests/contracts.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/e2e/tests/contracts.rs b/e2e/tests/contracts.rs index 802699285f..9997e93dd2 100644 --- a/e2e/tests/contracts.rs +++ b/e2e/tests/contracts.rs @@ -1,7 +1,6 @@ use fuels::{ core::codec::{calldata, encode_fn_selector, DecoderConfig, EncoderConfig}, prelude::*, - programs::contract::loader_contract_asm, tx::ContractParameters, types::{errors::transaction::Reason, input::Input, Bits256, Identity}, }; From 455644ec22577fc2ff1a82eade7994a8f2bc0253 Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Thu, 8 Aug 2024 23:56:13 +0200 Subject: [PATCH 44/50] fix lint --- docs/src/deploying/large_contract.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/src/deploying/large_contract.md b/docs/src/deploying/large_contract.md index 088da05524..5bf2bf2e74 100644 --- a/docs/src/deploying/large_contract.md +++ b/docs/src/deploying/large_contract.md @@ -52,6 +52,8 @@ Or you can upload the blobs yourself and proceed with just the loader deployment The size of a Blob transaction is constrained by three factors: + + 1. The maximum size of a single transaction: ```rust,ignore @@ -65,12 +67,12 @@ The size of a Blob transaction is constrained by three factors: ``` 3. The maximum HTTP body size accepted by the Fuel node. - To estimate an appropriate size for your blobs, you can run: ```rust,ignore {{#include ../../../examples/contracts/src/lib.rs:estimate_max_blob_size}} ``` + However, keep in mind the following limitations: From 1ad1bb2c21ab1e885d6ed9740c4252678f20e4f3 Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Fri, 9 Aug 2024 13:56:55 +0200 Subject: [PATCH 45/50] pr comments --- e2e/tests/contracts.rs | 2 +- examples/contracts/src/lib.rs | 4 ++-- .../src/types/transaction_builders/blob.rs | 20 ++++++++++++++++++- packages/fuels-programs/src/contract.rs | 10 +++++----- .../fuels-programs/src/contract/loader.rs | 14 ++++++------- .../fuels-programs/src/contract/regular.rs | 2 +- 6 files changed, 35 insertions(+), 17 deletions(-) diff --git a/e2e/tests/contracts.rs b/e2e/tests/contracts.rs index 9997e93dd2..1481912f7c 100644 --- a/e2e/tests/contracts.rs +++ b/e2e/tests/contracts.rs @@ -2235,7 +2235,7 @@ async fn unuploaded_loader_can_upload_blobs_separately_then_deploy() -> Result<( // if this were an example for the user we'd just call `deploy` on the contract above // this way we are testing that the blobs were really deployed above, otherwise the following // would fail - let contract_id = Contract::loader_for_blob_ids( + let contract_id = Contract::loader_from_blob_ids( blob_ids.to_vec(), contract.salt(), contract.storage_slots().to_vec(), diff --git a/examples/contracts/src/lib.rs b/examples/contracts/src/lib.rs index 5b0e733265..869ce6dc87 100644 --- a/examples/contracts/src/lib.rs +++ b/examples/contracts/src/lib.rs @@ -1054,7 +1054,7 @@ mod tests { already_uploaded_blobs.insert(blob_id); } - let contract_id = Contract::loader_for_blob_ids(all_blob_ids, random_salt(), vec![])? + let contract_id = Contract::loader_from_blob_ids(all_blob_ids, random_salt(), vec![])? .deploy(&wallet, TxPolicies::default()) .await?; // ANCHOR_END: manual_blob_upload_then_deploy @@ -1120,7 +1120,7 @@ mod tests { .map(|chunk| Blob::new(chunk.to_vec())) .collect(); - let contract_id = Contract::loader_for_blobs(blobs, random_salt(), vec![])? + let contract_id = Contract::loader_from_blobs(blobs, random_salt(), vec![])? .deploy(&wallet, TxPolicies::default()) .await?; // ANCHOR_END: manual_blobs_then_deploy diff --git a/packages/fuels-core/src/types/transaction_builders/blob.rs b/packages/fuels-core/src/types/transaction_builders/blob.rs index d444093915..0a728dacf6 100644 --- a/packages/fuels-core/src/types/transaction_builders/blob.rs +++ b/packages/fuels-core/src/types/transaction_builders/blob.rs @@ -28,7 +28,7 @@ use crate::{ #[derive(Default, Clone, Debug, PartialEq)] pub struct Blob { - pub data: Vec, + data: Vec, } pub type BlobId = [u8; 32]; @@ -50,10 +50,22 @@ impl Blob { Self { data } } + pub fn len(&self) -> usize { + self.data.len() + } + + pub fn is_empty(&self) -> bool { + self.data.is_empty() + } + pub fn id(&self) -> BlobId { fuel_tx::BlobId::compute(&self.data).into() } + pub fn bytes(&self) -> &[u8] { + self.data.as_slice() + } + fn as_blob_body(&self, witness_index: u16) -> fuel_tx::BlobBody { fuel_tx::BlobBody { id: self.id().into(), @@ -62,6 +74,12 @@ impl Blob { } } +impl From for Vec { + fn from(value: Blob) -> Self { + value.data + } +} + impl From for fuel_tx::Witness { fn from(blob: Blob) -> Self { blob.data.into() diff --git a/packages/fuels-programs/src/contract.rs b/packages/fuels-programs/src/contract.rs index 7fdad0ec36..ce46c51513 100644 --- a/packages/fuels-programs/src/contract.rs +++ b/packages/fuels-programs/src/contract.rs @@ -156,7 +156,7 @@ mod tests { let no_blobs = vec![]; // when - let err = Contract::loader_for_blobs(no_blobs, Salt::default(), vec![]) + let err = Contract::loader_from_blobs(no_blobs, Salt::default(), vec![]) .expect_err("should have failed because there are no blobs"); // then @@ -172,7 +172,7 @@ mod tests { let blobs = [vec![0; 9], vec![0; 8]].map(Blob::new).to_vec(); // when - let err = Contract::loader_for_blobs(blobs, Salt::default(), vec![]) + let err = Contract::loader_from_blobs(blobs, Salt::default(), vec![]) .expect_err("should have failed because the first blob is not word-sized"); // then @@ -188,7 +188,7 @@ mod tests { let blobs = [vec![0; 8], vec![0; 9]].map(Blob::new).to_vec(); // when - let result = Contract::loader_for_blobs(blobs, Salt::default(), vec![]); + let result = Contract::loader_from_blobs(blobs, Salt::default(), vec![]); // then let _ = result.unwrap(); @@ -309,7 +309,7 @@ mod tests { let no_blob_ids = vec![]; // when - let loader = Contract::loader_for_blob_ids(no_blob_ids, Salt::default(), vec![]) + let loader = Contract::loader_from_blob_ids(no_blob_ids, Salt::default(), vec![]) .expect_err("should have failed because there are no blobs"); // then @@ -331,7 +331,7 @@ mod tests { .blob_ids(); // we pretend we uploaded the blobs - let loader = Contract::loader_for_blob_ids(blob_ids.clone(), Salt::default(), vec![])?; + let loader = Contract::loader_from_blob_ids(blob_ids.clone(), Salt::default(), vec![])?; let loader_asm = loader_contract_asm(&blob_ids).unwrap(); let manual_loader = original_contract.with_code(loader_asm); diff --git a/packages/fuels-programs/src/contract/loader.rs b/packages/fuels-programs/src/contract/loader.rs index 1f586bffb0..5f9e0798b1 100644 --- a/packages/fuels-programs/src/contract/loader.rs +++ b/packages/fuels-programs/src/contract/loader.rs @@ -97,7 +97,7 @@ impl Contract> { pub fn code(&self) -> Vec { let ids: Vec<_> = self.blob_ids(); loader_contract_asm(&ids) - .expect("a contract to be creatable due to the check done in loader_for_blobs") + .expect("a contract to be creatable due to the check done in loader_from_blobs") } pub fn contract_id(&self) -> ContractId { @@ -122,7 +122,7 @@ impl Contract> { /// 2. Deploys the loader contract. /// /// The loader contract, when executed, will load all the given blobs into memory and delegate the call to the original contract code contained in the blobs. - pub fn loader_for_blobs( + pub fn loader_from_blobs( blobs: Vec, salt: Salt, storage_slots: Vec, @@ -133,7 +133,7 @@ impl Contract> { let idx_of_last_blob = blobs.len().saturating_sub(1); let idx_of_offender = blobs.iter().enumerate().find_map(|(idx, blob)| { - (blob.data.len() % WORD_SIZE != 0 && idx != idx_of_last_blob).then_some(idx) + (blob.len() % WORD_SIZE != 0 && idx != idx_of_last_blob).then_some(idx) }); if let Some(idx) = idx_of_offender { @@ -142,7 +142,7 @@ impl Contract> { "blob {}/{} has a size of {} bytes, which is not a multiple of {WORD_SIZE}", idx.saturating_add(1), blobs.len(), - blobs[idx].data.len() + blobs[idx].len() )); } @@ -221,7 +221,7 @@ impl Contract> { already_uploaded.insert(id); } - Contract::loader_for_blob_ids(all_blob_ids, self.salt, self.storage_slots) + Contract::loader_from_blob_ids(all_blob_ids, self.salt, self.storage_slots) } /// Deploys the loader contract after uploading the code blobs. @@ -243,7 +243,7 @@ impl Contract> { .as_blobs .blobs .into_iter() - .flat_map(|blob| blob.data) + .flat_map(Vec::from) .collect(); Contract::regular(code, self.salt, self.storage_slots) @@ -276,7 +276,7 @@ impl Contract> { /// /// The contract code has been uploaded in blobs with [`BlobId`]s specified in `blob_ids`. /// This will create a loader contract that, when deployed and executed, will load all the specified blobs into memory and delegate the call to the code contained in the blobs. - pub fn loader_for_blob_ids( + pub fn loader_from_blob_ids( blob_ids: Vec, salt: Salt, storage_slots: Vec, diff --git a/packages/fuels-programs/src/contract/regular.rs b/packages/fuels-programs/src/contract/regular.rs index e36885af96..466092a1cd 100644 --- a/packages/fuels-programs/src/contract/regular.rs +++ b/packages/fuels-programs/src/contract/regular.rs @@ -183,7 +183,7 @@ impl Contract { .map(|chunk| Blob::new(chunk.to_vec())) .collect(); - Contract::loader_for_blobs(blobs, self.salt, self.storage_slots) + Contract::loader_from_blobs(blobs, self.salt, self.storage_slots) } /// Deploys the contract either as a regular contract or as a loader contract if it exceeds the size limit. From fa13330fc6d2c9908e07eac3291099341ca7ac50 Mon Sep 17 00:00:00 2001 From: Ahmed Sagdati <37515857+segfault-magnet@users.noreply.github.com> Date: Fri, 9 Aug 2024 13:57:18 +0200 Subject: [PATCH 46/50] Update e2e/tests/contracts.rs Co-authored-by: hal3e --- e2e/tests/contracts.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/e2e/tests/contracts.rs b/e2e/tests/contracts.rs index 1481912f7c..baaa5a022a 100644 --- a/e2e/tests/contracts.rs +++ b/e2e/tests/contracts.rs @@ -2108,7 +2108,6 @@ async fn max_fee_estimation_respects_tolerance() -> Result<()> { #[tokio::test] async fn blob_contract_deployment() -> Result<()> { - // TODO: segfault record transactions again abigen!(Contract( name = "MyContract", abi = "e2e/sway/contracts/huge_contract/out/release/huge_contract-abi.json" From e2ef75dbfb56c00ffc2d7a0974344a3471eea0f6 Mon Sep 17 00:00:00 2001 From: Ahmed Sagdati <37515857+segfault-magnet@users.noreply.github.com> Date: Fri, 9 Aug 2024 13:57:27 +0200 Subject: [PATCH 47/50] Update docs/src/deploying/large_contract.md Co-authored-by: hal3e --- docs/src/deploying/large_contract.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/src/deploying/large_contract.md b/docs/src/deploying/large_contract.md index 5bf2bf2e74..87c0e715a6 100644 --- a/docs/src/deploying/large_contract.md +++ b/docs/src/deploying/large_contract.md @@ -67,6 +67,7 @@ The size of a Blob transaction is constrained by three factors: ``` 3. The maximum HTTP body size accepted by the Fuel node. + To estimate an appropriate size for your blobs, you can run: ```rust,ignore From 30061692a64bd80c48bcfe24b9557c6faeaf9785 Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Fri, 9 Aug 2024 15:49:16 +0200 Subject: [PATCH 48/50] docstring --- packages/fuels-programs/src/contract.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/fuels-programs/src/contract.rs b/packages/fuels-programs/src/contract.rs index ce46c51513..f6bc092680 100644 --- a/packages/fuels-programs/src/contract.rs +++ b/packages/fuels-programs/src/contract.rs @@ -5,6 +5,11 @@ use std::fmt::Debug; use fuel_tx::{Bytes32, Contract as FuelContract, ContractId, Salt, StorageSlot}; pub use storage::*; +/// Represents a contract that can be deployed either directly ([`Contract::regular`]) or through a loader [`Contract::convert_to_loader`]. +/// Provides the ability to calculate the `ContractId` ([`Contract::contract_id`]) without needing to deploy the contract. +/// This struct also manages contract code updates with `configurable`s +/// ([`Contract::with_configurables`]) and can automatically +/// load storage slots (via [`Contract::load_from`]). #[derive(Debug, Clone, PartialEq)] pub struct Contract { code: Code, From 12ff58abf1d5631f8286eda3dfad485b7e19f687 Mon Sep 17 00:00:00 2001 From: Ahmed Sagdati <37515857+segfault-magnet@users.noreply.github.com> Date: Fri, 9 Aug 2024 15:49:37 +0200 Subject: [PATCH 49/50] Update docs/src/SUMMARY.md Co-authored-by: MujkicA <32431923+MujkicA@users.noreply.github.com> --- docs/src/SUMMARY.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/SUMMARY.md b/docs/src/SUMMARY.md index e806542ab5..959fd13b21 100644 --- a/docs/src/SUMMARY.md +++ b/docs/src/SUMMARY.md @@ -26,7 +26,7 @@ - [Storage slots](./deploying/storage-slots.md) - [Interacting with contracts](./deploying/interacting-with-contracts.md) - [The FuelVM Binary file](./deploying/the-fuelvm-binary-file.md) - - [Large contract](./deploying/large_contract.md) + - [Large contracts](./deploying/large_contract.md) - [Calling contracts](./calling-contracts/index.md) - [Connecting wallets](./calling-contracts/calls-with-different-wallets.md) - [Transaction policies](./calling-contracts/tx-policies.md) From 98babb06993c6635af04e2c25261956ba21c1676 Mon Sep 17 00:00:00 2001 From: segfault-magnet Date: Fri, 9 Aug 2024 15:50:13 +0200 Subject: [PATCH 50/50] rename to large contracts --- docs/src/SUMMARY.md | 2 +- docs/src/deploying/{large_contract.md => large_contracts.md} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename docs/src/deploying/{large_contract.md => large_contracts.md} (100%) diff --git a/docs/src/SUMMARY.md b/docs/src/SUMMARY.md index 959fd13b21..f7db09f308 100644 --- a/docs/src/SUMMARY.md +++ b/docs/src/SUMMARY.md @@ -26,7 +26,7 @@ - [Storage slots](./deploying/storage-slots.md) - [Interacting with contracts](./deploying/interacting-with-contracts.md) - [The FuelVM Binary file](./deploying/the-fuelvm-binary-file.md) - - [Large contracts](./deploying/large_contract.md) + - [Large contracts](./deploying/large_contracts.md) - [Calling contracts](./calling-contracts/index.md) - [Connecting wallets](./calling-contracts/calls-with-different-wallets.md) - [Transaction policies](./calling-contracts/tx-policies.md) diff --git a/docs/src/deploying/large_contract.md b/docs/src/deploying/large_contracts.md similarity index 100% rename from docs/src/deploying/large_contract.md rename to docs/src/deploying/large_contracts.md