Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Linux/tools/testing/radix-tree/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 1 MB image not shown  

Quelle  maple.c   Sprache: C

 
// SPDX-License-Identifier: GPL-2.0+
/*
 * maple_tree.c: Userspace testing for maple tree test-suite
 * Copyright (c) 2018-2022 Oracle Corporation
 * Author: Liam R. Howlett <Liam.Howlett@Oracle.com>
 *
 * Any tests that require internal knowledge of the tree or threads and other
 * difficult to handle in kernel tests.
 */


#define CONFIG_DEBUG_MAPLE_TREE
#define CONFIG_MAPLE_SEARCH
#define MAPLE_32BIT (MAPLE_NODE_SLOTS > 31)
#include "test.h"
#include <stdlib.h>
#include <time.h>
#include <linux/init.h>

#define module_init(x)
#define module_exit(x)
#define MODULE_AUTHOR(x)
#define MODULE_DESCRIPTION(X)
#define MODULE_LICENSE(x)
#define dump_stack() assert(0)

#include "../../../lib/maple_tree.c"
#include "../../../lib/test_maple_tree.c"

#define RCU_RANGE_COUNT 1000
#define RCU_MT_BUG_ON(test, y) {if (y) { test->stop = true; } MT_BUG_ON(test->mt, y); }

struct rcu_test_struct2 {
 struct maple_tree *mt;

 bool start;
 bool stop;
 unsigned int thread_count;

 unsigned int seen_toggle;
 unsigned int seen_added;
 unsigned int seen_modified;
 unsigned int seen_deleted;
 int pause;

 unsigned long index[RCU_RANGE_COUNT];
 unsigned long last[RCU_RANGE_COUNT];
};

struct rcu_test_struct3 {
 struct maple_tree *mt;
 unsigned long index;
 unsigned long last;
 bool stop;
};

struct rcu_reader_struct {
 unsigned int id;
 int mod;
 int del;
 int flip;
 int add;
 int next;
 struct rcu_test_struct2 *test;
};

static int get_alloc_node_count(struct ma_state *mas)
{
 int count = 1;
 struct maple_alloc *node = mas->alloc;

 if (!node || ((unsigned long)node & 0x1))
  return 0;
 while (node->node_count) {
  count += node->node_count;
  node = node->slot[0];
 }
 return count;
}

static void check_mas_alloc_node_count(struct ma_state *mas)
{
 mas_node_count_gfp(mas, MAPLE_ALLOC_SLOTS + 1, GFP_KERNEL);
 mas_node_count_gfp(mas, MAPLE_ALLOC_SLOTS + 3, GFP_KERNEL);
 MT_BUG_ON(mas->tree, get_alloc_node_count(mas) != mas->alloc->total);
 mas_destroy(mas);
}

/*
 * check_new_node() - Check the creation of new nodes and error path
 * verification.
 */

static noinline void __init check_new_node(struct maple_tree *mt)
{

 struct maple_node *mn, *mn2, *mn3;
 struct maple_alloc *smn;
 struct maple_node *nodes[100];
 int i, j, total;

 MA_STATE(mas, mt, 0, 0);

 check_mas_alloc_node_count(&mas);

 /* Try allocating 3 nodes */
 mtree_lock(mt);
 mt_set_non_kernel(0);
 /* request 3 nodes to be allocated. */
 mas_node_count(&mas, 3);
 /* Allocation request of 3. */
 MT_BUG_ON(mt, mas_alloc_req(&mas) != 3);
 /* Allocate failed. */
 MT_BUG_ON(mt, mas.node != MA_ERROR(-ENOMEM));
 MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL));

 MT_BUG_ON(mt, mas_allocated(&mas) != 3);
 mn = mas_pop_node(&mas);
 MT_BUG_ON(mt, not_empty(mn));
 MT_BUG_ON(mt, mn == NULL);
 MT_BUG_ON(mt, mas.alloc == NULL);
 MT_BUG_ON(mt, mas.alloc->slot[0] == NULL);
 mas_push_node(&mas, mn);
 mas_reset(&mas);
 mas_destroy(&mas);
 mtree_unlock(mt);


 /* Try allocating 1 node, then 2 more */
 mtree_lock(mt);
 /* Set allocation request to 1. */
 mas_set_alloc_req(&mas, 1);
 /* Check Allocation request of 1. */
 MT_BUG_ON(mt, mas_alloc_req(&mas) != 1);
 mas_set_err(&mas, -ENOMEM);
 /* Validate allocation request. */
 MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL));
 /* Eat the requested node. */
 mn = mas_pop_node(&mas);
 MT_BUG_ON(mt, not_empty(mn));
 MT_BUG_ON(mt, mn == NULL);
 MT_BUG_ON(mt, mn->slot[0] != NULL);
 MT_BUG_ON(mt, mn->slot[1] != NULL);
 MT_BUG_ON(mt, mas_allocated(&mas) != 0);

 mn->parent = ma_parent_ptr(mn);
 ma_free_rcu(mn);
 mas.status = ma_start;
 mas_destroy(&mas);
 /* Allocate 3 nodes, will fail. */
 mas_node_count(&mas, 3);
 /* Drop the lock and allocate 3 nodes. */
 mas_nomem(&mas, GFP_KERNEL);
 /* Ensure 3 are allocated. */
 MT_BUG_ON(mt, mas_allocated(&mas) != 3);
 /* Allocation request of 0. */
 MT_BUG_ON(mt, mas_alloc_req(&mas) != 0);

 MT_BUG_ON(mt, mas.alloc == NULL);
 MT_BUG_ON(mt, mas.alloc->slot[0] == NULL);
 MT_BUG_ON(mt, mas.alloc->slot[1] == NULL);
 /* Ensure we counted 3. */
 MT_BUG_ON(mt, mas_allocated(&mas) != 3);
 /* Free. */
 mas_reset(&mas);
 mas_destroy(&mas);

 /* Set allocation request to 1. */
 mas_set_alloc_req(&mas, 1);
 MT_BUG_ON(mt, mas_alloc_req(&mas) != 1);
 mas_set_err(&mas, -ENOMEM);
 /* Validate allocation request. */
 MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL));
 MT_BUG_ON(mt, mas_allocated(&mas) != 1);
 /* Check the node is only one node. */
 mn = mas_pop_node(&mas);
 MT_BUG_ON(mt, not_empty(mn));
 MT_BUG_ON(mt, mas_allocated(&mas) != 0);
 MT_BUG_ON(mt, mn == NULL);
 MT_BUG_ON(mt, mn->slot[0] != NULL);
 MT_BUG_ON(mt, mn->slot[1] != NULL);
 MT_BUG_ON(mt, mas_allocated(&mas) != 0);
 mas_push_node(&mas, mn);
 MT_BUG_ON(mt, mas_allocated(&mas) != 1);
 MT_BUG_ON(mt, mas.alloc->node_count);

 mas_set_alloc_req(&mas, 2); /* request 2 more. */
 MT_BUG_ON(mt, mas_alloc_req(&mas) != 2);
 mas_set_err(&mas, -ENOMEM);
 MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL));
 MT_BUG_ON(mt, mas_allocated(&mas) != 3);
 MT_BUG_ON(mt, mas.alloc == NULL);
 MT_BUG_ON(mt, mas.alloc->slot[0] == NULL);
 MT_BUG_ON(mt, mas.alloc->slot[1] == NULL);
 for (i = 2; i >= 0; i--) {
  mn = mas_pop_node(&mas);
  MT_BUG_ON(mt, mas_allocated(&mas) != i);
  MT_BUG_ON(mt, !mn);
  MT_BUG_ON(mt, not_empty(mn));
  mn->parent = ma_parent_ptr(mn);
  ma_free_rcu(mn);
 }

 total = 64;
 mas_set_alloc_req(&mas, total); /* request 2 more. */
 MT_BUG_ON(mt, mas_alloc_req(&mas) != total);
 mas_set_err(&mas, -ENOMEM);
 MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL));
 for (i = total; i > 0; i--) {
  unsigned int e = 0; /* expected node_count */

  if (!MAPLE_32BIT) {
   if (i >= 35)
    e = i - 34;
   else if (i >= 5)
    e = i - 4;
   else if (i >= 2)
    e = i - 1;
  } else {
   if (i >= 4)
    e = i - 3;
   else if (i >= 1)
    e = i - 1;
   else
    e = 0;
  }

  MT_BUG_ON(mt, mas.alloc->node_count != e);
  mn = mas_pop_node(&mas);
  MT_BUG_ON(mt, not_empty(mn));
  MT_BUG_ON(mt, mas_allocated(&mas) != i - 1);
  MT_BUG_ON(mt, !mn);
  mn->parent = ma_parent_ptr(mn);
  ma_free_rcu(mn);
 }

 total = 100;
 for (i = 1; i < total; i++) {
  mas_set_alloc_req(&mas, i);
  mas_set_err(&mas, -ENOMEM);
  MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL));
  for (j = i; j > 0; j--) {
   mn = mas_pop_node(&mas);
   MT_BUG_ON(mt, mas_allocated(&mas) != j - 1);
   MT_BUG_ON(mt, !mn);
   MT_BUG_ON(mt, not_empty(mn));
   mas_push_node(&mas, mn);
   MT_BUG_ON(mt, mas_allocated(&mas) != j);
   mn = mas_pop_node(&mas);
   MT_BUG_ON(mt, not_empty(mn));
   MT_BUG_ON(mt, mas_allocated(&mas) != j - 1);
   mn->parent = ma_parent_ptr(mn);
   ma_free_rcu(mn);
  }
  MT_BUG_ON(mt, mas_allocated(&mas) != 0);

  mas_set_alloc_req(&mas, i);
  mas_set_err(&mas, -ENOMEM);
  MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL));
  for (j = 0; j <= i/2; j++) {
   MT_BUG_ON(mt, mas_allocated(&mas) != i - j);
   nodes[j] = mas_pop_node(&mas);
   MT_BUG_ON(mt, mas_allocated(&mas) != i - j - 1);
  }

  while (j) {
   j--;
   mas_push_node(&mas, nodes[j]);
   MT_BUG_ON(mt, mas_allocated(&mas) != i - j);
  }
  MT_BUG_ON(mt, mas_allocated(&mas) != i);
  for (j = 0; j <= i/2; j++) {
   MT_BUG_ON(mt, mas_allocated(&mas) != i - j);
   mn = mas_pop_node(&mas);
   MT_BUG_ON(mt, not_empty(mn));
   mn->parent = ma_parent_ptr(mn);
   ma_free_rcu(mn);
   MT_BUG_ON(mt, mas_allocated(&mas) != i - j - 1);
  }
  mas_reset(&mas);
  MT_BUG_ON(mt, mas_nomem(&mas, GFP_KERNEL));
  mas_destroy(&mas);

 }

 /* Set allocation request. */
 total = 500;
 mas_node_count(&mas, total);
 /* Drop the lock and allocate the nodes. */
 mas_nomem(&mas, GFP_KERNEL);
 MT_BUG_ON(mt, !mas.alloc);
 i = 1;
 smn = mas.alloc;
 while (i < total) {
  for (j = 0; j < MAPLE_ALLOC_SLOTS; j++) {
   i++;
   MT_BUG_ON(mt, !smn->slot[j]);
   if (i == total)
    break;
  }
  smn = smn->slot[0]; /* next. */
 }
 MT_BUG_ON(mt, mas_allocated(&mas) != total);
 mas_reset(&mas);
 mas_destroy(&mas); /* Free. */

 MT_BUG_ON(mt, mas_allocated(&mas) != 0);
 for (i = 1; i < 128; i++) {
  mas_node_count(&mas, i); /* Request */
  mas_nomem(&mas, GFP_KERNEL); /* Fill request */
  MT_BUG_ON(mt, mas_allocated(&mas) != i); /* check request filled */
  for (j = i; j > 0; j--) { /*Free the requests */
   mn = mas_pop_node(&mas); /* get the next node. */
   MT_BUG_ON(mt, mn == NULL);
   MT_BUG_ON(mt, not_empty(mn));
   mn->parent = ma_parent_ptr(mn);
   ma_free_rcu(mn);
  }
  MT_BUG_ON(mt, mas_allocated(&mas) != 0);
 }

 for (i = 1; i < MAPLE_NODE_MASK + 1; i++) {
  MA_STATE(mas2, mt, 0, 0);
  mas_node_count(&mas, i); /* Request */
  mas_nomem(&mas, GFP_KERNEL); /* Fill request */
  MT_BUG_ON(mt, mas_allocated(&mas) != i); /* check request filled */
  for (j = 1; j <= i; j++) { /* Move the allocations to mas2 */
   mn = mas_pop_node(&mas); /* get the next node. */
   MT_BUG_ON(mt, mn == NULL);
   MT_BUG_ON(mt, not_empty(mn));
   mas_push_node(&mas2, mn);
   MT_BUG_ON(mt, mas_allocated(&mas2) != j);
  }
  MT_BUG_ON(mt, mas_allocated(&mas) != 0);
  MT_BUG_ON(mt, mas_allocated(&mas2) != i);

  for (j = i; j > 0; j--) { /*Free the requests */
   MT_BUG_ON(mt, mas_allocated(&mas2) != j);
   mn = mas_pop_node(&mas2); /* get the next node. */
   MT_BUG_ON(mt, mn == NULL);
   MT_BUG_ON(mt, not_empty(mn));
   mn->parent = ma_parent_ptr(mn);
   ma_free_rcu(mn);
  }
  MT_BUG_ON(mt, mas_allocated(&mas2) != 0);
 }


 MT_BUG_ON(mt, mas_allocated(&mas) != 0);
 mas_node_count(&mas, MAPLE_ALLOC_SLOTS + 1); /* Request */
 MT_BUG_ON(mt, mas.node != MA_ERROR(-ENOMEM));
 MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL));
 MT_BUG_ON(mt, mas_allocated(&mas) != MAPLE_ALLOC_SLOTS + 1);
 MT_BUG_ON(mt, mas.alloc->node_count != MAPLE_ALLOC_SLOTS);

 mn = mas_pop_node(&mas); /* get the next node. */
 MT_BUG_ON(mt, mn == NULL);
 MT_BUG_ON(mt, not_empty(mn));
 MT_BUG_ON(mt, mas_allocated(&mas) != MAPLE_ALLOC_SLOTS);
 MT_BUG_ON(mt, mas.alloc->node_count != MAPLE_ALLOC_SLOTS - 1);

 mas_push_node(&mas, mn);
 MT_BUG_ON(mt, mas_allocated(&mas) != MAPLE_ALLOC_SLOTS + 1);
 MT_BUG_ON(mt, mas.alloc->node_count != MAPLE_ALLOC_SLOTS);

 /* Check the limit of pop/push/pop */
 mas_node_count(&mas, MAPLE_ALLOC_SLOTS + 2); /* Request */
 MT_BUG_ON(mt, mas_alloc_req(&mas) != 1);
 MT_BUG_ON(mt, mas.node != MA_ERROR(-ENOMEM));
 MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL));
 MT_BUG_ON(mt, mas_alloc_req(&mas));
 MT_BUG_ON(mt, mas.alloc->node_count != 1);
 MT_BUG_ON(mt, mas_allocated(&mas) != MAPLE_ALLOC_SLOTS + 2);
 mn = mas_pop_node(&mas);
 MT_BUG_ON(mt, not_empty(mn));
 MT_BUG_ON(mt, mas_allocated(&mas) != MAPLE_ALLOC_SLOTS + 1);
 MT_BUG_ON(mt, mas.alloc->node_count  != MAPLE_ALLOC_SLOTS);
 mas_push_node(&mas, mn);
 MT_BUG_ON(mt, mas.alloc->node_count != 1);
 MT_BUG_ON(mt, mas_allocated(&mas) != MAPLE_ALLOC_SLOTS + 2);
 mn = mas_pop_node(&mas);
 MT_BUG_ON(mt, not_empty(mn));
 mn->parent = ma_parent_ptr(mn);
 ma_free_rcu(mn);
 for (i = 1; i <= MAPLE_ALLOC_SLOTS + 1; i++) {
  mn = mas_pop_node(&mas);
  MT_BUG_ON(mt, not_empty(mn));
  mn->parent = ma_parent_ptr(mn);
  ma_free_rcu(mn);
 }
 MT_BUG_ON(mt, mas_allocated(&mas) != 0);


 for (i = 3; i < MAPLE_NODE_MASK * 3; i++) {
  mas.node = MA_ERROR(-ENOMEM);
  mas_node_count(&mas, i); /* Request */
  mas_nomem(&mas, GFP_KERNEL); /* Fill request */
  mn = mas_pop_node(&mas); /* get the next node. */
  mas_push_node(&mas, mn); /* put it back */
  mas_destroy(&mas);

  mas.node = MA_ERROR(-ENOMEM);
  mas_node_count(&mas, i); /* Request */
  mas_nomem(&mas, GFP_KERNEL); /* Fill request */
  mn = mas_pop_node(&mas); /* get the next node. */
  mn2 = mas_pop_node(&mas); /* get the next node. */
  mas_push_node(&mas, mn); /* put them back */
  mas_push_node(&mas, mn2);
  mas_destroy(&mas);

  mas.node = MA_ERROR(-ENOMEM);
  mas_node_count(&mas, i); /* Request */
  mas_nomem(&mas, GFP_KERNEL); /* Fill request */
  mn = mas_pop_node(&mas); /* get the next node. */
  mn2 = mas_pop_node(&mas); /* get the next node. */
  mn3 = mas_pop_node(&mas); /* get the next node. */
  mas_push_node(&mas, mn); /* put them back */
  mas_push_node(&mas, mn2);
  mas_push_node(&mas, mn3);
  mas_destroy(&mas);

  mas.node = MA_ERROR(-ENOMEM);
  mas_node_count(&mas, i); /* Request */
  mas_nomem(&mas, GFP_KERNEL); /* Fill request */
  mn = mas_pop_node(&mas); /* get the next node. */
  mn->parent = ma_parent_ptr(mn);
  ma_free_rcu(mn);
  mas_destroy(&mas);

  mas.node = MA_ERROR(-ENOMEM);
  mas_node_count(&mas, i); /* Request */
  mas_nomem(&mas, GFP_KERNEL); /* Fill request */
  mn = mas_pop_node(&mas); /* get the next node. */
  mn->parent = ma_parent_ptr(mn);
  ma_free_rcu(mn);
  mn = mas_pop_node(&mas); /* get the next node. */
  mn->parent = ma_parent_ptr(mn);
  ma_free_rcu(mn);
  mn = mas_pop_node(&mas); /* get the next node. */
  mn->parent = ma_parent_ptr(mn);
  ma_free_rcu(mn);
  mas_destroy(&mas);
 }

 mas.node = MA_ERROR(-ENOMEM);
 mas_node_count(&mas, 5); /* Request */
 mas_nomem(&mas, GFP_KERNEL); /* Fill request */
 MT_BUG_ON(mt, mas_allocated(&mas) != 5);
 mas.node = MA_ERROR(-ENOMEM);
 mas_node_count(&mas, 10); /* Request */
 mas_nomem(&mas, GFP_KERNEL); /* Fill request */
 mas.status = ma_start;
 MT_BUG_ON(mt, mas_allocated(&mas) != 10);
 mas_destroy(&mas);

 mas.node = MA_ERROR(-ENOMEM);
 mas_node_count(&mas, MAPLE_ALLOC_SLOTS - 1); /* Request */
 mas_nomem(&mas, GFP_KERNEL); /* Fill request */
 MT_BUG_ON(mt, mas_allocated(&mas) != MAPLE_ALLOC_SLOTS - 1);
 mas.node = MA_ERROR(-ENOMEM);
 mas_node_count(&mas, 10 + MAPLE_ALLOC_SLOTS - 1); /* Request */
 mas_nomem(&mas, GFP_KERNEL); /* Fill request */
 mas.status = ma_start;
 MT_BUG_ON(mt, mas_allocated(&mas) != 10 + MAPLE_ALLOC_SLOTS - 1);
 mas_destroy(&mas);

 mas.node = MA_ERROR(-ENOMEM);
 mas_node_count(&mas, MAPLE_ALLOC_SLOTS + 1); /* Request */
 mas_nomem(&mas, GFP_KERNEL); /* Fill request */
 MT_BUG_ON(mt, mas_allocated(&mas) != MAPLE_ALLOC_SLOTS + 1);
 mas.node = MA_ERROR(-ENOMEM);
 mas_node_count(&mas, MAPLE_ALLOC_SLOTS * 2 + 2); /* Request */
 mas_nomem(&mas, GFP_KERNEL); /* Fill request */
 mas.status = ma_start;
 MT_BUG_ON(mt, mas_allocated(&mas) != MAPLE_ALLOC_SLOTS * 2 + 2);
 mas_destroy(&mas);

 mas.node = MA_ERROR(-ENOMEM);
 mas_node_count(&mas, MAPLE_ALLOC_SLOTS * 2 + 1); /* Request */
 mas_nomem(&mas, GFP_KERNEL); /* Fill request */
 MT_BUG_ON(mt, mas_allocated(&mas) != MAPLE_ALLOC_SLOTS * 2 + 1);
 mas.node = MA_ERROR(-ENOMEM);
 mas_node_count(&mas, MAPLE_ALLOC_SLOTS * 3 + 2); /* Request */
 mas_nomem(&mas, GFP_KERNEL); /* Fill request */
 mas.status = ma_start;
 MT_BUG_ON(mt, mas_allocated(&mas) != MAPLE_ALLOC_SLOTS * 3 + 2);
 mas_destroy(&mas);

 mtree_unlock(mt);
}

/*
 * Check erasing including RCU.
 */

static noinline void __init check_erase(struct maple_tree *mt, unsigned long index,
  void *ptr)
{
 MT_BUG_ON(mt, mtree_test_erase(mt, index) != ptr);
}

#define erase_check_load(mt, i) check_load(mt, set[i], entry[i%2])
#define erase_check_insert(mt, i) check_insert(mt, set[i], entry[i%2])
#define erase_check_erase(mt, i) check_erase(mt, set[i], entry[i%2])

static noinline void __init check_erase_testset(struct maple_tree *mt)
{
 static const unsigned long set[] = { 5015, 5014, 5017, 25, 1000,
          1001, 1002, 1003, 1005, 0,
          6003, 6002, 6008, 6012, 6015,
          7003, 7002, 7008, 7012, 7015,
          8003, 8002, 8008, 8012, 8015,
          9003, 9002, 9008, 9012, 9015,
          10003, 10002, 10008, 10012, 10015,
          11003, 11002, 11008, 11012, 11015,
          12003, 12002, 12008, 12012, 12015,
          13003, 13002, 13008, 13012, 13015,
          14003, 14002, 14008, 14012, 14015,
          15003, 15002, 15008, 15012, 15015,
        };


 void *ptr = &check_erase_testset;
 void *entry[2] = { ptr, mt };
 void *root_node;


 rcu_register_thread();
 mt_set_in_rcu(mt);
 for (int i = 0; i < 4; i++)
  erase_check_insert(mt, i);
 for (int i = 0; i < 4; i++)
  erase_check_load(mt, i);

 mt_set_non_kernel(2);
 erase_check_erase(mt, 1);
 erase_check_load(mt, 0);
 check_load(mt, set[1], NULL);
 for (int i = 2; i < 4; i++)
  erase_check_load(mt, i);


 erase_check_erase(mt, 2);
 erase_check_load(mt, 0);
 check_load(mt, set[1], NULL);
 check_load(mt, set[2], NULL);

 erase_check_insert(mt, 1);
 erase_check_insert(mt, 2);

 for (int i = 0; i < 4; i++)
  erase_check_load(mt, i);

 /* Check erase and load without an allocation. */
 erase_check_load(mt, 3);
 erase_check_erase(mt, 1);
 erase_check_load(mt, 0);
 check_load(mt, set[1], NULL);
 for (int i = 2; i < 4; i++)
  erase_check_load(mt, i);

 /*
 * Set the newly erased node.  This will produce a different allocated
 * node to avoid busy slots.
 */

 root_node = mt->ma_root;
 erase_check_insert(mt, 1);

 erase_check_load(mt, 0);
 check_load(mt, 5016, NULL);
 erase_check_load(mt, 1);
 check_load(mt, 5013, NULL);
 erase_check_load(mt, 2);
 check_load(mt, 5018, NULL);
 erase_check_load(mt, 3);

 erase_check_erase(mt, 2); /* erase 5017 to check append */
 erase_check_load(mt, 0);
 check_load(mt, 5016, NULL);
 erase_check_load(mt, 1);
 check_load(mt, 5013, NULL);
 check_load(mt, set[2], NULL);
 check_load(mt, 5018, NULL);

 erase_check_load(mt, 3);

 root_node = mt->ma_root;
 erase_check_insert(mt, 2);

 erase_check_load(mt, 0);
 check_load(mt, 5016, NULL);
 erase_check_load(mt, 1);
 check_load(mt, 5013, NULL);
 erase_check_load(mt, 2);
 check_load(mt, 5018, NULL);
 erase_check_load(mt, 3);

 mt_set_non_kernel(1);
 erase_check_erase(mt, 2); /* erase 5017 to check append */
 erase_check_load(mt, 0);
 check_load(mt, 5016, NULL);
 check_load(mt, set[2], NULL);
 erase_check_erase(mt, 0); /* erase 5015 to check append */
 check_load(mt, set[0], NULL);
 check_load(mt, 5016, NULL);
 erase_check_insert(mt, 4); /* 1000 < Should not split. */
 check_load(mt, set[0], NULL);
 check_load(mt, 5016, NULL);
 erase_check_load(mt, 1);
 check_load(mt, 5013, NULL);
 check_load(mt, set[2], NULL);
 check_load(mt, 5018, NULL);
 erase_check_load(mt, 4);
 check_load(mt, 999, NULL);
 check_load(mt, 1001, NULL);
 erase_check_load(mt, 4);
 if (mt_in_rcu(mt))
  MT_BUG_ON(mt, root_node == mt->ma_root);
 else
  MT_BUG_ON(mt, root_node != mt->ma_root);

 /* Should not have split. */
 MT_BUG_ON(mt, !mte_is_leaf(mt->ma_root));


 /* Coalesce testing */
 erase_check_insert(mt, 0);
 erase_check_insert(mt, 2);

 for (int i = 5; i < 25; i++) {
  erase_check_insert(mt, i);
  for (int j = i; j >= 0; j--)
   erase_check_load(mt, j);
 }

 erase_check_erase(mt, 14); /*6015 */
 for (int i = 0; i < 25; i++) {
  if (i == 14)
   check_load(mt, set[i], NULL);
  else
   erase_check_load(mt, i);
 }
 erase_check_erase(mt, 16); /*7002 */
 for (int i = 0; i < 25; i++) {
  if (i == 16 || i == 14)
   check_load(mt, set[i], NULL);
  else
   erase_check_load(mt, i);
 }


 mt_set_non_kernel(1);
 erase_check_erase(mt, 13); /*6012 */
 for (int i = 0; i < 25; i++) {
  if (i == 16 || i == 14 || i == 13)
   check_load(mt, set[i], NULL);
  else
   erase_check_load(mt, i);
 }

 erase_check_erase(mt, 15); /*7003 */
 for (int i = 0; i < 25; i++) {
  if (i <= 16 && i >= 13)
   check_load(mt, set[i], NULL);
  else
   erase_check_load(mt, i);
 }

 mt_set_non_kernel(2);
 erase_check_erase(mt, 17); /*7008 *should* cause coalesce. */
 for (int i = 0; i < 25; i++) {
  if (i <= 17 && i >= 13)
   check_load(mt, set[i], NULL);
  else
   erase_check_load(mt, i);
 }

 erase_check_erase(mt, 18); /*7012 */
 for (int i = 0; i < 25; i++) {
  if (i <= 18 && i >= 13)
   check_load(mt, set[i], NULL);
  else
   erase_check_load(mt, i);
 }

 mt_set_non_kernel(2);
 erase_check_erase(mt, 19); /*7015 */
 for (int i = 0; i < 25; i++) {
  if (i <= 19 && i >= 13)
   check_load(mt, set[i], NULL);
  else
   erase_check_load(mt, i);
 }

 erase_check_erase(mt, 20); /*8003 */
 for (int i = 0; i < 25; i++) {
  if (i <= 20 && i >= 13)
   check_load(mt, set[i], NULL);
  else
   erase_check_load(mt, i);
 }

 erase_check_erase(mt, 21); /*8002 */
 for (int i = 0; i < 25; i++) {
  if (i <= 21 && i >= 13)
   check_load(mt, set[i], NULL);
  else
   erase_check_load(mt, i);
 }

 mt_set_non_kernel(2);
 erase_check_erase(mt, 22); /*8008 */
 for (int i = 0; i < 25; i++) {
  if (i <= 22 && i >= 13)
   check_load(mt, set[i], NULL);
  else
   erase_check_load(mt, i);
 }
 for (int i = 23; i < 25; i++)
  erase_check_erase(mt, i);

 for (int i = 0; i < 25; i++) {
  if (i <= 25 && i >= 13)
   check_load(mt, set[i], NULL);
  else
   erase_check_load(mt, i);
 }

 /* Shrinking tree test. */

 for (int i = 13; i < ARRAY_SIZE(set); i++)
  erase_check_insert(mt, i);

 mt_set_non_kernel(99);
 for (int i = 18; i < ARRAY_SIZE(set); i++) {
  erase_check_erase(mt, i);
  for (int j = 0; j < ARRAY_SIZE(set); j++) {
   if (j < 18 || j > i)
    erase_check_load(mt, j);
   else
    check_load(mt, set[j], NULL);
  }
 }
 mt_set_non_kernel(35);
 for (int i = 0; i < 18; i++) {
  erase_check_erase(mt, i);
  for (int j = 0; j < ARRAY_SIZE(set); j++) {
   if (j < 18 && j > i)
    erase_check_load(mt, j);
   else
    check_load(mt, set[j], NULL);
  }
 }
 erase_check_insert(mt, 8);
 erase_check_insert(mt, 9);
 erase_check_erase(mt, 8);
 rcu_unregister_thread();
}

/* End of erase testing */

/* VM Generated Crashes - uses its own tree walk for verification */
#define erase_check_store_range(mt, a, i, ptr) mtree_test_store_range(mt, \
      a[(i)], a[(i + 1)], ptr)
#define STORE 1
#define SNULL 2
#define ERASE 3
#define ec_type_str(x) \
 (((x) == STORE) ? \
   "STORE" : \
    (((x) == SNULL) ? \
    "SNULL" : "ERASE") \
 )
#define check_erase2_debug 0

/* Calculate the overwritten entries. */
int mas_ce2_over_count(struct ma_state *mas_start, struct ma_state *mas_end,
        void *s_entry, unsigned long s_min,
        void *e_entry, unsigned long e_max,
        const unsigned long *set, int i, bool null_entry)
{
 int count = 0, span = 0;
 unsigned long retry = 0;
 void *entry;
 struct ma_state tmp;


 /* count slots */
 memcpy(&tmp, mas_start, sizeof(tmp));
 entry = mas_next(&tmp, mas_end->last);
 while (entry) {
  BUG_ON(retry > 50); /* stop infinite retry on testing. */
  if (xa_is_zero(s_entry)) {
   retry++;
   continue;
  }
  count++;
  span++;
  entry = mas_next(&tmp, mas_end->last);
 }

 if (null_entry) {
  /* Check splitting end. */
  if (e_entry && (e_max > mas_end->last))
   count--;

  /* check overwrite of entire start */
  if (s_entry && (s_min == mas_start->index))
   count++;
 } else { /* !null_entry (store) */
  bool esplit = e_max > mas_end->last;
  bool ssplit = s_min != mas_start->index;

  if (s_entry && e_entry) {
   if (esplit && ssplit)
    count--;
   else if (ssplit)
    count--;
   else if (esplit) {
    if (span)
     count--;
   }
  } else if (s_entry && !e_entry) {
   if (ssplit)
    count--;
  } else if (!s_entry && e_entry) {
   if (esplit)
    count--;
   count--;
  } else {
   count--;
  }
 }
 return count;
}

/*
 * mas_node_walk() - Walk a maple node to offset of the index.
 * @mas: The maple state
 * @type: The maple node type
 * @*range_min: Pointer to store the minimum range of the offset
 * @*range_max: Pointer to store the maximum range of the offset
 *
 * The offset will be stored in the maple state.
 *
 */

static inline void mas_node_walk(struct ma_state *mas, struct maple_node *node,
    enum maple_type type, unsigned long *range_min,
    unsigned long *range_max)

{
 unsigned long *pivots;
 unsigned char count;
 unsigned long prev, max;
 unsigned char offset;
 unsigned long index;

 if (unlikely(ma_is_dense(type))) {
  (*range_max) = (*range_min) = mas->index;
  if (unlikely(ma_dead_node(node)))
   return;

  mas->offset = mas->index = mas->min;
  return;
 }

 pivots = ma_pivots(node, type);
 max = pivots[0];
 if (unlikely(ma_dead_node(node)))
  return;

 offset = 0;
 prev = mas->min;
 index = mas->index;
 if (unlikely(index <= max))
  goto offset_zero;

 count = mt_pivots[type];
 while (++offset < count) {
  prev = max;
  max = pivots[offset];
  if (unlikely(ma_dead_node(node)))
   return;

  if (index <= max)
   goto offset_found;
  else if (unlikely(!max))
   goto mas_max;
 }

 prev = max;
mas_max:
 max = mas->max;
offset_found:
 prev++;
offset_zero:
 mas->offset = offset;
 if (ma_is_leaf(type)) {
  *range_max = max;
  *range_min = prev;
 } else {
  mas->max = max;
  mas->min = prev;
 }
}

/*
 * mas_descend_walk(): Locates a value and sets the mas->node and slot
 * accordingly.  range_min and range_max are set to the range which the entry is
 * valid.
 * @mas: The maple state
 * @*range_min: A pointer to store the minimum of the range
 * @*range_max: A pointer to store the maximum of the range
 *
 * Check mas->node is still valid on return of any value.
 *
 * Return: true if pointing to a valid node and offset.  False otherwise.
 */

static inline bool mas_descend_walk(struct ma_state *mas,
   unsigned long *range_min, unsigned long *range_max)
{
 struct maple_enode *next;
 struct maple_node *node;
 enum maple_type type;

 next = mas->node;
 while (true) {
  node = mte_to_node(next);
  type = mte_node_type(next);
  mas_node_walk(mas, node, type, range_min, range_max);
  next = mas_slot(mas, ma_slots(node, type), mas->offset);
  if (unlikely(ma_dead_node(node)))
   return false;

  if (unlikely(ma_is_leaf(type)))
   return true;

  /* Descend. */
  mas->node = next;
 }
 return false;
}

/*
 * mas_tree_walk() - Walk to @mas->index and set the range values.
 * @mas: The maple state.
 * @*range_min: The minimum range to be set.
 * @*range_max: The maximum range to be set.
 *
 * Ranges are only valid if there is a valid entry at @mas->index.
 *
 * Return: True if a value exists, false otherwise.
 */

static inline bool mas_tree_walk(struct ma_state *mas, unsigned long *range_min,
     unsigned long *range_max)
{
 bool ret;

retry:
 ret = false;
 mas_start(mas);
 if (mas_is_none(mas))
  goto not_found;

 if (mas_is_ptr(mas)) {
  *range_min = *range_max = 0;
  if (!mas->index)
   return true;

  goto not_found;
 }

 ret = mas_descend_walk(mas, range_min, range_max);
 if (unlikely(mte_dead_node(mas->node))) {
  mas->status = ma_start;
  goto retry;
 }

 mas->end = mas_data_end(mas);
 return ret;

not_found:
 mas->offset = MAPLE_NODE_SLOTS;
 return false;
}

static inline void *mas_range_load(struct ma_state *mas,
    unsigned long *range_min, unsigned long *range_max)

{
 void *entry = NULL;
 unsigned long index = mas->index;

 if (mas_is_none(mas) || mas_is_paused(mas))
  mas->status = ma_start;
retry:
 if (mas_tree_walk(mas, range_min, range_max))
  if (unlikely(mas->status == ma_root))
   return mas_root(mas);

 if (likely(mas->offset != MAPLE_NODE_SLOTS))
  entry = mas_get_slot(mas, mas->offset);

 if (mas_is_active(mas) && mte_dead_node(mas->node)) {
  mas_set(mas, index);
  goto retry;
 }

 return entry;
}

#if defined(CONFIG_64BIT)
static noinline void __init check_erase2_testset(struct maple_tree *mt,
  const unsigned long *set, unsigned long size)
{
 int entry_count = 0;
 int check = 0;
 void *foo;
 unsigned long addr = 0;
 void *s_entry = NULL, *e_entry = NULL;

 MA_STATE(mas, mt, 0, 0);

 for (int i = 0; i < size; i += 3) {
  unsigned long s_min, s_max;
  unsigned long e_min, e_max;
  void *value = NULL;

  MA_STATE(mas_start, mt, set[i+1], set[i+1]);
  MA_STATE(mas_end, mt, set[i+2], set[i+2]);
  mt_set_non_kernel(127);
#if check_erase2_debug
  pr_err("%s: %d %s %lu - %lu\n", __func__, i,
    ec_type_str(set[i]),
    set[i+1], set[i+2]);
#endif
  s_entry = mas_range_load(&mas_start, &s_min, &s_max);
  e_entry = mas_range_load(&mas_end, &e_min, &e_max);

  switch (set[i]) {
  case SNULL:
   if ((s_min == set[i+1]) && (s_max == set[i+2])) {
    if (s_entry)
     entry_count--;
   } else if ((s_min != set[i+1]) && (s_max != set[i+2])) {
    entry_count++;
   } else if ((mas_start.node != mas_end.node) ||
      (mas_start.offset != mas_end.offset)) {
    entry_count -=
       mas_ce2_over_count(&mas_start, &mas_end,
          s_entry, s_min,
          e_entry, e_max, set, i,
          true);
   }


   erase_check_store_range(mt, set, i + 1, value);
   break;
  case STORE:
   value = xa_mk_value(set[i + 1]);
   if (mas_start.offset > mt_slot_count(mas_start.node)) {
    entry_count++; /* appending an entry. */
   } else if ((s_min == e_min) && (s_max == e_max)) {
    if (!entry_count)
     entry_count++;

    else if (s_entry) {
     if (e_max > mas_end.last)
      entry_count++;

     if (s_min < mas_start.index)
      entry_count++;

    } else {
     entry_count++;
    }
   } else {
    entry_count -=
       mas_ce2_over_count(&mas_start, &mas_end,
          s_entry, s_min,
          e_entry, e_max, set, i,
          false);
   }

   erase_check_store_range(mt, set, i + 1, value);
   break;
  case ERASE:
   if (!s_entry)
    break;
   check_erase(mt, set[i+1], xa_mk_value(set[i+1]));
   entry_count--;
   break;
  }
  mt_validate(mt);
  if (entry_count)
   MT_BUG_ON(mt, !mt_height(mt));
#if check_erase2_debug > 1
  mt_dump(mt, mt_dump_hex);
#endif
#if check_erase2_debug
  pr_err("Done\n");
#endif

  check = 0;
  addr = 0;
  mt_for_each(mt, foo, addr, ULONG_MAX) {
   check++;
#if check_erase2_debug > 2
   pr_err("mt: %lu -> %p (%d)\n", addr+1, foo, check);
#endif
   if (check > entry_count)
    break;
  }

#if check_erase2_debug > 2
  pr_err("mt_for_each %d and count %d\n", check, entry_count);
#endif

  MT_BUG_ON(mt, check != entry_count);

  check = 0;
  addr = 0;
  mas_reset(&mas);
  mas.index = 0;
  rcu_read_lock();
  mas_for_each(&mas, foo, ULONG_MAX) {
   if (xa_is_zero(foo)) {
    if (addr == mas.index) {
     mt_dump(mas.tree, mt_dump_hex);
     pr_err("retry failed %lu - %lu\n",
      mas.index, mas.last);
     MT_BUG_ON(mt, 1);
    }
    addr = mas.index;
    continue;
   }
#if check_erase2_debug > 2
   pr_err("mas: %lu -> %p\n", mas.index, foo);
#endif
   check++;
   if (check > entry_count)
    break;
  }
  rcu_read_unlock();
#if check_erase2_debug > 2
  pr_err("mas_for_each %d and count %d\n", check, entry_count);
  mt_validate(mt);
#endif

  MT_BUG_ON(mt, check != entry_count);

  MT_BUG_ON(mt, mtree_load(mas.tree, 0) != NULL);
 }
}


/* These tests were pulled from KVM tree modifications which failed. */
static noinline void __init check_erase2_sets(struct maple_tree *mt)
{
 void *entry;
 unsigned long start = 0;
 static const unsigned long set[] = {
STORE, 140737488347136, 140737488351231,
STORE, 140721266458624, 140737488351231,
ERASE, 140721266458624, 140737488351231,
STORE, 140721266458624, 140721266462719,
STORE, 94735788949504, 94735789121535,
ERASE, 94735788949504, 94735789121535,
STORE, 94735788949504, 94735788965887,
STORE, 94735788965888, 94735789121535,
ERASE, 94735788965888, 94735789121535,
STORE, 94735788965888, 94735789068287,
STORE, 94735789068288, 94735789109247,
STORE, 94735789109248, 94735789121535,
STORE, 140253902692352, 140253902864383,
ERASE, 140253902692352, 140253902864383,
STORE, 140253902692352, 140253902696447,
STORE, 140253902696448, 140253902864383,
  };
 static const unsigned long set2[] = {
STORE, 140737488347136, 140737488351231,
STORE, 140735933583360, 140737488351231,
ERASE, 140735933583360, 140737488351231,
STORE, 140735933583360, 140735933587455,
STORE, 94811003260928, 94811003432959,
ERASE, 94811003260928, 94811003432959,
STORE, 94811003260928, 94811003277311,
STORE, 94811003277312, 94811003432959,
ERASE, 94811003277312, 94811003432959,
STORE, 94811003277312, 94811003379711,
STORE, 94811003379712, 94811003420671,
STORE, 94811003420672, 94811003432959,
STORE, 140277094653952, 140277094825983,
ERASE, 140277094653952, 140277094825983,
STORE, 140277094653952, 140277094658047,
STORE, 140277094658048, 140277094825983,
ERASE, 140277094658048, 140277094825983,
STORE, 140277094658048, 140277094780927,
STORE, 140277094780928, 140277094813695,
STORE, 140277094813696, 140277094821887,
STORE, 140277094821888, 140277094825983,
STORE, 140735933906944, 140735933911039,
 };
 static const unsigned long set3[] = {
STORE, 140737488347136, 140737488351231,
STORE, 140735790264320, 140737488351231,
ERASE, 140735790264320, 140737488351231,
STORE, 140735790264320, 140735790268415,
STORE, 94016597282816, 94016597454847,
ERASE, 94016597282816, 94016597454847,
STORE, 94016597282816, 94016597299199,
STORE, 94016597299200, 94016597454847,
ERASE, 94016597299200, 94016597454847,
STORE, 94016597299200, 94016597401599,
STORE, 94016597401600, 94016597442559,
STORE, 94016597442560, 94016597454847,
STORE, 140496959283200, 140496959455231,
ERASE, 140496959283200, 140496959455231,
STORE, 140496959283200, 140496959287295,
STORE, 140496959287296, 140496959455231,
ERASE, 140496959287296, 140496959455231,
STORE, 140496959287296, 140496959410175,
STORE, 140496959410176, 140496959442943,
STORE, 140496959442944, 140496959451135,
STORE, 140496959451136, 140496959455231,
STORE, 140735791718400, 140735791722495,
STORE, 140735791706112, 140735791718399,
STORE, 47135835713536, 47135835721727,
STORE, 47135835721728, 47135835729919,
STORE, 47135835729920, 47135835893759,
ERASE, 47135835729920, 47135835893759,
STORE, 47135835729920, 47135835742207,
STORE, 47135835742208, 47135835893759,
STORE, 47135835840512, 47135835893759,
STORE, 47135835742208, 47135835840511,
ERASE, 47135835742208, 47135835840511,
STORE, 47135835742208, 47135835840511,
STORE, 47135835885568, 47135835893759,
STORE, 47135835840512, 47135835885567,
ERASE, 47135835840512, 47135835885567,
STORE, 47135835840512, 47135835893759,
ERASE, 47135835840512, 47135835893759,
STORE, 47135835840512, 47135835885567,
STORE, 47135835885568, 47135835893759,
 };

 static const unsigned long set4[] = {
STORE, 140737488347136, 140737488351231,
STORE, 140728251703296, 140737488351231,
ERASE, 140728251703296, 140737488351231,
STORE, 140728251703296, 140728251707391,
STORE, 94668429205504, 94668429377535,
ERASE, 94668429205504, 94668429377535,
STORE, 94668429205504, 94668429221887,
STORE, 94668429221888, 94668429377535,
ERASE, 94668429221888, 94668429377535,
STORE, 94668429221888, 94668429324287,
STORE, 94668429324288, 94668429365247,
STORE, 94668429365248, 94668429377535,
STORE, 47646523273216, 47646523445247,
ERASE, 47646523273216, 47646523445247,
STORE, 47646523273216, 47646523277311,
STORE, 47646523277312, 47646523445247,
ERASE, 47646523277312, 47646523445247,
STORE, 47646523277312, 47646523400191,
 };

 static const unsigned long set5[] = {
STORE, 140737488347136, 140737488351231,
STORE, 140726874062848, 140737488351231,
ERASE, 140726874062848, 140737488351231,
STORE, 140726874062848, 140726874066943,
STORE, 94248892870656, 94248893042687,
ERASE, 94248892870656, 94248893042687,
STORE, 94248892870656, 94248892887039,
STORE, 94248892887040, 94248893042687,
ERASE, 94248892887040, 94248893042687,
STORE, 94248892887040, 94248892989439,
STORE, 94248892989440, 94248893030399,
STORE, 94248893030400, 94248893042687,
STORE, 47884786266112, 47884786438143,
ERASE, 47884786266112, 47884786438143,
STORE, 47884786266112, 47884786270207,
STORE, 47884786270208, 47884786438143,
ERASE, 47884786270208, 47884786438143,
STORE, 47884786270208, 47884786393087,
STORE, 47884786393088, 47884786425855,
STORE, 47884786425856, 47884786434047,
STORE, 47884786434048, 47884786438143,
STORE, 140726874513408, 140726874517503,
STORE, 140726874501120, 140726874513407,
STORE, 47884786438144, 47884786446335,
STORE, 47884786446336, 47884786454527,
STORE, 47884786454528, 47884786618367,
ERASE, 47884786454528, 47884786618367,
STORE, 47884786454528, 47884786466815,
STORE, 47884786466816, 47884786618367,
STORE, 47884786565120, 47884786618367,
STORE, 47884786466816, 47884786565119,
ERASE, 47884786466816, 47884786565119,
STORE, 47884786466816, 47884786565119,
STORE, 47884786610176, 47884786618367,
STORE, 47884786565120, 47884786610175,
ERASE, 47884786565120, 47884786610175,
STORE, 47884786565120, 47884786618367,
ERASE, 47884786565120, 47884786618367,
STORE, 47884786565120, 47884786610175,
STORE, 47884786610176, 47884786618367,
ERASE, 47884786610176, 47884786618367,
STORE, 47884786610176, 47884786618367,
STORE, 47884786618368, 47884789669887,
STORE, 47884787163136, 47884789669887,
STORE, 47884786618368, 47884787163135,
ERASE, 47884787163136, 47884789669887,
STORE, 47884787163136, 47884789448703,
STORE, 47884789448704, 47884789669887,
STORE, 47884788858880, 47884789448703,
STORE, 47884787163136, 47884788858879,
ERASE, 47884787163136, 47884788858879,
STORE, 47884787163136, 47884788858879,
STORE, 47884789444608, 47884789448703,
STORE, 47884788858880, 47884789444607,
ERASE, 47884788858880, 47884789444607,
STORE, 47884788858880, 47884789444607,
STORE, 47884789653504, 47884789669887,
STORE, 47884789448704, 47884789653503,
ERASE, 47884789448704, 47884789653503,
STORE, 47884789448704, 47884789653503,
ERASE, 47884789653504, 47884789669887,
STORE, 47884789653504, 47884789669887,
STORE, 47884789669888, 47884791508991,
STORE, 47884789809152, 47884791508991,
STORE, 47884789669888, 47884789809151,
ERASE, 47884789809152, 47884791508991,
STORE, 47884789809152, 47884791468031,
STORE, 47884791468032, 47884791508991,
STORE, 47884791152640, 47884791468031,
STORE, 47884789809152, 47884791152639,
ERASE, 47884789809152, 47884791152639,
STORE, 47884789809152, 47884791152639,
STORE, 47884791463936, 47884791468031,
STORE, 47884791152640, 47884791463935,
ERASE, 47884791152640, 47884791463935,
STORE, 47884791152640, 47884791463935,
STORE, 47884791492608, 47884791508991,
STORE, 47884791468032, 47884791492607,
ERASE, 47884791468032, 47884791492607,
STORE, 47884791468032, 47884791492607,
ERASE, 47884791492608, 47884791508991,
STORE, 47884791492608, 47884791508991,
STORE, 47884791508992, 47884791644159,
ERASE, 47884791508992, 47884791644159,
STORE, 47884791508992, 47884791533567,
STORE, 47884791533568, 47884791644159,
STORE, 47884791595008, 47884791644159,
STORE, 47884791533568, 47884791595007,
ERASE, 47884791533568, 47884791595007,
STORE, 47884791533568, 47884791595007,
STORE, 47884791619584, 47884791644159,
STORE, 47884791595008, 47884791619583,
ERASE, 47884791595008, 47884791619583,
STORE, 47884791595008, 47884791644159,
ERASE, 47884791595008, 47884791644159,
STORE, 47884791595008, 47884791619583,
STORE, 47884791619584, 47884791644159,
STORE, 47884791627776, 47884791644159,
STORE, 47884791619584, 47884791627775,
ERASE, 47884791619584, 47884791627775,
STORE, 47884791619584, 47884791627775,
ERASE, 47884791627776, 47884791644159,
STORE, 47884791627776, 47884791644159,
STORE, 47884791644160, 47884791664639,
ERASE, 47884791644160, 47884791664639,
STORE, 47884791644160, 47884791648255,
STORE, 47884791648256, 47884791664639,
STORE, 47884791652352, 47884791664639,
STORE, 47884791648256, 47884791652351,
ERASE, 47884791648256, 47884791652351,
STORE, 47884791648256, 47884791652351,
STORE, 47884791656448, 47884791664639,
STORE, 47884791652352, 47884791656447,
ERASE, 47884791652352, 47884791656447,
STORE, 47884791652352, 47884791664639,
ERASE, 47884791652352, 47884791664639,
STORE, 47884791652352, 47884791656447,
STORE, 47884791656448, 47884791664639,
ERASE, 47884791656448, 47884791664639,
STORE, 47884791656448, 47884791664639,
STORE, 47884791664640, 47884791672831,
ERASE, 47884791468032, 47884791492607,
STORE, 47884791468032, 47884791484415,
STORE, 47884791484416, 47884791492607,
ERASE, 47884791656448, 47884791664639,
STORE, 47884791656448, 47884791660543,
STORE, 47884791660544, 47884791664639,
ERASE, 47884791619584, 47884791627775,
STORE, 47884791619584, 47884791623679,
STORE, 47884791623680, 47884791627775,
 };

 static const unsigned long set6[] = {
STORE, 140737488347136, 140737488351231,
STORE, 140722999021568, 140737488351231,
ERASE, 140722999021568, 140737488351231,
STORE, 140722999021568, 140722999025663,
STORE, 94901500268544, 94901500440575,
ERASE, 94901500268544, 94901500440575,
STORE, 94901500268544, 94901500284927,
STORE, 94901500284928, 94901500440575,
ERASE, 94901500284928, 94901500440575,
STORE, 94901500284928, 94901500387327,
STORE, 94901500387328, 94901500428287,
STORE, 94901500428288, 94901500440575,
STORE, 47430426660864, 47430426832895,
ERASE, 47430426660864, 47430426832895,
STORE, 47430426660864, 47430426664959,
STORE, 47430426664960, 47430426832895,
ERASE, 47430426664960, 47430426832895,
STORE, 47430426664960, 47430426787839,
STORE, 47430426787840, 47430426820607,
STORE, 47430426820608, 47430426828799,
STORE, 47430426828800, 47430426832895,
STORE, 140722999115776, 140722999119871,
STORE, 140722999103488, 140722999115775,
STORE, 47430426832896, 47430426841087,
STORE, 47430426841088, 47430426849279,
STORE, 47430426849280, 47430427013119,
ERASE, 47430426849280, 47430427013119,
STORE, 47430426849280, 47430426861567,
STORE, 47430426861568, 47430427013119,
STORE, 47430426959872, 47430427013119,
STORE, 47430426861568, 47430426959871,
ERASE, 47430426861568, 47430426959871,
STORE, 47430426861568, 47430426959871,
STORE, 47430427004928, 47430427013119,
STORE, 47430426959872, 47430427004927,
ERASE, 47430426959872, 47430427004927,
STORE, 47430426959872, 47430427013119,
ERASE, 47430426959872, 47430427013119,
STORE, 47430426959872, 47430427004927,
STORE, 47430427004928, 47430427013119,
ERASE, 47430427004928, 47430427013119,
STORE, 47430427004928, 47430427013119,
STORE, 47430427013120, 47430430064639,
STORE, 47430427557888, 47430430064639,
STORE, 47430427013120, 47430427557887,
ERASE, 47430427557888, 47430430064639,
STORE, 47430427557888, 47430429843455,
STORE, 47430429843456, 47430430064639,
STORE, 47430429253632, 47430429843455,
STORE, 47430427557888, 47430429253631,
ERASE, 47430427557888, 47430429253631,
STORE, 47430427557888, 47430429253631,
STORE, 47430429839360, 47430429843455,
STORE, 47430429253632, 47430429839359,
ERASE, 47430429253632, 47430429839359,
STORE, 47430429253632, 47430429839359,
STORE, 47430430048256, 47430430064639,
STORE, 47430429843456, 47430430048255,
ERASE, 47430429843456, 47430430048255,
STORE, 47430429843456, 47430430048255,
ERASE, 47430430048256, 47430430064639,
STORE, 47430430048256, 47430430064639,
STORE, 47430430064640, 47430431903743,
STORE, 47430430203904, 47430431903743,
STORE, 47430430064640, 47430430203903,
ERASE, 47430430203904, 47430431903743,
STORE, 47430430203904, 47430431862783,
STORE, 47430431862784, 47430431903743,
STORE, 47430431547392, 47430431862783,
STORE, 47430430203904, 47430431547391,
ERASE, 47430430203904, 47430431547391,
STORE, 47430430203904, 47430431547391,
STORE, 47430431858688, 47430431862783,
STORE, 47430431547392, 47430431858687,
ERASE, 47430431547392, 47430431858687,
STORE, 47430431547392, 47430431858687,
STORE, 47430431887360, 47430431903743,
STORE, 47430431862784, 47430431887359,
ERASE, 47430431862784, 47430431887359,
STORE, 47430431862784, 47430431887359,
ERASE, 47430431887360, 47430431903743,
STORE, 47430431887360, 47430431903743,
STORE, 47430431903744, 47430432038911,
ERASE, 47430431903744, 47430432038911,
STORE, 47430431903744, 47430431928319,
STORE, 47430431928320, 47430432038911,
STORE, 47430431989760, 47430432038911,
STORE, 47430431928320, 47430431989759,
ERASE, 47430431928320, 47430431989759,
STORE, 47430431928320, 47430431989759,
STORE, 47430432014336, 47430432038911,
STORE, 47430431989760, 47430432014335,
ERASE, 47430431989760, 47430432014335,
STORE, 47430431989760, 47430432038911,
ERASE, 47430431989760, 47430432038911,
STORE, 47430431989760, 47430432014335,
STORE, 47430432014336, 47430432038911,
STORE, 47430432022528, 47430432038911,
STORE, 47430432014336, 47430432022527,
ERASE, 47430432014336, 47430432022527,
STORE, 47430432014336, 47430432022527,
ERASE, 47430432022528, 47430432038911,
STORE, 47430432022528, 47430432038911,
STORE, 47430432038912, 47430432059391,
ERASE, 47430432038912, 47430432059391,
STORE, 47430432038912, 47430432043007,
STORE, 47430432043008, 47430432059391,
STORE, 47430432047104, 47430432059391,
STORE, 47430432043008, 47430432047103,
ERASE, 47430432043008, 47430432047103,
STORE, 47430432043008, 47430432047103,
STORE, 47430432051200, 47430432059391,
STORE, 47430432047104, 47430432051199,
ERASE, 47430432047104, 47430432051199,
STORE, 47430432047104, 47430432059391,
ERASE, 47430432047104, 47430432059391,
STORE, 47430432047104, 47430432051199,
STORE, 47430432051200, 47430432059391,
ERASE, 47430432051200, 47430432059391,
STORE, 47430432051200, 47430432059391,
STORE, 47430432059392, 47430432067583,
ERASE, 47430431862784, 47430431887359,
STORE, 47430431862784, 47430431879167,
STORE, 47430431879168, 47430431887359,
ERASE, 47430432051200, 47430432059391,
STORE, 47430432051200, 47430432055295,
STORE, 47430432055296, 47430432059391,
ERASE, 47430432014336, 47430432022527,
STORE, 47430432014336, 47430432018431,
STORE, 47430432018432, 47430432022527,
 };
 static const unsigned long set7[] = {
STORE, 140737488347136, 140737488351231,
STORE, 140729808330752, 140737488351231,
ERASE, 140729808330752, 140737488351231,
STORE, 140729808330752, 140729808334847,
STORE, 94629632020480, 94629632192511,
ERASE, 94629632020480, 94629632192511,
STORE, 94629632020480, 94629632036863,
STORE, 94629632036864, 94629632192511,
ERASE, 94629632036864, 94629632192511,
STORE, 94629632036864, 94629632139263,
STORE, 94629632139264, 94629632180223,
STORE, 94629632180224, 94629632192511,
STORE, 47439981776896, 47439981948927,
ERASE, 47439981776896, 47439981948927,
STORE, 47439981776896, 47439981780991,
STORE, 47439981780992, 47439981948927,
ERASE, 47439981780992, 47439981948927,
STORE, 47439981780992, 47439981903871,
STORE, 47439981903872, 47439981936639,
STORE, 47439981936640, 47439981944831,
STORE, 47439981944832, 47439981948927,
STORE, 140729808474112, 140729808478207,
STORE, 140729808461824, 140729808474111,
STORE, 47439981948928, 47439981957119,
STORE, 47439981957120, 47439981965311,
STORE, 47439981965312, 47439982129151,
ERASE, 47439981965312, 47439982129151,
STORE, 47439981965312, 47439981977599,
STORE, 47439981977600, 47439982129151,
STORE, 47439982075904, 47439982129151,
STORE, 47439981977600, 47439982075903,
ERASE, 47439981977600, 47439982075903,
STORE, 47439981977600, 47439982075903,
STORE, 47439982120960, 47439982129151,
STORE, 47439982075904, 47439982120959,
ERASE, 47439982075904, 47439982120959,
STORE, 47439982075904, 47439982129151,
ERASE, 47439982075904, 47439982129151,
STORE, 47439982075904, 47439982120959,
STORE, 47439982120960, 47439982129151,
ERASE, 47439982120960, 47439982129151,
STORE, 47439982120960, 47439982129151,
STORE, 47439982129152, 47439985180671,
STORE, 47439982673920, 47439985180671,
STORE, 47439982129152, 47439982673919,
ERASE, 47439982673920, 47439985180671,
STORE, 47439982673920, 47439984959487,
STORE, 47439984959488, 47439985180671,
STORE, 47439984369664, 47439984959487,
STORE, 47439982673920, 47439984369663,
ERASE, 47439982673920, 47439984369663,
STORE, 47439982673920, 47439984369663,
STORE, 47439984955392, 47439984959487,
STORE, 47439984369664, 47439984955391,
ERASE, 47439984369664, 47439984955391,
STORE, 47439984369664, 47439984955391,
STORE, 47439985164288, 47439985180671,
STORE, 47439984959488, 47439985164287,
ERASE, 47439984959488, 47439985164287,
STORE, 47439984959488, 47439985164287,
ERASE, 47439985164288, 47439985180671,
STORE, 47439985164288, 47439985180671,
STORE, 47439985180672, 47439987019775,
STORE, 47439985319936, 47439987019775,
STORE, 47439985180672, 47439985319935,
ERASE, 47439985319936, 47439987019775,
STORE, 47439985319936, 47439986978815,
STORE, 47439986978816, 47439987019775,
STORE, 47439986663424, 47439986978815,
STORE, 47439985319936, 47439986663423,
ERASE, 47439985319936, 47439986663423,
STORE, 47439985319936, 47439986663423,
STORE, 47439986974720, 47439986978815,
STORE, 47439986663424, 47439986974719,
ERASE, 47439986663424, 47439986974719,
STORE, 47439986663424, 47439986974719,
STORE, 47439987003392, 47439987019775,
STORE, 47439986978816, 47439987003391,
ERASE, 47439986978816, 47439987003391,
STORE, 47439986978816, 47439987003391,
ERASE, 47439987003392, 47439987019775,
STORE, 47439987003392, 47439987019775,
STORE, 47439987019776, 47439987154943,
ERASE, 47439987019776, 47439987154943,
STORE, 47439987019776, 47439987044351,
STORE, 47439987044352, 47439987154943,
STORE, 47439987105792, 47439987154943,
STORE, 47439987044352, 47439987105791,
ERASE, 47439987044352, 47439987105791,
STORE, 47439987044352, 47439987105791,
STORE, 47439987130368, 47439987154943,
STORE, 47439987105792, 47439987130367,
ERASE, 47439987105792, 47439987130367,
STORE, 47439987105792, 47439987154943,
ERASE, 47439987105792, 47439987154943,
STORE, 47439987105792, 47439987130367,
STORE, 47439987130368, 47439987154943,
STORE, 47439987138560, 47439987154943,
STORE, 47439987130368, 47439987138559,
ERASE, 47439987130368, 47439987138559,
STORE, 47439987130368, 47439987138559,
ERASE, 47439987138560, 47439987154943,
STORE, 47439987138560, 47439987154943,
STORE, 47439987154944, 47439987175423,
ERASE, 47439987154944, 47439987175423,
STORE, 47439987154944, 47439987159039,
STORE, 47439987159040, 47439987175423,
STORE, 47439987163136, 47439987175423,
STORE, 47439987159040, 47439987163135,
ERASE, 47439987159040, 47439987163135,
STORE, 47439987159040, 47439987163135,
STORE, 47439987167232, 47439987175423,
STORE, 47439987163136, 47439987167231,
ERASE, 47439987163136, 47439987167231,
STORE, 47439987163136, 47439987175423,
ERASE, 47439987163136, 47439987175423,
STORE, 47439987163136, 47439987167231,
STORE, 47439987167232, 47439987175423,
ERASE, 47439987167232, 47439987175423,
STORE, 47439987167232, 47439987175423,
STORE, 47439987175424, 47439987183615,
ERASE, 47439986978816, 47439987003391,
STORE, 47439986978816, 47439986995199,
STORE, 47439986995200, 47439987003391,
ERASE, 47439987167232, 47439987175423,
STORE, 47439987167232, 47439987171327,
STORE, 47439987171328, 47439987175423,
ERASE, 47439987130368, 47439987138559,
STORE, 47439987130368, 47439987134463,
STORE, 47439987134464, 47439987138559,
 };
 static const unsigned long set8[] = {
STORE, 140737488347136, 140737488351231,
STORE, 140722482974720, 140737488351231,
ERASE, 140722482974720, 140737488351231,
STORE, 140722482974720, 140722482978815,
STORE, 94121505034240, 94121505206271,
ERASE, 94121505034240, 94121505206271,
STORE, 94121505034240, 94121505050623,
STORE, 94121505050624, 94121505206271,
ERASE, 94121505050624, 94121505206271,
STORE, 94121505050624, 94121505153023,
STORE, 94121505153024, 94121505193983,
STORE, 94121505193984, 94121505206271,
STORE, 47708483284992, 47708483457023,
ERASE, 47708483284992, 47708483457023,
STORE, 47708483284992, 47708483289087,
STORE, 47708483289088, 47708483457023,
ERASE, 47708483289088, 47708483457023,
STORE, 47708483289088, 47708483411967,
STORE, 47708483411968, 47708483444735,
STORE, 47708483444736, 47708483452927,
STORE, 47708483452928, 47708483457023,
STORE, 140722483142656, 140722483146751,
STORE, 140722483130368, 140722483142655,
STORE, 47708483457024, 47708483465215,
STORE, 47708483465216, 47708483473407,
STORE, 47708483473408, 47708483637247,
ERASE, 47708483473408, 47708483637247,
STORE, 47708483473408, 47708483485695,
STORE, 47708483485696, 47708483637247,
STORE, 47708483584000, 47708483637247,
STORE, 47708483485696, 47708483583999,
ERASE, 47708483485696, 47708483583999,
STORE, 47708483485696, 47708483583999,
STORE, 47708483629056, 47708483637247,
STORE, 47708483584000, 47708483629055,
ERASE, 47708483584000, 47708483629055,
STORE, 47708483584000, 47708483637247,
ERASE, 47708483584000, 47708483637247,
STORE, 47708483584000, 47708483629055,
STORE, 47708483629056, 47708483637247,
ERASE, 47708483629056, 47708483637247,
STORE, 47708483629056, 47708483637247,
STORE, 47708483637248, 47708486688767,
STORE, 47708484182016, 47708486688767,
STORE, 47708483637248, 47708484182015,
ERASE, 47708484182016, 47708486688767,
STORE, 47708484182016, 47708486467583,
STORE, 47708486467584, 47708486688767,
STORE, 47708485877760, 47708486467583,
STORE, 47708484182016, 47708485877759,
ERASE, 47708484182016, 47708485877759,
STORE, 47708484182016, 47708485877759,
STORE, 47708486463488, 47708486467583,
STORE, 47708485877760, 47708486463487,
ERASE, 47708485877760, 47708486463487,
STORE, 47708485877760, 47708486463487,
STORE, 47708486672384, 47708486688767,
STORE, 47708486467584, 47708486672383,
ERASE, 47708486467584, 47708486672383,
STORE, 47708486467584, 47708486672383,
ERASE, 47708486672384, 47708486688767,
STORE, 47708486672384, 47708486688767,
STORE, 47708486688768, 47708488527871,
STORE, 47708486828032, 47708488527871,
STORE, 47708486688768, 47708486828031,
ERASE, 47708486828032, 47708488527871,
STORE, 47708486828032, 47708488486911,
STORE, 47708488486912, 47708488527871,
STORE, 47708488171520, 47708488486911,
STORE, 47708486828032, 47708488171519,
ERASE, 47708486828032, 47708488171519,
STORE, 47708486828032, 47708488171519,
STORE, 47708488482816, 47708488486911,
STORE, 47708488171520, 47708488482815,
ERASE, 47708488171520, 47708488482815,
STORE, 47708488171520, 47708488482815,
STORE, 47708488511488, 47708488527871,
STORE, 47708488486912, 47708488511487,
ERASE, 47708488486912, 47708488511487,
STORE, 47708488486912, 47708488511487,
ERASE, 47708488511488, 47708488527871,
STORE, 47708488511488, 47708488527871,
STORE, 47708488527872, 47708488663039,
ERASE, 47708488527872, 47708488663039,
STORE, 47708488527872, 47708488552447,
STORE, 47708488552448, 47708488663039,
STORE, 47708488613888, 47708488663039,
STORE, 47708488552448, 47708488613887,
ERASE, 47708488552448, 47708488613887,
STORE, 47708488552448, 47708488613887,
STORE, 47708488638464, 47708488663039,
STORE, 47708488613888, 47708488638463,
ERASE, 47708488613888, 47708488638463,
STORE, 47708488613888, 47708488663039,
ERASE, 47708488613888, 47708488663039,
STORE, 47708488613888, 47708488638463,
STORE, 47708488638464, 47708488663039,
STORE, 47708488646656, 47708488663039,
STORE, 47708488638464, 47708488646655,
ERASE, 47708488638464, 47708488646655,
STORE, 47708488638464, 47708488646655,
ERASE, 47708488646656, 47708488663039,
STORE, 47708488646656, 47708488663039,
STORE, 47708488663040, 47708488683519,
ERASE, 47708488663040, 47708488683519,
STORE, 47708488663040, 47708488667135,
STORE, 47708488667136, 47708488683519,
STORE, 47708488671232, 47708488683519,
STORE, 47708488667136, 47708488671231,
ERASE, 47708488667136, 47708488671231,
STORE, 47708488667136, 47708488671231,
STORE, 47708488675328, 47708488683519,
STORE, 47708488671232, 47708488675327,
ERASE, 47708488671232, 47708488675327,
STORE, 47708488671232, 47708488683519,
ERASE, 47708488671232, 47708488683519,
STORE, 47708488671232, 47708488675327,
STORE, 47708488675328, 47708488683519,
ERASE, 47708488675328, 47708488683519,
STORE, 47708488675328, 47708488683519,
STORE, 47708488683520, 47708488691711,
ERASE, 47708488486912, 47708488511487,
STORE, 47708488486912, 47708488503295,
STORE, 47708488503296, 47708488511487,
ERASE, 47708488675328, 47708488683519,
STORE, 47708488675328, 47708488679423,
STORE, 47708488679424, 47708488683519,
ERASE, 47708488638464, 47708488646655,
STORE, 47708488638464, 47708488642559,
STORE, 47708488642560, 47708488646655,
 };

 static const unsigned long set9[] = {
STORE, 140737488347136, 140737488351231,
STORE, 140736427839488, 140737488351231,
ERASE, 140736427839488, 140736427839488,
STORE, 140736427839488, 140736427843583,
STORE, 94071213395968, 94071213567999,
ERASE, 94071213395968, 94071213395968,
STORE, 94071213395968, 94071213412351,
STORE, 94071213412352, 94071213567999,
ERASE, 94071213412352, 94071213412352,
STORE, 94071213412352, 94071213514751,
STORE, 94071213514752, 94071213555711,
STORE, 94071213555712, 94071213567999,
STORE, 139968410644480, 139968410816511,
ERASE, 139968410644480, 139968410644480,
STORE, 139968410644480, 139968410648575,
STORE, 139968410648576, 139968410816511,
ERASE, 139968410648576, 139968410648576,
STORE, 139968410648576, 139968410771455,
STORE, 139968410771456, 139968410804223,
STORE, 139968410804224, 139968410812415,
STORE, 139968410812416, 139968410816511,
STORE, 140736429277184, 140736429281279,
STORE, 140736429264896, 140736429277183,
STORE, 47664384352256, 47664384360447,
STORE, 47664384360448, 47664384368639,
STORE, 47664384368640, 47664384532479,
ERASE, 47664384368640, 47664384368640,
STORE, 47664384368640, 47664384380927,
STORE, 47664384380928, 47664384532479,
STORE, 47664384479232, 47664384532479,
STORE, 47664384380928, 47664384479231,
ERASE, 47664384380928, 47664384380928,
STORE, 47664384380928, 47664384479231,
STORE, 47664384524288, 47664384532479,
STORE, 47664384479232, 47664384524287,
ERASE, 47664384479232, 47664384479232,
STORE, 47664384479232, 47664384532479,
ERASE, 47664384479232, 47664384479232,
STORE, 47664384479232, 47664384524287,
STORE, 47664384524288, 47664384532479,
ERASE, 47664384524288, 47664384524288,
STORE, 47664384524288, 47664384532479,
STORE, 47664384532480, 47664387583999,
STORE, 47664385077248, 47664387583999,
STORE, 47664384532480, 47664385077247,
ERASE, 47664385077248, 47664385077248,
STORE, 47664385077248, 47664387362815,
STORE, 47664387362816, 47664387583999,
STORE, 47664386772992, 47664387362815,
STORE, 47664385077248, 47664386772991,
ERASE, 47664385077248, 47664385077248,
STORE, 47664385077248, 47664386772991,
STORE, 47664387358720, 47664387362815,
STORE, 47664386772992, 47664387358719,
ERASE, 47664386772992, 47664386772992,
STORE, 47664386772992, 47664387358719,
STORE, 47664387567616, 47664387583999,
STORE, 47664387362816, 47664387567615,
ERASE, 47664387362816, 47664387362816,
STORE, 47664387362816, 47664387567615,
ERASE, 47664387567616, 47664387567616,
STORE, 47664387567616, 47664387583999,
STORE, 47664387584000, 47664389423103,
STORE, 47664387723264, 47664389423103,
STORE, 47664387584000, 47664387723263,
ERASE, 47664387723264, 47664387723264,
STORE, 47664387723264, 47664389382143,
STORE, 47664389382144, 47664389423103,
STORE, 47664389066752, 47664389382143,
STORE, 47664387723264, 47664389066751,
ERASE, 47664387723264, 47664387723264,
STORE, 47664387723264, 47664389066751,
STORE, 47664389378048, 47664389382143,
STORE, 47664389066752, 47664389378047,
ERASE, 47664389066752, 47664389066752,
STORE, 47664389066752, 47664389378047,
STORE, 47664389406720, 47664389423103,
STORE, 47664389382144, 47664389406719,
ERASE, 47664389382144, 47664389382144,
STORE, 47664389382144, 47664389406719,
ERASE, 47664389406720, 47664389406720,
STORE, 47664389406720, 47664389423103,
STORE, 47664389423104, 47664389558271,
ERASE, 47664389423104, 47664389423104,
STORE, 47664389423104, 47664389447679,
STORE, 47664389447680, 47664389558271,
STORE, 47664389509120, 47664389558271,
STORE, 47664389447680, 47664389509119,
ERASE, 47664389447680, 47664389447680,
STORE, 47664389447680, 47664389509119,
STORE, 47664389533696, 47664389558271,
STORE, 47664389509120, 47664389533695,
ERASE, 47664389509120, 47664389509120,
STORE, 47664389509120, 47664389558271,
ERASE, 47664389509120, 47664389509120,
STORE, 47664389509120, 47664389533695,
STORE, 47664389533696, 47664389558271,
STORE, 47664389541888, 47664389558271,
STORE, 47664389533696, 47664389541887,
ERASE, 47664389533696, 47664389533696,
STORE, 47664389533696, 47664389541887,
ERASE, 47664389541888, 47664389541888,
STORE, 47664389541888, 47664389558271,
STORE, 47664389558272, 47664389578751,
ERASE, 47664389558272, 47664389558272,
STORE, 47664389558272, 47664389562367,
STORE, 47664389562368, 47664389578751,
STORE, 47664389566464, 47664389578751,
STORE, 47664389562368, 47664389566463,
ERASE, 47664389562368, 47664389562368,
STORE, 47664389562368, 47664389566463,
STORE, 47664389570560, 47664389578751,
STORE, 47664389566464, 47664389570559,
ERASE, 47664389566464, 47664389566464,
STORE, 47664389566464, 47664389578751,
ERASE, 47664389566464, 47664389566464,
STORE, 47664389566464, 47664389570559,
STORE, 47664389570560, 47664389578751,
ERASE, 47664389570560, 47664389570560,
STORE, 47664389570560, 47664389578751,
STORE, 47664389578752, 47664389586943,
ERASE, 47664389382144, 47664389382144,
STORE, 47664389382144, 47664389398527,
STORE, 47664389398528, 47664389406719,
ERASE, 47664389570560, 47664389570560,
STORE, 47664389570560, 47664389574655,
STORE, 47664389574656, 47664389578751,
ERASE, 47664389533696, 47664389533696,
STORE, 47664389533696, 47664389537791,
STORE, 47664389537792, 47664389541887,
ERASE, 47664387362816, 47664387362816,
STORE, 47664387362816, 47664387559423,
STORE, 47664387559424, 47664387567615,
ERASE, 47664384524288, 47664384524288,
STORE, 47664384524288, 47664384528383,
STORE, 47664384528384, 47664384532479,
ERASE, 94071213555712, 94071213555712,
STORE, 94071213555712, 94071213563903,
STORE, 94071213563904, 94071213567999,
ERASE, 139968410804224, 139968410804224,
STORE, 139968410804224, 139968410808319,
STORE, 139968410808320, 139968410812415,
ERASE, 47664384352256, 47664384352256,
STORE, 94071244402688, 94071244537855,
STORE, 140737488347136, 140737488351231,
STORE, 140728271503360, 140737488351231,
ERASE, 140728271503360, 140728271503360,
STORE, 140728271503360, 140728271507455,
STORE, 94410361982976, 94410362155007,
ERASE, 94410361982976, 94410361982976,
STORE, 94410361982976, 94410361999359,
STORE, 94410361999360, 94410362155007,
ERASE, 94410361999360, 94410361999360,
STORE, 94410361999360, 94410362101759,
STORE, 94410362101760, 94410362142719,
STORE, 94410362142720, 94410362155007,
STORE, 140351953997824, 140351954169855,
ERASE, 140351953997824, 140351953997824,
STORE, 140351953997824, 140351954001919,
STORE, 140351954001920, 140351954169855,
ERASE, 140351954001920, 140351954001920,
STORE, 140351954001920, 140351954124799,
STORE, 140351954124800, 140351954157567,
STORE, 140351954157568, 140351954165759,
STORE, 140351954165760, 140351954169855,
STORE, 140728272429056, 140728272433151,
STORE, 140728272416768, 140728272429055,
STORE, 47280840998912, 47280841007103,
STORE, 47280841007104, 47280841015295,
STORE, 47280841015296, 47280841179135,
ERASE, 47280841015296, 47280841015296,
STORE, 47280841015296, 47280841027583,
STORE, 47280841027584, 47280841179135,
STORE, 47280841125888, 47280841179135,
STORE, 47280841027584, 47280841125887,
ERASE, 47280841027584, 47280841027584,
STORE, 47280841027584, 47280841125887,
STORE, 47280841170944, 47280841179135,
STORE, 47280841125888, 47280841170943,
ERASE, 47280841125888, 47280841125888,
STORE, 47280841125888, 47280841179135,
ERASE, 47280841125888, 47280841125888,
STORE, 47280841125888, 47280841170943,
STORE, 47280841170944, 47280841179135,
ERASE, 47280841170944, 47280841170944,
STORE, 47280841170944, 47280841179135,
STORE, 47280841179136, 47280844230655,
STORE, 47280841723904, 47280844230655,
STORE, 47280841179136, 47280841723903,
ERASE, 47280841723904, 47280841723904,
STORE, 47280841723904, 47280844009471,
STORE, 47280844009472, 47280844230655,
STORE, 47280843419648, 47280844009471,
STORE, 47280841723904, 47280843419647,
ERASE, 47280841723904, 47280841723904,
STORE, 47280841723904, 47280843419647,
STORE, 47280844005376, 47280844009471,
STORE, 47280843419648, 47280844005375,
ERASE, 47280843419648, 47280843419648,
STORE, 47280843419648, 47280844005375,
STORE, 47280844214272, 47280844230655,
STORE, 47280844009472, 47280844214271,
ERASE, 47280844009472, 47280844009472,
STORE, 47280844009472, 47280844214271,
ERASE, 47280844214272, 47280844214272,
STORE, 47280844214272, 47280844230655,
STORE, 47280844230656, 47280846069759,
STORE, 47280844369920, 47280846069759,
STORE, 47280844230656, 47280844369919,
ERASE, 47280844369920, 47280844369920,
STORE, 47280844369920, 47280846028799,
STORE, 47280846028800, 47280846069759,
STORE, 47280845713408, 47280846028799,
STORE, 47280844369920, 47280845713407,
ERASE, 47280844369920, 47280844369920,
STORE, 47280844369920, 47280845713407,
STORE, 47280846024704, 47280846028799,
STORE, 47280845713408, 47280846024703,
ERASE, 47280845713408, 47280845713408,
STORE, 47280845713408, 47280846024703,
STORE, 47280846053376, 47280846069759,
STORE, 47280846028800, 47280846053375,
ERASE, 47280846028800, 47280846028800,
STORE, 47280846028800, 47280846053375,
ERASE, 47280846053376, 47280846053376,
STORE, 47280846053376, 47280846069759,
STORE, 47280846069760, 47280846204927,
ERASE, 47280846069760, 47280846069760,
STORE, 47280846069760, 47280846094335,
STORE, 47280846094336, 47280846204927,
STORE, 47280846155776, 47280846204927,
STORE, 47280846094336, 47280846155775,
ERASE, 47280846094336, 47280846094336,
STORE, 47280846094336, 47280846155775,
STORE, 47280846180352, 47280846204927,
STORE, 47280846155776, 47280846180351,
ERASE, 47280846155776, 47280846155776,
STORE, 47280846155776, 47280846204927,
ERASE, 47280846155776, 47280846155776,
STORE, 47280846155776, 47280846180351,
STORE, 47280846180352, 47280846204927,
STORE, 47280846188544, 47280846204927,
STORE, 47280846180352, 47280846188543,
ERASE, 47280846180352, 47280846180352,
STORE, 47280846180352, 47280846188543,
ERASE, 47280846188544, 47280846188544,
STORE, 47280846188544, 47280846204927,
STORE, 47280846204928, 47280846225407,
ERASE, 47280846204928, 47280846204928,
STORE, 47280846204928, 47280846209023,
STORE, 47280846209024, 47280846225407,
STORE, 47280846213120, 47280846225407,
STORE, 47280846209024, 47280846213119,
ERASE, 47280846209024, 47280846209024,
STORE, 47280846209024, 47280846213119,
STORE, 47280846217216, 47280846225407,
STORE, 47280846213120, 47280846217215,
ERASE, 47280846213120, 47280846213120,
STORE, 47280846213120, 47280846225407,
ERASE, 47280846213120, 47280846213120,
STORE, 47280846213120, 47280846217215,
STORE, 47280846217216, 47280846225407,
ERASE, 47280846217216, 47280846217216,
STORE, 47280846217216, 47280846225407,
STORE, 47280846225408, 47280846233599,
ERASE, 47280846028800, 47280846028800,
STORE, 47280846028800, 47280846045183,
STORE, 47280846045184, 47280846053375,
ERASE, 47280846217216, 47280846217216,
STORE, 47280846217216, 47280846221311,
STORE, 47280846221312, 47280846225407,
ERASE, 47280846180352, 47280846180352,
STORE, 47280846180352, 47280846184447,
STORE, 47280846184448, 47280846188543,
ERASE, 47280844009472, 47280844009472,
STORE, 47280844009472, 47280844206079,
STORE, 47280844206080, 47280844214271,
ERASE, 47280841170944, 47280841170944,
STORE, 47280841170944, 47280841175039,
STORE, 47280841175040, 47280841179135,
--> --------------------

--> maximum size reached

--> --------------------

Messung V0.5
C=95 H=76 G=85

¤ Dauer der Verarbeitung: 0.20 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.