Full Code of schizofreny/middle-out for AI

master 0bbe73b5375b cached
23 files
10.9 MB
230.1k tokens
77 symbols
1 requests
Download .txt
Showing preview only (517K chars total). Download the full file or copy to clipboard to get everything.
Repository: schizofreny/middle-out
Branch: master
Commit: 0bbe73b5375b
Files: 23
Total size: 10.9 MB

Directory structure:
gitextract_xmcwhvin/

├── .clang-format
├── .gitignore
├── LICENSE.md
├── Makefile
├── README.md
├── ansible-playbook.yaml
├── avx512.cpp
├── avx512.hpp
├── data/
│   ├── README.md
│   ├── ibm.data
│   ├── redis_memory.data
│   ├── usages.data
│   ├── used.data
│   └── writes.data
├── example/
│   ├── Makefile
│   └── example.cpp
├── gbench/
│   └── perf.cpp
├── gtest/
│   └── test.cpp
├── helpers.hpp
├── middleout.cpp
├── middleout.hpp
├── scalar.cpp
└── scalar.hpp

================================================
FILE CONTENTS
================================================

================================================
FILE: .clang-format
================================================
BasedOnStyle: Chromium
AccessModifierOffset: -1
AlignAfterOpenBracket: true
AlignEscapedNewlinesLeft: true
AlignOperands: true
AlignTrailingComments: true
AllowAllParametersOfDeclarationOnNextLine: false
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: Inline
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: false
AlwaysBreakBeforeMultilineStrings: true
AlwaysBreakTemplateDeclarations: true
BinPackArguments: true
BinPackParameters: false
BreakBeforeBinaryOperators: None
BreakBeforeBraces: Attach
BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: false
ColumnLimit: 100
CommentPragmas: '^ IWYU pragma:'
ConstructorInitializerAllOnOneLineOrOnePerLine: true
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DerivePointerAlignment: false
DisableFormat: false
ExperimentalAutoDetectBinPacking: false
IndentCaseLabels: true
IndentWidth: 4
IndentWrappedFunctionNames: false
KeepEmptyLinesAtTheStartOfBlocks: false
Language: Cpp
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBlockIndentWidth: 4
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: false
PenaltyBreakBeforeFirstCallParameter: 1
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 200
PointerAlignment: Left
SpaceAfterCStyleCast: false
SpaceBeforeAssignmentOperators: true
SpaceBeforeParens: ControlStatements
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 2
SpacesInAngles: false
SpacesInCStyleCastParentheses: false
SpacesInContainerLiterals: true
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: Auto
TabWidth: 4
UseTab: ForIndentation


================================================
FILE: .gitignore
================================================

# Prerequisites
*.d

# Compiled Object files
*.slo
*.lo
*.o
*.obj

# Precompiled Headers
*.gch
*.pch

# Compiled Dynamic libraries
*.so
*.dylib
*.dll

# Fortran module files
*.mod
*.smod

# Compiled Static libraries
*.lai
*.la
*.a
*.lib

# Executables
*.exe
*.out
*.app


.vscode/
test
perf
dist/*


================================================
FILE: LICENSE.md
================================================
           DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
                   Version 2, December 2004

Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>

Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long
as the name is changed.

           DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
  TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

 0. You just DO WHAT THE FUCK YOU WANT TO.

================================================
FILE: Makefile
================================================
CC = g++

###
#	COMPILE AND RUN TESTS
###
GOOGLE_TEST_LIB = gtest
CC_TEST_FLAGS = -O2 -g -Wall -Wno-strict-aliasing -fsanitize=address -D_GLIBCXX_DEBUG_PEDANTIC
LD_TEST_FLAGS = -l $(GOOGLE_TEST_LIB) -l pthread -l gtest_main

TEST_OBJECTS = gtest/test.cpp scalar.cpp
TEST_TARGET = test

BUILD_DIR = dist

test:
	$(CC) -o $(TEST_TARGET) $(TEST_OBJECTS) $(CC_TEST_FLAGS)  $(LD_TEST_FLAGS) \
	&& ./$(TEST_TARGET)

test-avx512:
	$(CC) -o $(TEST_TARGET) $(TEST_OBJECTS) avx512.cpp $(CC_TEST_FLAGS) \
	-march=skylake-avx512 $(LD_TEST_FLAGS) -D USE_AVX512 && ./$(TEST_TARGET)

###
#	COMPILE STATIC LIBS
###
CC_LIB_FLAGS = -c -O3 -s

lib:
	mkdir -p $(BUILD_DIR)
	$(CC) $(CC_LIB_FLAGS) middleout.cpp scalar.cpp helpers.hpp -march=native
	ar -rcs libmiddleout.a middleout.o scalar.o helpers.hpp.gch
	mv libmiddleout.a $(BUILD_DIR)/
	cp middleout.hpp $(BUILD_DIR)/

lib-avx512:
	mkdir -p $(BUILD_DIR)
	$(CC) $(CC_LIB_FLAGS) middleout.cpp avx512.cpp helpers.hpp -march=skylake-avx512 -D USE_AVX512
	ar -rcs libmiddleout-avx512.a middleout.o avx512.o helpers.hpp.gch
	mv libmiddleout-$(BUILD_DIR).a $(BUILD_DIR)/
	cp middleout.hpp $(BUILD_DIR)/

install-libs-example:
	cp $(BUILD_DIR)/*.a example
	cp middleout.hpp example/

clean-lib:
	-rm libmiddleout.a
	-rm libmiddleout-avx512.a
	-rm $(BUILD_DIR)/*.a

###
#	COMPILE AND RUN GOOGLE BENCHMARK TESTS
###
CC_GBENCH_FLAGS = -O3
LD_GBENCH_FLAGS = -l gtest -l benchmark -l pthread

GBENCH_OBJECTS = gbench/perf.cpp scalar.cpp
GBENCH_TARGET = perf

bench:
	$(CC) -o $(GBENCH_TARGET) $(GBENCH_OBJECTS) $(CC_GBENCH_FLAGS) -march=native $(LD_GBENCH_FLAGS)
	./$(GBENCH_TARGET)

bench-avx512:
	$(CC) -o $(GBENCH_TARGET) $(GBENCH_OBJECTS) avx512.cpp $(CC_GBENCH_FLAGS) -march=skylake-avx512 $(LD_GBENCH_FLAGS) -D USE_AVX512
	./$(GBENCH_TARGET)

#aliases for bench
perf:
	make bench

perf-avx512:
	make bench-avx512

clean:
	-rm *.o
	-rm *.a
	-rm *.gch
	-rm gtest/*.o
	-rm gbench/*.o
	-rm $(BUILD_DIR) -r
	-rm $(TEST_TARGET)
	-rm $(GBENCH_TARGET)

.PHONY: clean test test-avx512 lib lib-avx512 clean-lib bench bench-avx512 perf perf-avx512

================================================
FILE: README.md
================================================
# Middle-out Compression for Time-series Data

We all know, how the Middle-out compression works at the HBO show [1], but how do we actually apply this to the time-series data?
Take a look at the following schema. There is an input vector of a data. This vector is divided to Middle-out segments. For simplicity, in the image there are only four of a segments, but compression actually uses eight. This is because the AVX-512 vector instructions can process up to 8 doubles at once. If we used a single precision numbers, then we’d have 16 Middle-out segments and proceed 16 elements at a time.
The first elements of each segment (denoted by blue) are referencing values. These values are stored as-is in the front of a compressed data.

![Middle-out overview](/images/middle-out-overview.svg)

As long as we have multiple referencing points, we can compute diffs between the following values in parallel. That allows us to iterate through all Middle-out segments simultaneously, in the same block of the SIMD instructions. Within each iteration, the current values are XORed with the previous ones and the results of this operation are stored in one data block. 
If there is a reminder of the division of the length of the input vector by the count of Middle-out blocks, values from that reminder are stored uncompressed at the end of compressed data.
Of course the uncompressed header and footer add some space overhead, but we assume  that the overhead would be amortized among at least a few thousands values.

![Middle-out data block](/images/middle-out-data-block.svg)

Each data block starts with a bit mask determining what values are the same as the previous ones. If the corresponding bit is set, then we know that the value didn’t change. If all of the bits are set, no further information is stored - all values are the same as the previous ones. In that case, we are able to store an unchanged value in just single bit.
Next, we store the right offsets (trailing zeros) rounded down to bytes. As long as we are addressing whole bytes, we need only 3 bits to store that offset. Only the offsets respective to the changed values are stored. Then the max length (within this block) of the non-zero XORed value is stored. This length holds bytes as well, and we know the max length could not be 0;  that would mean all the values are the same as the previous ones and we wouldn't store this information at all. Hence we need to store only lengths from 1 to 8 that can be stored in 3 bits. We store length only once per block, because we assume that all compressed data would have, in general, the same characteristics, i.e. changing by approximately the same value. All these values encoded in 3 bits (offsets and length) are conjoined and an optional padding is inserted if needed to reach the byte boundary.
Lastly, the XORs parts are stored at the end of the the data block.

## Scalar vs AVX-512 Implementation
This repository contains two implementations. The first is scalar implementation targeting pre-AVX-512 CPUs. Second implmementation is written in AVX-512 intrinsics and offers great speed up over the scalar implementation. The vectorized implementation can be build with `make` targets suffixed `-avx512`.

## Target Platforms
Both implementations in this repo targetting x86 (little endian). Works with `g++` compiler version **7.2+** in the Unix ecosystem.

## Performance
Throughput is measured on a single core of Skylake-X Xeon running at 2.0 GHz.
Compress ratios on example datasets vary from 1.3 to 3.3.

|            | Scalar                | AVX-512        |
|------------|-----------------------|----------------|
| Compress   | 0.7 - 1.7 GB/s        | 2.3 - 2.5 GB/s |
| Decompress | 2.3 - 2.9 GB/s        | 3.4 - 4.8 GB/s |

[More informations](https://medium.com/@vaclav.loffelmann/the-worlds-first-middle-out-compression-for-time-series-data-part-1-1e5ad5312757 "The World’s First Middle-Out Compression for Time-series Data — Part 1").

# Compile libs

```
make lib
```
or 
```
make lib-avx512
```

### Compile and Run Tests
```
make test
```
or
```
make test-avx512
```

### Compile and Run Performance Tests
```
make perf
```
or
```
make perf-avx512
```

### Compile and Run Example
```
make lib ; make lib-avx512
make install-libs-example
cd example
make
```

### Example code
```c++
#include "middleout.hpp" 

vector<double>& dataIn = ...data...;
size_t count = dataIn.size();

// COMPRESSION
vector<char> compressed(middleout::maxCompressedSize(count));
size_t compressedLength = middleout::compress(dataIn, compressed);
// "compressed" contains compressed data between 0 and compressedLength th element

// DECOMPRESSION
vector<double> dataOut(count);
middleout::decompress(compressed, count, dataOut);
// "dataOut" contains decompressed data

```

## Dev dependencies

*  [Google Test](https://github.com/google/googletest)
*  [Google Benchmark](https://github.com/google/benchmark)

### Debian/Ubuntu
install gtest
```
apt install libgtest-dev build-essential cmake
cd /usr/src/gtest
cmake .
make -j4
cp *.a /usr/lib
```

install google benchmark
```
cd /usr/lib
git clone https://github.com/google/benchmark.git
cd benchmark
cmake . -DCMAKE_BUILD_TYPE=Release
make -j4
make install
```


## License
WTFPL version 2

## References

[1] https://vimeo.com/97107551



================================================
FILE: ansible-playbook.yaml
================================================
---
- hosts: middleout
  become: yes
  become_user: root
  tasks:
    - name: install required sw
      apt: name={{item}} state=installed
      with_items:
        - cmake
        - build-essential
    - name: apt install libgtest-dev source code
      apt: name=libgtest-dev
    - name: compile gtest
      shell: |
        cmake .
        make -j2
        cp *.a /usr/lib
      args:
        chdir: /usr/src/gtest
    - name: install google benchmark
      shell: |
        git clone https://github.com/google/benchmark.git
        cd benchmark
        cmake . -DCMAKE_BUILD_TYPE=Release
        make -j2
        make install
      args:
        chdir: /usr/lib




================================================
FILE: avx512.cpp
================================================
/*

Copyright (c) 2017, Schizofreny s.r.o - info@schizofreny.com
All rights reserved.

See LICENSE.md file

*/

#include "avx512.hpp"
#include "helpers.hpp"
#include <algorithm>
#include <cstdint>
#include <vector>
#include <immintrin.h>
#include <memory>

namespace middleout {

template class Avx52<double>;
template class Avx52<int64_t>;
template class Avx52<uint64_t>;

template <typename T>
Avx52<T>::Avx52() {}

template <typename T>
std::unique_ptr<std::vector<char>> Avx52<T>::compressSimple(std::vector<T>& data) {
	std::unique_ptr<std::vector<char>> compressed(
	    new std::vector<char>(Avx52<T>::maxCompressedSize(data.size())));
	size_t size = Avx52<T>::compress(data, *compressed);
	compressed->resize(size);
	compressed->shrink_to_fit();
	return compressed;
}

/**
 * return length in bytes within left zeros and right zeros
 */
inline __m512i byteLength(__mmask8 mask, __m512i leftOffset, __m512i rightOffset) {
	// return 8 - (leftOffset + rightOffset);
	__m512i baseLength = _mm512_set1_epi64(8);
	__m512i offsetsSum = _mm512_add_epi64(leftOffset, rightOffset);
	return _mm512_maskz_sub_epi64(mask, baseLength, offsetsSum);
}
/**
 * From number of bits, computes number of bytes (bytes). E.g. bits/8
 */
inline __m512i byteRound(__m512i x) {
	//	return x >> 3;
	return _mm512_srli_epi64(x, 3);
}

/**
 * Compresses offsets. Skip offsets by mask. Using 3bits per one offset
 */
inline int compressOffsets(__mmask8 notSame, __m512i offsets) {
	// shift each offset to correct position
	__m512i compressed = _mm512_maskz_compress_epi64(notSame, offsets);
	// shift within one vector to final position
	// skip first right 3 bits for maxLength
	__m512i positioned =
	    _mm512_sllv_epi64(compressed, _mm512_setr_epi64(3, 6, 9, 12, 15, 18, 21, 24));
	// combine positioned data with OR
	return (int)_mm512_reduce_or_epi64(positioned);
}

/**
 * Reverses bytes within elements of vector
 */
inline __m512i byte_reverse_within_epi64(__m512i a) {
	// set *EPI16* positions for permutations
	__m512i idx = _mm512_set_epi32(28 << 16 | 29, 30 << 16 | 31,  //
	                               24 << 16 | 25, 26 << 16 | 27,  //
	                               20 << 16 | 21, 22 << 16 | 23,  //
	                               16 << 16 | 17, 18 << 16 | 19,  //
	                               12 << 16 | 13, 14 << 16 | 15,  //
	                               8 << 16 | 9, 10 << 16 | 11,    //
	                               4 << 16 | 5, 6 << 16 | 7,      //
	                               0 << 16 | 1, 2 << 16 | 3);

	// in g++ set_epi16 is not defined
	// __m512i idx = _mm512_set_epi16(28, 29, 30, 31,  //
	//                                24, 25, 26, 27,  //
	//                                20, 21, 22, 23,  //
	//                                16, 17, 18, 19,  //
	//                                12, 13, 14, 15,  //
	//                                8, 9, 10, 11,    //
	//                                4, 5, 6, 7,      //
	//                                0, 1, 2, 3);

	// 2var because "1var" does not exists
	// permute double bytes
	__m512i permuted16 = _mm512_permutex2var_epi16(a, idx, a);
	// swap bytes within epi16
	__m512i right = _mm512_srli_epi16(permuted16, 8);
	__m512i left = _mm512_slli_epi16(permuted16, 8);

	// combine swaps
	return _mm512_or_epi32(right, left);
}

/**
 * Comress block of data
 */
template <typename T>
inline void compressBlock(std::vector<T>& data,
                          std::vector<char>& output,
                          size_t blockSize,  // size of one middle-out block
                          size_t* outputIndex,
                          const size_t i,        // position within middle-out block
                          const __m256i vindex,  // indexes within middle-out block
                          __m512i* prev) {
	__m512i curr = _mm512_i32gather_epi64(vindex, &data[i], 8);

	__m512i xored = _mm512_xor_epi64(*prev, curr);
	__mmask8 notSame = _mm512_cmp_epi64_mask(xored, _mm512_set1_epi64(0), _MM_CMPINT_NE);

	// store "not same" metadata
	output[(*outputIndex)++] = ~notSame;

	// test if whole mask is zeros
	if (notSame == 0) {
		// skip if all values are the same as previous
		return;
	}

	// computes 1s in mask - number of different values
	int notSameCount = __builtin_popcount(notSame);

	__m512i leadingZeros = _mm512_maskz_lzcnt_epi64(notSame, xored);
	__m512i trailingZeros = _mm512_maskz_lzcnt_epi64(notSame, byte_reverse_within_epi64(xored));

	__m512i leftOffsetBytes = byteRound(leadingZeros);
	__m512i rightOffsetBytes = byteRound(trailingZeros);

	__m512i lengthBytes = byteLength(notSame, leftOffsetBytes, rightOffsetBytes);

	uint8_t maxLength = (uint8_t)_mm512_reduce_max_epi64(lengthBytes);

	// right bytes offset * 8
	__m512i shiftsBitsFromRight = _mm512_slli_epi64(rightOffsetBytes, 3);
	// align non-zero xored part to right
	__m512i shiftedXored = _mm512_srlv_epi64(xored, shiftsBitsFromRight);

	int* outAsInts = reinterpret_cast<int*>(&output[*outputIndex]);
	// store offsets and max length
	// -1 becasue we need to store only values 1-8, so 3 bits are enought
	outAsInts[0] = compressOffsets(notSame, rightOffsetBytes) | (maxLength - 1);

	// +1 because first 3 bits are maxLength
	*outputIndex += getBytesLengthOfOffsets(notSameCount + 1);

	// maxLength * position
	__m512i storeBase =
	    _mm512_mullo_epi64(_mm512_set1_epi64(maxLength), _mm512_setr_epi64(0, 1, 2, 3, 4, 5, 6, 7));

	// compress within vector - store is done in strong order (documented behavior)
	// compression is done by data overlapping
	__m512i compressedXoredShifted = _mm512_maskz_compress_epi64(notSame, shiftedXored);
	// store data
	_mm512_i64scatter_epi64(&output[*outputIndex], storeBase, compressedXoredShifted, 1);

	// // shift output data offsets
	*outputIndex += notSameCount * maxLength;

	// preserve previous data in vector register
	*prev = curr;
}

/*

Middle-out compression

*/
template <typename T>
size_t Avx52<T>::compress(std::vector<T>& data, std::vector<char>& output) {
	if (data.size() <= MIN_DATA_SIZE_COMPRESSION_TRESHOLD) {
		// not enough data to compress
		return doNotCompressTheData(data, output);
	}

	// skip first 8 init values
	size_t outputIndex = sizeof(T) * VECTOR_SIZE;
	// "middle-out" data block size
	size_t blockSize = data.size() / VECTOR_SIZE;
	// just copy init reference values
	fillStart(data, output, blockSize);

	__m256i vindex = _mm256_setr_epi32(0, 1, 2, 3, 4, 5, 6, 7);
	vindex = _mm256_mullo_epi32(vindex, _mm256_set1_epi32(blockSize));

	__m512i prev = _mm512_i32gather_epi64(vindex, &data[0], 8);

	// main compression loop
	for (size_t i = 1; i < blockSize; i += 1) {
		compressBlock(data, output, blockSize, &outputIndex, i, vindex, &prev);
	}

	// write rest data without any compression
	for (size_t i = blockSize * VECTOR_SIZE; i < data.size(); i++) {
		T* outAsLongs = reinterpret_cast<T*>(&output[outputIndex]);
		outAsLongs[0] = data[i];
		outputIndex += sizeof(T);
	}

	// write compress algorithm version and datatype constant
	output[outputIndex++] = 0x7E;  //== 0b01111110

	// to avoid access to invalid memory on decompression
	return outputIndex + 6;
}

//
// DECOMPRESSION
//
template <typename T>
inline void decompressBlock(std::vector<char>& input,
                            size_t inputElements,
                            std::vector<T>& data,
                            size_t* inputIndex,      // position within input data
                            const size_t blockSize,  // size of middle-out block
                            const size_t i,          // position within block
                            const __m256i vindex,    // vector of output data indexes
                            __m512i* prev) {
	// read mask of same values
	uint8_t sameMask = input[(*inputIndex)++];

	if (sameMask == 0b11111111) {
		// all values are the same as previous ones
		// simple store prev elements
		_mm512_i32scatter_epi64(&data[i], vindex, *prev, 8);
		return;
	}

	__mmask8 notSameMask = ~sameMask;

	// read unaligned offsets, where offset = number of empty bytes from right in XORed value
	uint32_t compresedOffsetsAndMaxLength = reinterpret_cast<uint32_t*>(&input[*inputIndex])[0];
	// +1 because only 3 bits are stored and valid lengths are 1-8
	uint8_t maxLength = (compresedOffsetsAndMaxLength & 0b111) + 1;

	// count of 1s in mask
	int sameCount = __builtin_popcount(sameMask);
	int notSameCount = 8 - sameCount;

	// +1 because first 3 bits are maxLength
	*inputIndex += getBytesLengthOfOffsets(notSameCount + 1);

	__m256i decompressOffsets =
	    _mm256_maskz_expand_epi32(notSameMask, _mm256_setr_epi32(0, 1, 2, 3, 4, 5, 6, 7));
	__m256i readShifts = _mm256_mullo_epi32(_mm256_set1_epi32(maxLength), decompressOffsets);

	__m512i toXor =
	    _mm512_mask_i32gather_epi64(*prev, notSameMask, readShifts, &input[*inputIndex], 1);

	// expand offsets to each positon within offsets vector
	__m512i offsets = _mm512_set1_epi64(compresedOffsetsAndMaxLength);
	// zero other offsets
	offsets = _mm512_and_epi64(offsets, _mm512_setr_epi64(0b111000,                      //
	                                                      0b111000000,                   //
	                                                      0b111000000000,                //
	                                                      0b111000000000000,             //
	                                                      0b111000000000000000,          //
	                                                      0b111000000000000000000,       //
	                                                      0b111000000000000000000000,    //
	                                                      0b111000000000000000000000000  //
	                                                      ));
	// set offsets back to right in vector elemet
	offsets = _mm512_srlv_epi64(offsets, _mm512_setr_epi64(3, 6, 9, 12, 15, 18, 21, 24));
	// get offsets to positions corresponding with compressed values
	offsets = _mm512_maskz_expand_epi64(notSameMask, offsets);
	// offset *8
	offsets = _mm512_slli_epi64(offsets, 3);
	toXor = clearTopBits(toXor, (64 - 8 * maxLength));

	// position to xor
	toXor = _mm512_sllv_epi64(toXor, offsets);
	__m512i xored = _mm512_mask_xor_epi64(*prev, notSameMask, *prev, toXor);

	_mm512_i32scatter_epi64(&data[i], vindex, xored, 8);

	*inputIndex += (sizeof(T) - sameCount) * maxLength;
	*prev = xored;
}

template <typename T>
void Avx52<T>::decompress(std::vector<char>& input, size_t inputElements, std::vector<T>& data) {
	// not enough data to compress
	if (inputElements <= MIN_DATA_SIZE_COMPRESSION_TRESHOLD) {
		return doNotDecompressTheData(input, inputElements, data);
	}

	//"middle-out" block size
	size_t blockSize = inputElements / VECTOR_SIZE;
	// copy first ref. values
	for (size_t i = 0; i < VECTOR_SIZE; i++) {
		data[blockSize * i] = (reinterpret_cast<T*>(input.data()))[i];
	}

	// skip first 8 init values
	size_t inputIndex = sizeof(T) * VECTOR_SIZE;

	// precompute vindex
	__m256i vindex = _mm256_setr_epi32(0, 1, 2, 3, 4, 5, 6, 7);
	vindex = _mm256_mullo_epi32(vindex, _mm256_set1_epi32(blockSize));

	__m512i prev = _mm512_loadu_si512(&input[0]);

	// main decompression loop
	for (size_t i = 1; i < blockSize; i += 1) {
		decompressBlock(input, inputElements, data, &inputIndex, blockSize, i, vindex, &prev);
	}

	// copy rest of data (uncompressed)
	for (size_t i = blockSize * VECTOR_SIZE; i < inputElements; i++) {
		data[i] = (reinterpret_cast<T*>(&input[inputIndex]))[0];
		inputIndex += sizeof(T);
	}
}

}  // end namespace middleout

================================================
FILE: avx512.hpp
================================================
/*

Copyright (c) 2017, Schizofreny s.r.o - info@schizofreny.com
All rights reserved.

See LICENSE.md file

*/

#include <vector>
#include <cstddef>
#include <type_traits>
#include <memory>

#ifndef AVX52_H
#define AVX52_H

namespace middleout {

template <typename T>

class Avx52 {
	static_assert(sizeof(T) == 8, "Must use datatype with legth of 8 bytes.");

   public:
	Avx52();

	static std::unique_ptr<std::vector<char>> compressSimple(std::vector<T>& data);

	static size_t compress(std::vector<T>& data, std::vector<char>& output);

	static void decompress(std::vector<char>& input, size_t itemsCount, std::vector<T>& data);

	static size_t maxCompressedSize(size_t count) {
		size_t blockCount = count / 8;
		// 8*8            : init reference values
		// 5*blockClount  : max size of block headers
		// 8*8*blockCount : max size of xored data: 8 bytes * 8 values
		// 8*(count%8)    : uncompressed rest of values
		return 8 * 8 + blockCount * 5 + 8 * 8 * blockCount + 8 * (count % 8);
	}
};

}  // end namespace middleout

#endif /* AVX52_H */

================================================
FILE: data/README.md
================================================
File ibm.data contains minute stock data. Rest of files were generated by the https://github.com/influxdata/influxdb-comparisons/ tool.

================================================
FILE: data/ibm.data
================================================
[File too large to display: 10.4 MB]

================================================
FILE: data/redis_memory.data
================================================
8589934592
8589934592
8589934592
8589934592
8589934644
8589934640
8589934642
8589934643
8589934693
8589934691
8589934692
8589934693
8589934743
8589934740
8589934741
8589934744
8589934793
8589934791
8589934790
8589934795
8589934842
8589934842
8589934841
8589934845
8589934893
8589934892
8589934890
8589934894
8589934940
8589934943
8589934938
8589934943
8589934989
8589934991
8589934987
8589934993
8589935038
8589935043
8589935036
8589935044
8589935090
8589935096
8589935084
8589935094
8589935139
8589935144
8589935135
8589935142
8589935187
8589935195
8589935183
8589935192
8589935237
8589935243
8589935232
8589935242
8589935287
8589935293
8589935281
8589935292
8589935337
8589935343
8589935331
8589935342
8589935388
8589935394
8589935381
8589935391
8589935438
8589935446
8589935431
8589935441
8589935487
8589935495
8589935483
8589935492
8589935538
8589935544
8589935533
8589935543
8589935588
8589935593
8589935582
8589935595
8589935639
8589935642
8589935634
8589935646
8589935689
8589935693
8589935684
8589935695
8589935738
8589935744
8589935735
8589935745
8589935790
8589935795
8589935785
8589935793
8589935839
8589935845
8589935834
8589935844
8589935889
8589935894
8589935883
8589935893
8589935938
8589935945
8589935933
8589935945
8589935987
8589935993
8589935983
8589935995
8589936036
8589936043
8589936035
8589936046
8589936086
8589936092
8589936085
8589936094
8589936136
8589936143
8589936135
8589936144
8589936187
8589936193
8589936184
8589936193
8589936238
8589936244
8589936235
8589936243
8589936288
8589936294
8589936286
8589936293
8589936338
8589936344
8589936337
8589936343
8589936388
8589936395
8589936385
8589936394
8589936438
8589936444
8589936436
8589936444
8589936487
8589936492
8589936486
8589936494
8589936537
8589936541
8589936535
8589936543
8589936589
8589936593
8589936585
8589936595
8589936637
8589936643
8589936633
8589936643
8589936686
8589936692
8589936683
8589936695
8589936736
8589936742
8589936731
8589936746
8589936785
8589936792
8589936781
8589936796
8589936836
8589936843
8589936832
8589936847
8589936886
8589936895
8589936882
8589936896
8589936937
8589936945
8589936931
8589936943
8589936987
8589936996
8589936980
8589936992
8589937039
8589937045
8589937030
8589937042
8589937089
8589937095
8589937079
8589937090
8589937139
8589937145
8589937130
8589937140
8589937188
8589937196
8589937179
8589937191
8589937237
8589937245
8589937229
8589937239
8589937287
8589937296
8589937278
8589937287
8589937336
8589937346
8589937329
8589937336
8589937387
8589937396
8589937381
8589937387
8589937437
8589937445
8589937430
8589937437
8589937488
8589937493
8589937480
8589937488
8589937537
8589937546
8589937529
8589937538
8589937588
8589937597
8589937579
8589937586
8589937636
8589937646
8589937628
8589937636
8589937684
8589937696
8589937678
8589937686
8589937735
8589937746
8589937729
8589937736
8589937784
8589937796
8589937780
8589937785
8589937834
8589937846
8589937830
8589937834
8589937884
8589937897
8589937882
8589937886
8589937936
8589937946
8589937932
8589937937
8589937986
8589937995
8589937983
8589937987
8589938036
8589938045
8589938033
8589938038
8589938086
8589938096
8589938083
8589938088
8589938136
8589938145
8589938131
8589938139
8589938186
8589938194
8589938181
8589938188
8589938235
8589938246
8589938230
8589938239
8589938285
8589938296
8589938279
8589938289
8589938335
8589938347
8589938326
8589938340
8589938387
8589938398
8589938376
8589938390
8589938438
8589938448
8589938427
8589938438
8589938486
8589938497
8589938477
8589938489
8589938535
8589938546
8589938528
8589938539
8589938586
8589938596
8589938577
8589938588
8589938637
8589938646
8589938627
8589938636
8589938687
8589938697
8589938676
8589938687
8589938738
8589938749
8589938726
8589938736
8589938789
8589938800
8589938776
8589938784
8589938839
8589938849
8589938826
8589938834
8589938890
8589938899
8589938877
8589938883
8589938939
8589938950
8589938927
8589938933
8589938989
8589938999
8589938977
8589938983
8589939039
8589939050
8589939027
8589939031
8589939090
8589939101
8589939078
8589939081
8589939141
8589939151
8589939130
8589939131
8589939190
8589939200
8589939179
8589939181
8589939239
8589939251
8589939228
8589939231
8589939289
8589939301
8589939278
8589939282
8589939340
8589939351
8589939327
8589939334
8589939388
8589939401
8589939377
8589939385
8589939437
8589939452
8589939426
8589939435
8589939488
8589939501
8589939476
8589939484
8589939536
8589939549
8589939527
8589939531
8589939585
8589939599
8589939577
8589939583
8589939635
8589939650
8589939626
8589939633
8589939685
8589939700
8589939677
8589939682
8589939734
8589939749
8589939729
8589939732
8589939784
8589939801
8589939779
8589939782
8589939835
8589939850
8589939830
8589939832
8589939883
8589939899
8589939879
8589939883
8589939933
8589939947
8589939929
8589939933
8589939984
8589939996
8589939978
8589939984
8589940034
8589940045
8589940027
8589940034
8589940083
8589940094
8589940078
8589940084
8589940132
8589940145
8589940128
8589940135
8589940181
8589940193
8589940178
8589940186
8589940231
8589940245
8589940230
8589940236
8589940280
8589940295
8589940279
8589940285
8589940330
8589940344
8589940329
8589940335
8589940379
8589940394
8589940378
8589940386
8589940430
8589940443
8589940428
8589940435
8589940481
8589940493
8589940478
8589940487
8589940533
8589940542
8589940528
8589940537
8589940584
8589940592
8589940577
8589940586
8589940634
8589940642
8589940627
8589940635
8589940683
8589940692
8589940678
8589940685
8589940735
8589940743
8589940728
8589940735
8589940783
8589940795
8589940778
8589940786
8589940831
8589940846
8589940827
8589940836
8589940880
8589940897
8589940879
8589940887
8589940930
8589940947
8589940930
8589940937
8589940980
8589940997
8589940981
8589940986
8589941030
8589941047
8589941031
8589941036
8589941081
8589941098
8589941079
8589941087
8589941133
8589941147
8589941130
8589941137
8589941181
8589941198
8589941181
8589941187
8589941230
8589941250
8589941231
8589941237
8589941281
8589941301
8589941281
8589941288
8589941330
8589941350
8589941334
8589941339
8589941382
8589941399
8589941385
8589941389
8589941432
8589941449
8589941435
8589941439
8589941483
8589941499
8589941485
8589941489
8589941534
8589941548
8589941534
8589941539
8589941585
8589941598
8589941585
8589941591
8589941634
8589941650
8589941633
8589941641
8589941685
8589941702
8589941681
8589941692
8589941737
8589941752
8589941731
8589941744
8589941787
8589941802
8589941782
8589941793
8589941837
8589941851
8589941831
8589941844
8589941886
8589941900
8589941882
8589941893
8589941936
8589941950
8589941933
8589941944
8589941987
8589941999
8589941984
8589941993
8589942037
8589942048
8589942035
8589942043
8589942088
8589942097
8589942086
8589942092
8589942139
8589942147
8589942135
8589942142
8589942189
8589942198
8589942186
8589942193
8589942240
8589942250
8589942237
8589942243
8589942291
8589942301
8589942287
8589942295
8589942341
8589942353
8589942336
8589942346
8589942389
8589942401
8589942386
8589942396
8589942439
8589942450
8589942435
8589942447
8589942488
8589942499
8589942486
8589942496
8589942538
8589942550
8589942535
8589942546
8589942591
8589942600
8589942585
8589942597
8589942640
8589942652
8589942636
8589942646
8589942691
8589942702
8589942686
8589942696
8589942741
8589942753
8589942736
8589942747
8589942792
8589942803
8589942787
8589942796
8589942841
8589942853
8589942837
8589942846
8589942893
8589942903
8589942886
8589942896
8589942941
8589942952
8589942937
8589942947
8589942992
8589943002
8589942988
8589942997
8589943041
8589943052
8589943038
8589943047
8589943090
8589943101
8589943088
8589943097
8589943141
8589943150
8589943137
8589943147
8589943190
8589943202
8589943185
8589943197
8589943239
8589943253
8589943235
8589943249
8589943289
8589943304
8589943285
8589943298
8589943339
8589943355
8589943336
8589943349
8589943389
8589943405
8589943388
8589943398
8589943440
8589943454
8589943437
8589943447
8589943489
8589943505
8589943486
8589943497
8589943538
8589943554
8589943537
8589943547
8589943587
8589943604
8589943588
8589943598
8589943636
8589943655
8589943637
8589943647
8589943686
8589943704
8589943687
8589943698
8589943736
8589943755
8589943735
8589943748
8589943785
8589943805
8589943786
8589943796
8589943835
8589943855
8589943837
8589943845
8589943886
8589943906
8589943888
8589943896
8589943937
8589943956
8589943938
8589943947
8589943986
8589944006
8589943987
8589943997
8589944035
8589944055
8589944039
8589944045
8589944086
8589944107
8589944088
8589944095
8589944136
8589944157
8589944138
8589944144
8589944187
8589944207
8589944190
8589944193
8589944238
8589944257
8589944240
8589944243
8589944288
8589944306
8589944291
8589944293
8589944338
8589944356
8589944341
8589944344
8589944389
8589944406
8589944390
8589944393
8589944438
8589944456
8589944440
8589944443
8589944487
8589944505
8589944490
8589944495
8589944538
8589944554
8589944540
8589944545
8589944587
8589944605
8589944591
8589944596
8589944636
8589944655
8589944642
8589944647
8589944687
8589944706
8589944692
8589944696
8589944738
8589944756
8589944740
8589944746
8589944788
8589944806
8589944791
8589944797
8589944839
8589944855
8589944841
8589944846
8589944889
8589944904
8589944890
8589944897
8589944939
8589944953
8589944939
8589944947
8589944987
8589945004
8589944991
8589944995
8589945036
8589945054
8589945040
8589945045
8589945085
8589945103
8589945090
8589945095
8589945135
8589945154
8589945140
8589945147
8589945184
8589945204
8589945190
8589945196
8589945233
8589945254
8589945239
8589945247
8589945284
8589945304
8589945289
8589945295
8589945336
8589945354
8589945338
8589945347
8589945386
8589945402
8589945388
8589945398
8589945437
8589945449
8589945437
8589945447
8589945487
8589945497
8589945488
8589945498
8589945535
8589945547
8589945538
8589945550
8589945587
8589945595
8589945589
8589945599
8589945637
8589945644
8589945640
8589945650
8589945688
8589945695
8589945688
8589945701
8589945738
8589945744
8589945738
8589945751
8589945789
8589945794
8589945788
8589945799
8589945840
8589945845
8589945838
8589945848
8589945890
8589945896
8589945889
8589945898
8589945939
8589945944
8589945939
8589945948
8589945989
8589945994
8589945988
8589945999
8589946038
8589946044
8589946038
8589946049
8589946091
8589946095
8589946085
8589946099
8589946140
8589946144
8589946134
8589946149
8589946192
8589946194
8589946184
8589946199
8589946243
8589946241
8589946234
8589946249
8589946294
8589946290
8589946285
8589946298
8589946343
8589946341
8589946334
8589946348
8589946393
8589946392
8589946384
8589946397
8589946443
8589946441
8589946435
8589946446
8589946493
8589946491
8589946483
8589946496
8589946543
8589946540
8589946532
8589946549
8589946592
8589946590
8589946582
8589946598
8589946642
8589946641
8589946631
8589946650
8589946692
8589946692
8589946681
8589946700
8589946742
8589946742
8589946732
8589946750
8589946792
8589946791
8589946783
8589946798
8589946841
8589946842
8589946830
8589946850
8589946889
8589946891
8589946880
8589946900
8589946938
8589946942
8589946929
8589946950
8589946989
8589946991
8589946980
8589946999
8589947038
8589947042
8589947030
8589947049
8589947088
8589947093
8589947079
8589947100
8589947135
8589947143
8589947130
8589947151
8589947185
8589947193
8589947179
8589947201
8589947234
8589947242
8589947228
8589947250
8589947283
8589947290
8589947280
8589947299
8589947334
8589947339
8589947330
8589947350
8589947383
8589947389
8589947381
8589947399
8589947435
8589947439
8589947431
8589947450
8589947486
8589947489
8589947480
8589947499
8589947537
8589947538
8589947531
8589947549
8589947588
8589947587
8589947579
8589947599
8589947639
8589947637
8589947628
8589947649
8589947688
8589947687
8589947677
8589947697
8589947739
8589947737
8589947728
8589947747
8589947786
8589947787
8589947778
8589947798
8589947836
8589947837
8589947828
8589947849
8589947887
8589947888
8589947878
8589947902
8589947938
8589947939
8589947928
8589947953
8589947988
8589947988
8589947979
8589948004
8589948039
8589948038
8589948029
8589948054
8589948090
8589948088
8589948081
8589948103
8589948139
8589948137
8589948131
8589948153
8589948189
8589948189
8589948180
8589948204
8589948239
8589948238
8589948230
8589948255
8589948289
8589948288
8589948280
8589948305
8589948339
8589948337
8589948329
8589948354
8589948389
8589948389
8589948381
8589948404
8589948440
8589948439
8589948431
8589948456
8589948490
8589948489
8589948479
8589948505
8589948540
8589948539
8589948529
8589948555
8589948590
8589948589
8589948579
8589948604
8589948639
8589948639
8589948629
8589948655
8589948689
8589948689
8589948680
8589948707
8589948738
8589948740
8589948729
8589948756
8589948788
8589948790
8589948779
8589948804
8589948837
8589948839
8589948831
8589948852
8589948888
8589948890
8589948880
8589948902
8589948939
8589948940
8589948930
8589948953
8589948987
8589948992
8589948981
8589949003
8589949037
8589949041
8589949031
8589949051
8589949086
8589949090
8589949081
8589949102
8589949135
8589949140
8589949131
8589949152
8589949188
8589949191
8589949182
8589949203
8589949236
8589949240
8589949232
8589949254
8589949286
8589949291
8589949280
8589949305
8589949335
8589949341
8589949330
8589949355
8589949387
8589949390
8589949381
8589949406
8589949438
8589949440
8589949430
8589949456
8589949488
8589949489
8589949481
8589949506
8589949537
8589949540
8589949531
8589949556
8589949588
8589949589
8589949580
8589949606
8589949638
8589949640
8589949630
8589949658
8589949688
8589949690
8589949681
8589949709
8589949738
8589949740
8589949730
8589949757
8589949789
8589949789
8589949780
8589949807
8589949840
8589949839
8589949829
8589949857
8589949889
8589949891
8589949881
8589949907
8589949940
8589949941
8589949928
8589949957
8589949989
8589949992
8589949979
8589950007
8589950039
8589950044
8589950028
8589950058
8589950089
8589950094
8589950077
8589950105
8589950140
8589950143
8589950127
8589950154
8589950191
8589950193
8589950176
8589950206
8589950240
8589950244
8589950226
8589950256
8589950291
8589950295
8589950275
8589950306
8589950341
8589950345
8589950326
8589950358
8589950391
8589950394
8589950376
8589950408
8589950440
8589950443
8589950425
8589950460
8589950490
8589950493
8589950476
8589950509
8589950540
8589950542
8589950527
8589950561
8589950588
8589950593
8589950577
8589950610
8589950637
8589950641
8589950627
8589950660
8589950689
8589950691
8589950678
8589950709
8589950740
8589950741
8589950728
8589950760
8589950792
8589950789
8589950777
8589950808
8589950842
8589950838
8589950828
8589950859
8589950892
8589950887
8589950879
8589950908
8589950941
8589950937
8589950931
8589950957
8589950990
8589950988
8589950982
8589951007
8589951041
8589951040
8589951031
8589951057
8589951090
8589951091
8589951081
8589951105
8589951141
8589951141
8589951130
8589951155
8589951191
8589951191
8589951179
8589951205
8589951240
8589951240
8589951229
8589951254
8589951290
8589951292
8589951278
8589951304
8589951341
8589951341
8589951328
8589951355
8589951391
8589951393
8589951378
8589951405
8589951440
8589951444
8589951428
8589951455
8589951490
8589951494
8589951479
8589951504
8589951540
8589951543
8589951530
8589951554
8589951591
8589951593
8589951580
8589951604
8589951642
8589951642
8589951629
8589951654
8589951691
8589951692
8589951679
8589951704
8589951742
8589951742
8589951729
8589951754
8589951792
8589951795
8589951780
8589951805
8589951843
8589951844
8589951831
8589951855
8589951893
8589951892
8589951881
8589951905
8589951942
8589951942
8589951933
8589951956
8589951992
8589951993
8589951984
8589952008
8589952042
8589952044
8589952036
8589952059
8589952093
8589952095
8589952084
8589952108
8589952145
8589952146
8589952134
8589952158
8589952195
8589952196
8589952184
8589952209
8589952245
8589952246
8589952235
8589952258
8589952297
8589952296
8589952285
8589952310
8589952348
8589952344
8589952333
8589952357
8589952397
8589952393
8589952383
8589952406
8589952449
8589952443
8589952435
8589952457
8589952498
8589952494
8589952484
8589952507
8589952547
8589952545
8589952533
8589952556
8589952600
8589952595
8589952585
8589952606
8589952649
8589952643
8589952634
8589952657
8589952698
8589952694
8589952684
8589952708
8589952746
8589952743
8589952735
8589952757
8589952798
8589952796
8589952785
8589952808
8589952848
8589952844
8589952835
8589952857
8589952898
8589952894
8589952883
8589952908
8589952948
8589952943
8589952934
8589952958
8589952996
8589952993
8589952984
8589953009
8589953046
8589953043
8589953035
8589953061
8589953095
8589953092
8589953085
8589953110
8589953145
8589953143
8589953135
8589953161
8589953194
8589953193
8589953186
8589953212
8589953244
8589953243
8589953236
8589953262
8589953296
8589953292
8589953287
8589953310
8589953346
8589953342
8589953338
8589953362
8589953396
8589953391
8589953387
8589953414
8589953445
8589953442
8589953435
8589953464
8589953496
8589953492
8589953486
8589953513
8589953546
8589953541
8589953534
8589953563
8589953597
8589953593
8589953587
8589953615
8589953647
8589953643
8589953636
8589953666
8589953696
8589953694
8589953687
8589953715
8589953746
8589953744
8589953739
8589953766
8589953797
8589953793
8589953788
8589953815
8589953847
8589953842
8589953837
8589953866
8589953895
8589953893
8589953886
8589953915
8589953946
8589953943
8589953936
8589953964
8589953994
8589953993
8589953986
8589954012
8589954044
8589954043
8589954036
8589954063
8589954094
8589954092
8589954088
8589954113
8589954144
8589954141
8589954138
8589954162
8589954194
8589954191
8589954187
8589954212
8589954243
8589954242
8589954236
8589954263
8589954292
8589954290
8589954287
8589954313
8589954340
8589954341
8589954337
8589954363
8589954391
8589954392
8589954386
8589954412
8589954443
8589954441
8589954436
8589954461
8589954493
8589954492
8589954486
8589954511
8589954544
8589954541
8589954535
8589954561
8589954594
8589954591
8589954583
8589954612
8589954644
8589954642
8589954635
8589954661
8589954694
8589954692
8589954685
8589954711
8589954744
8589954741
8589954734
8589954760
8589954794
8589954791
8589954784
8589954809
8589954845
8589954840
8589954834
8589954859
8589954895
8589954890
8589954883
8589954909
8589954945
8589954939
8589954932
8589954961
8589954995
8589954989
8589954982
8589955012
8589955047
8589955040
8589955032
8589955062
8589955095
8589955089
8589955082
8589955114
8589955145
8589955139
8589955133
8589955163
8589955197
8589955190
8589955184
8589955214
8589955249
8589955239
8589955234
8589955264
8589955298
8589955290
8589955284
8589955315
8589955348
8589955341
8589955335
8589955365
8589955396
8589955390
8589955385
8589955414
8589955446
8589955439
8589955435
8589955465
8589955494
8589955490
8589955484
8589955515
8589955544
8589955540
8589955534
8589955565
8589955592
8589955591
8589955585
8589955615
8589955642
8589955641
8589955634
8589955668
8589955691
8589955689
8589955685
8589955718
8589955740
8589955740
8589955736
8589955767
8589955790
8589955789
8589955786
8589955817
8589955839
8589955839
8589955836
8589955866
8589955889
8589955888
8589955885
8589955916
8589955939
8589955939
8589955937
8589955966
8589955990
8589955988
8589955986
8589956016
8589956041
8589956039
8589956037
8589956067
8589956092
8589956088
8589956087
8589956118
8589956141
8589956137
8589956138
8589956168
8589956191
8589956187
8589956187
8589956216
8589956243
8589956236
8589956237
8589956265
8589956292
8589956285
8589956287
8589956313
8589956343
8589956334
8589956338
8589956362
8589956394
8589956383
8589956389
8589956412
8589956445
8589956432
8589956440
8589956461
8589956495
8589956479
8589956489
8589956511
8589956545
8589956530
8589956539
8589956561
8589956595
8589956581
8589956591
8589956610
8589956643
8589956630
8589956641
8589956657
8589956692
8589956679
8589956692
8589956707
8589956741
8589956729
8589956739
8589956757
8589956792
8589956779
8589956789
8589956807
8589956844
8589956830
8589956838
8589956858
8589956893
8589956879
8589956886
8589956908
8589956944
8589956929
8589956935
8589956956
8589956995
8589956979
8589956985
8589957006
8589957044
8589957029
8589957035
8589957055
8589957093
8589957080
8589957087
8589957106
8589957142
8589957129
8589957136
8589957154
8589957193
8589957179
8589957185
8589957205
8589957243
8589957228
8589957235
8589957256
8589957294
8589957277
8589957287
8589957306
8589957343
8589957326
8589957337
8589957355
8589957394
8589957375
8589957387
8589957404
8589957446
8589957427
8589957436
8589957454
8589957496
8589957474
8589957487
8589957503
8589957545
8589957523
8589957535
8589957553
8589957594
8589957572
8589957583
8589957604
8589957643
8589957623
8589957632
8589957652
8589957693
8589957673
8589957682
8589957701
8589957744
8589957723
8589957733
8589957752
8589957794
8589957774
8589957784
8589957801
8589957845
8589957824
8589957833
8589957851
8589957896
8589957874
8589957884
8589957901
8589957946
8589957923
8589957932
8589957950
8589957996
8589957973
8589957980
8589957998
8589958047
8589958023
8589958030
8589958047
8589958096
8589958072
8589958079
8589958099
8589958148
8589958123
8589958130
8589958148
8589958199
8589958175
8589958180
8589958198
8589958250
8589958225
8589958229
8589958249
8589958298
8589958274
8589958278
8589958299
8589958347
8589958324
8589958329
8589958349
8589958397
8589958374
8589958379
8589958399
8589958448
8589958424
8589958430
8589958448
8589958497
8589958474
8589958482
8589958497
8589958548
8589958523
8589958532
8589958547
8589958598
8589958574
8589958582
8589958598
8589958648
8589958625
8589958630
8589958647
8589958699
8589958673
8589958680
8589958697
8589958749
8589958723
8589958731
8589958746
8589958800
8589958772
8589958780
8589958795
8589958850
8589958823
8589958829
8589958846
8589958899
8589958872
8589958877
8589958896
8589958951
8589958922
8589958927
8589958947
8589959001
8589958973
8589958977
8589958995
8589959051
8589959023
8589959026
8589959043
8589959101
8589959074
8589959076
8589959093
8589959152
8589959123
8589959126
8589959143
8589959202
8589959173
8589959177
8589959192
8589959252
8589959224
8589959226
8589959240
8589959302
8589959273
8589959275
8589959289
8589959352
8589959322
8589959326
8589959339
8589959401
8589959372
8589959375
8589959391
8589959451
8589959423
8589959425
8589959442
8589959500
8589959474
8589959476
8589959493
8589959550
8589959524
8589959526
8589959544
8589959602
8589959574
8589959577
8589959592
8589959652
8589959624
8589959627
8589959642
8589959702
8589959673
8589959678
8589959690
8589959751
8589959724
8589959728
8589959740
8589959801
8589959774
8589959778
8589959790
8589959849
8589959824
8589959827
8589959839
8589959898
8589959876
8589959878
8589959890
8589959947
8589959926
8589959926
8589959942
8589959997
8589959974
8589959976
8589959991
8589960046
8589960026
8589960026
8589960040
8589960095
8589960076
8589960076
8589960089
8589960144
8589960127
8589960126
8589960138
8589960197
8589960178
8589960174
8589960189
8589960247
8589960229
8589960223
8589960238
8589960298
8589960281
8589960272
8589960287
8589960348
8589960331
8589960323
8589960337
8589960398
8589960381
8589960373
8589960387
8589960449
8589960430
8589960422
8589960437
8589960499
8589960479
8589960472
8589960488
8589960549
8589960530
8589960522
8589960539
8589960602
8589960579
8589960570
8589960587
8589960652
8589960628
8589960619
8589960638
8589960702
8589960679
8589960668
8589960687
8589960752
8589960729
8589960723
8589960737
8589960800
8589960778
8589960772
8589960787
8589960850
8589960827
8589960822
8589960835
8589960900
8589960877
8589960872
8589960885
8589960949
8589960927
8589960921
8589960936
8589961000
8589960977
8589960973
8589960986
8589961049
8589961027
8589961022
8589961037
8589961100
8589961080
8589961072
8589961088
8589961151
8589961132
8589961124
8589961140
8589961201
8589961183
8589961173
8589961192
8589961250
8589961232
8589961223
8589961241
8589961301
8589961282
8589961274
8589961291
8589961352
8589961332
8589961324
8589961340
8589961401
8589961381
8589961374
8589961389
8589961452
8589961432
8589961424
8589961438
8589961501
8589961482
8589961474
8589961489
8589961552
8589961532
8589961525
8589961541
8589961598
8589961581
8589961575
8589961592
8589961648
8589961631
8589961626
8589961641
8589961698
8589961682
8589961677
8589961692
8589961748
8589961730
8589961727
8589961741
8589961798
8589961780
8589961776
8589961792
8589961849
8589961829
8589961826
8589961842
8589961899
8589961878
8589961876
8589961892
8589961949
8589961928
8589961926
8589961942
8589961999
8589961977
8589961976
8589961992
8589962049
8589962027
8589962028
8589962042
8589962099
8589962077
8589962079
8589962091
8589962149
8589962128
8589962130
8589962142
8589962200
8589962178
8589962178
8589962191
8589962250
8589962229
8589962227
8589962243
8589962298
8589962281
8589962276
8589962292
8589962348
8589962330
8589962327
8589962341
8589962395
8589962381
8589962378
8589962392
8589962445
8589962430
8589962426
8589962442
8589962493
8589962480
8589962478
8589962493
8589962542
8589962530
8589962527
8589962543
8589962592
8589962579
8589962579
8589962593
8589962642
8589962631
8589962630
8589962643
8589962691
8589962684
8589962678
8589962693
8589962742
8589962734
8589962728
8589962742
8589962795
8589962784
8589962777
8589962793
8589962846
8589962834
8589962828
8589962842
8589962897
8589962882
8589962878
8589962892
8589962946
8589962933
8589962926
8589962942
8589962994
8589962982
8589962977
8589962994
8589963047
8589963030
8589963026
8589963043
8589963098
8589963079
8589963074
8589963092
8589963150
8589963129
8589963125
8589963143
8589963200
8589963177
8589963175
8589963194
8589963251
8589963226
8589963224
8589963243
8589963301
8589963276
8589963275
8589963293
8589963351
8589963325
8589963325
8589963344
8589963400
8589963376
8589963374
8589963394
8589963451
8589963425
8589963423
8589963446
8589963500
8589963474
8589963473
8589963495
8589963549
8589963523
8589963521
8589963545
8589963599
8589963574
8589963570
8589963595
8589963650
8589963623
8589963619
8589963644
8589963699
8589963675
8589963671
8589963695
8589963748
8589963727
8589963721
8589963745
8589963797
8589963776
8589963770
8589963794
8589963847
8589963826
8589963820
8589963845
8589963898
8589963877
8589963869
8589963895
8589963947
8589963927
8589963919
8589963946
8589963997
8589963977
8589963969
8589963997
8589964046
8589964024
8589964019
8589964047
8589964096
8589964075
8589964069
8589964097
8589964147
8589964126
8589964120
8589964145
8589964196
8589964176
8589964169
8589964194
8589964247
8589964226
8589964220
8589964246
8589964296
8589964276
8589964269
8589964297
8589964345
8589964326
8589964319
8589964347
8589964395
8589964377
8589964368
8589964398
8589964445
8589964425
8589964419
8589964448
8589964495
8589964475
8589964469
8589964498
8589964546
8589964524
8589964519
8589964548
8589964595
8589964574
8589964570
8589964598
8589964644
8589964625
8589964621
8589964649
8589964693
8589964675
8589964671
8589964698
8589964743
8589964725
8589964721
8589964747
8589964793
8589964775
8589964771
8589964796
8589964842
8589964824
8589964820
8589964846
8589964892
8589964873
8589964872
8589964896
8589964943
8589964925
8589964923
8589964947
8589964993
8589964973
8589964971
8589964995
8589965043
8589965023
8589965021
8589965045
8589965093
8589965071
8589965071
8589965096
8589965143
8589965121
8589965120
8589965146
8589965192
8589965170
8589965170
8589965197
8589965241
8589965221
8589965221
8589965247
8589965290
8589965272
8589965271
8589965299
8589965338
8589965321
8589965322
8589965348
8589965388
8589965373
8589965370
8589965396
8589965438
8589965423
8589965420
8589965446
8589965487
8589965473
8589965471
8589965494
8589965536
8589965522
8589965523
8589965543
8589965586
8589965573
8589965573
8589965594
8589965635
8589965622
8589965622
8589965644
8589965685
8589965672
8589965672
8589965695
8589965734
8589965721
8589965722
8589965744
8589965783
8589965772
8589965773
8589965793
8589965836
8589965822
8589965825
8589965842
8589965887
8589965871
8589965874
8589965893
8589965938
8589965921
8589965922
8589965943
8589965986
8589965971
8589965974
8589965994
8589966035
8589966022
8589966025
8589966046
8589966084
8589966070
8589966076
8589966097
8589966133
8589966120
8589966125
8589966148
8589966183
8589966170
8589966175
8589966197
8589966233
8589966220
8589966223
8589966250
8589966284
8589966270
8589966273
8589966300
8589966334
8589966320
8589966320
8589966350
8589966383
8589966369
8589966369
8589966400
8589966432
8589966418
8589966420
8589966451
8589966483
8589966469
8589966470
8589966502
8589966532
8589966519
8589966521
8589966551
8589966581
8589966569
8589966573
8589966602
8589966631
8589966617
8589966623
8589966650
8589966681
8589966669
8589966672
8589966698
8589966730
8589966720
8589966723
8589966750
8589966780
8589966770
8589966774
8589966803
8589966830
8589966820
8589966824
8589966853
8589966880
8589966870
8589966874
8589966903
8589966930
8589966920
8589966923
8589966951
8589966979
8589966970
8589966972
8589967001
8589967029
8589967020
8589967023
8589967049
8589967081
8589967071
8589967074
8589967098
8589967132
8589967123
8589967123
8589967148
8589967182
8589967171
8589967172
8589967198
8589967232
8589967221
8589967224
8589967247
8589967281
8589967271
8589967274
8589967298
8589967331
8589967321
8589967325
8589967348
8589967380
8589967370
8589967374
8589967398
8589967429
8589967420
8589967425
8589967449
8589967478
8589967472
8589967474
8589967500
8589967528
8589967522
8589967524
8589967552
8589967579
8589967571
8589967574
8589967602
8589967629
8589967620
8589967624
8589967654
8589967679
8589967672
8589967675
8589967701
8589967728
8589967722
8589967725
8589967748
8589967778
8589967773
8589967774
8589967799
8589967825
8589967822
8589967824
8589967849
8589967875
8589967872
8589967874
8589967898
8589967925
8589967924
8589967924
8589967948
8589967976
8589967973
8589967973
8589968000
8589968025
8589968024
8589968023
8589968050
8589968077
8589968074
8589968072
8589968098
8589968126
8589968123
8589968121
8589968147
8589968176
8589968174
8589968171
8589968197
8589968225
8589968223
8589968221
8589968245
8589968274
8589968273
8589968271
8589968296
8589968325
8589968322
8589968322
8589968345
8589968374
8589968372
8589968373
8589968396
8589968424
8589968423
8589968423
8589968446
8589968473
8589968474
8589968475
8589968495
8589968523
8589968525
8589968526
8589968546
8589968575
8589968575
8589968576
8589968597
8589968627
8589968625
8589968626
8589968649
8589968676
8589968674
8589968675
8589968697
8589968725
8589968726
8589968724
8589968746
8589968776
8589968775
8589968773
8589968797
8589968826
8589968826
8589968822
8589968847
8589968877
8589968874
8589968871
8589968897
8589968925
8589968925
8589968921
8589968948
8589968973
8589968972
8589968972
8589968998
8589969024
8589969022
8589969020
8589969047
8589969074
8589969074
8589969068
8589969099
8589969124
8589969124
8589969120
8589969149
8589969175
8589969172
8589969170
8589969199
8589969225
8589969222
8589969221
8589969250
8589969276
8589969272
8589969271
8589969298
8589969325
8589969322
8589969321
8589969347
8589969375
8589969371
8589969374
8589969397
8589969424
8589969420
8589969423
8589969446
8589969474
8589969468
8589969472
8589969496
8589969526
8589969519
8589969521
8589969544
8589969573
8589969569
8589969571
8589969597
8589969622
8589969620
8589969619
8589969646
8589969673
8589969670
8589969670
8589969697
8589969722
8589969720
8589969720
8589969748
8589969772
8589969771
8589969773
8589969798
8589969823
8589969821
8589969823
8589969849
8589969873
8589969871
8589969874
8589969899
8589969923
8589969921
8589969924
8589969950
8589969972
8589969971
8589969975
8589970000
8589970022
8589970021
8589970024
8589970048
8589970072
8589970071
8589970073
8589970099
8589970122
8589970121
8589970125
8589970149
8589970171
8589970169
8589970176
8589970200
8589970221
8589970221
8589970226
8589970249
8589970271
8589970269
8589970275
8589970299
8589970320
8589970320
8589970326
8589970348
8589970371
8589970369
8589970374
8589970398
8589970420
8589970420
8589970424
8589970447
8589970471
8589970470
8589970474
8589970496
8589970521
8589970521
8589970523
8589970544
8589970573
8589970571
8589970575
8589970595
8589970626
8589970619
8589970624
8589970646
8589970674
8589970670
8589970674
8589970694
8589970724
8589970720
8589970727
8589970744
8589970773
8589970771
8589970776
8589970793
8589970822
8589970820
8589970826
8589970845
8589970873
8589970868
8589970875
8589970896
8589970925
8589970918
8589970924
8589970947
8589970975
8589970969
8589970973
8589970995
8589971025
8589971022
8589971024
8589971045
8589971075
8589971072
8589971074
8589971096
8589971125
8589971125
8589971123
8589971145
8589971174
8589971175
8589971174
8589971196
8589971224
8589971224
8589971224
8589971247
8589971273
8589971275
8589971275
8589971297
8589971325
8589971325
8589971324
8589971346
8589971375
8589971375
8589971375
8589971395
8589971425
8589971428
8589971427
8589971445
8589971473
8589971477
8589971477
8589971495
8589971523
8589971528
8589971527
8589971544
8589971572
8589971578
8589971576
8589971594
8589971622
8589971630
8589971624
8589971642
8589971673
8589971678
8589971675
8589971691
8589971722
8589971729
8589971726
8589971742
8589971772
8589971780
8589971777
8589971792
8589971820
8589971830
8589971827
8589971840
8589971871
8589971880
8589971878
8589971890
8589971922
8589971928
8589971927
8589971939
8589971971
8589971978
8589971980
8589971991
8589972020
8589972028
8589972029
8589972042
8589972070
8589972080
8589972080
8589972091
8589972120
8589972129
8589972129
8589972144
8589972169
8589972179
8589972179
8589972194
8589972219
8589972229
8589972227
8589972243
8589972271
8589972278
8589972277
8589972292
8589972321
8589972329
8589972324
8589972342
8589972372
8589972379
8589972373
8589972390
8589972421
8589972430
8589972422
8589972440
8589972470
8589972479
8589972471
8589972492
8589972518
8589972532
8589972522
8589972542
8589972568
8589972583
8589972570
8589972591
8589972618
8589972632
8589972620
8589972639
8589972669
8589972680
8589972669
8589972688
8589972721
8589972731
8589972718
8589972738
8589972770
8589972781
8589972767
8589972789
8589972820
8589972832
8589972819
8589972839
8589972871
8589972883
8589972868
8589972888
8589972921
8589972934
8589972919
8589972940
8589972970
8589972983
8589972969
8589972990
8589973020
8589973033
8589973018
8589973039
8589973071
8589973084
8589973068
8589973088
8589973120
8589973132
8589973116
8589973138
8589973170
8589973182
8589973166
8589973189
8589973218
8589973232
8589973216
8589973240
8589973269
8589973281
8589973267
8589973290
8589973318
8589973332
8589973319
8589973339
8589973370
8589973381
8589973368
8589973389
8589973420
8589973432
8589973417
8589973440
8589973470
8589973482
8589973467
8589973489
8589973521
8589973533
8589973519
8589973538
8589973570
8589973583
8589973570
8589973588
8589973618
8589973633
8589973619
8589973639
8589973669
8589973684
8589973670
8589973688
8589973721
8589973736
8589973719
8589973738
8589973771
8589973785
8589973771
8589973789
8589973820
8589973833
8589973822
8589973839
8589973867
8589973883
8589973874
8589973887
8589973918
8589973934
8589973922
8589973937
8589973969
8589973982
8589973973
8589973988
8589974019
8589974032
8589974022
8589974037
8589974068
8589974083
8589974071
8589974087
8589974118
8589974131
8589974121
8589974138
8589974169
8589974181
8589974172
8589974189
8589974219
8589974229
8589974223
8589974239
8589974270
8589974281
8589974272
8589974289
8589974322
8589974331
8589974323
8589974338
8589974373
8589974379
8589974372
8589974387
8589974423
8589974429
8589974423
8589974436
8589974474
8589974479
8589974476
8589974485
8589974523
8589974530
8589974526
8589974535
8589974573
8589974579
8589974575
8589974586
8589974622
8589974631
8589974627
8589974635
8589974673
8589974682
8589974677
8589974686
8589974724
8589974733
8589974728
8589974737
8589974773
8589974784
8589974775
8589974786
8589974823
8589974835
8589974826
8589974836
8589974874
8589974884
8589974876
8589974884
8589974925
8589974936
8589974927
8589974935
8589974973
8589974987
8589974977
8589974984
8589975022
8589975036
8589975027
8589975033
8589975074
8589975088
8589975076
8589975081
8589975123
8589975138
8589975127
8589975132
8589975173
8589975189
8589975176
8589975182
8589975224
8589975240
8589975226
8589975233
8589975275
8589975289
8589975276
8589975282
8589975325
8589975338
8589975326
8589975334
8589975375
8589975387
8589975376
8589975383
8589975425
8589975437
8589975426
8589975433
8589975474
8589975485
8589975475
8589975482
8589975524
8589975535
8589975523
8589975533
8589975573
8589975585
8589975574
8589975584
8589975624
8589975636
8589975624
8589975633
8589975676
8589975686
8589975673
8589975685
8589975725
8589975735
8589975724
8589975735
8589975776
8589975785
8589975775
8589975785
8589975825
8589975836
8589975826
8589975834
8589975874
8589975885
8589975877
8589975885
8589975925
8589975936
8589975925
8589975936
8589975975
8589975987
8589975976
8589975984
8589976024
8589976037
8589976026
8589976035
8589976075
8589976086
8589976076
8589976086
8589976123
8589976138
8589976126
8589976136
8589976173
8589976188
8589976178
8589976185
8589976225
8589976237
8589976230
8589976234
8589976274
8589976287
8589976281
8589976284
8589976325
8589976336
8589976330
8589976335
8589976377
8589976387
8589976381
8589976386
8589976428
8589976438
8589976429
8589976436
8589976476
8589976488
8589976479
8589976488
8589976526
8589976535
8589976528
8589976538
8589976575
8589976584
8589976579
8589976587
8589976624
8589976633
8589976628
8589976636
8589976673
8589976682
8589976679
8589976687
8589976722
8589976733
8589976730
8589976737
8589976772
8589976784
8589976779
8589976787
8589976823
8589976836
8589976830
8589976836
8589976873
8589976887
8589976879
8589976886
8589976923
8589976936
8589976930
8589976936
8589976973
8589976985
8589976979
8589976987
8589977022
8589977036
8589977029
8589977036
8589977072
8589977084
8589977078
8589977086
8589977121
8589977134
8589977129
8589977135
8589977171
8589977185
8589977177
8589977186
8589977220
8589977234
8589977229
8589977236
8589977270
8589977285
8589977278
8589977285
8589977320
8589977337
8589977329
8589977334
8589977371
8589977386
8589977380
8589977383
8589977421
8589977436
8589977430
8589977433
8589977471
8589977488
8589977479
8589977483
8589977523
8589977539
8589977528
8589977533
8589977572
8589977589
8589977578
8589977582
8589977624
8589977638
8589977629
8589977633
8589977673
8589977688
8589977680
8589977683
8589977723
8589977737
8589977730
8589977732
8589977773
8589977788
8589977778
8589977782
8589977824
8589977838
8589977827
8589977831
8589977874
8589977888
8589977876
8589977882
8589977925
8589977937
8589977926
8589977933
8589977973
8589977988
8589977976
8589977982
8589978024
8589978039
8589978028
8589978033
8589978073
8589978091
8589978076
8589978083
8589978123
8589978141
8589978127
8589978134
8589978174
8589978192
8589978176
8589978185
8589978223
8589978241
8589978226
8589978235
8589978273
8589978292
8589978276
8589978286
8589978324
8589978340
8589978324
8589978335
8589978373
8589978391
8589978375
8589978387
8589978423
8589978441
8589978423
8589978437
8589978473
8589978491
8589978473
8589978486
8589978524
8589978540
8589978522
8589978537
8589978572
8589978588
8589978569
8589978586
8589978620
8589978639
8589978618
8589978636
8589978670
8589978689
8589978667
8589978687
8589978720
8589978740
8589978717
8589978735
8589978771
8589978790
8589978769
8589978785
8589978820
8589978840
8589978818
8589978834
8589978870
8589978892
8589978867
8589978884
8589978920
8589978941
8589978917
8589978933
8589978969
8589978989
8589978966
8589978983
8589979020
8589979038
8589979017
8589979032
8589979070
8589979089
8589979068
8589979080
8589979120
8589979141
8589979119
8589979131
8589979171
8589979191
8589979170
8589979182
8589979220
8589979243
8589979219
8589979231
8589979269
8589979294
8589979269
8589979281
8589979319
8589979345
8589979320
8589979329
8589979370
8589979393
8589979371
8589979379
8589979419
8589979441
8589979421
8589979429
8589979471
8589979493
8589979470
8589979480
8589979521
8589979543
8589979521
8589979530
8589979570
8589979594
8589979570
8589979580
8589979620
8589979644
8589979620
8589979630
8589979670
8589979695
8589979667
8589979681
8589979719
8589979746
8589979718
8589979730
8589979770
8589979797
8589979767
8589979780
8589979819
8589979847
8589979817
8589979829
8589979870
8589979898
8589979866
8589979879
8589979921
8589979947
8589979915
8589979928
8589979971
8589979997
8589979966
8589979978
8589980022
8589980048
8589980016
8589980029
8589980073
8589980098
8589980066
8589980078
8589980124
8589980148
8589980113
8589980127
8589980174
8589980199
8589980163
8589980176
8589980223
8589980249
8589980214
8589980224
8589980273
8589980299
8589980263
8589980273
8589980325
8589980348
8589980314
8589980324
8589980375
8589980398
8589980366
8589980374
8589980424
8589980447
8589980416
8589980425
8589980474
8589980498
8589980467
8589980474
8589980522
8589980548
8589980518
8589980524
8589980571
8589980598
8589980568
8589980575
8589980623
8589980648
8589980616
8589980625
8589980672
8589980697
8589980665
8589980677
8589980723
8589980747
8589980714
8589980726
8589980773
8589980798
8589980765
8589980776
8589980824
8589980848
8589980814
8589980825
8589980876
8589980898
8589980863
8589980876
8589980925
8589980948
8589980915
8589980925
8589980973
8589980997
8589980964
8589980975
8589981024
8589981047
8589981012
8589981024
8589981075
8589981096
8589981064
8589981074
8589981125
8589981146
8589981113
8589981123
8589981176
8589981195
8589981163
8589981174
8589981226
8589981245
8589981215
8589981224
8589981276
8589981294
8589981265
8589981273
8589981325
8589981344
8589981315
8589981322
8589981373
8589981395
8589981365
8589981372
8589981423
8589981445
8589981414
8589981422
8589981474
8589981495
8589981465
8589981471
8589981523
8589981545
8589981516
8589981522
8589981573
8589981595
8589981564
8589981574
8589981623
8589981646
8589981615
8589981623
8589981674
8589981696
8589981665
8589981674
8589981724
8589981746
8589981714
8589981722
8589981774
8589981799
8589981764
8589981772
8589981826
8589981849
8589981813
8589981824
8589981875
8589981899
8589981864
8589981875
8589981924
8589981949
8589981914
8589981926
8589981975
8589982000
8589981964
8589981976
8589982025
8589982049
8589982012
8589982026
8589982076
8589982098
8589982062
8589982076
8589982126
8589982147
8589982111
8589982127
8589982175
8589982197
8589982161
8589982176
8589982226
8589982248
8589982210
8589982226
8589982275
8589982298
8589982259
8589982277
8589982324
8589982348
8589982308
8589982327
8589982374
8589982397
8589982359
8589982378
8589982425
8589982447
8589982409
8589982430
8589982476
8589982497
8589982457
8589982479
8589982527
8589982546
8589982507
8589982529
8589982577
8589982598
8589982558
8589982580
8589982626
8589982647
8589982608
8589982631
8589982676
8589982698
8589982659
8589982680
8589982726
8589982748
8589982708
8589982730
8589982775
8589982798
8589982758
8589982780
8589982826
8589982847
8589982808
8589982830
8589982876
8589982899
8589982859
8589982879
8589982927
8589982949
8589982909
8589982929
8589982978
8589982998
8589982959
8589982980
8589983028
8589983046
8589983007
8589983031
8589983079
8589983097
8589983058
8589983082
8589983129
8589983147
8589983108
8589983132
8589983179
8589983197
8589983160
8589983181
8589983230
8589983248
8589983210
8589983230
8589983281
8589983298
8589983258
8589983280
8589983331
8589983348
8589983311
8589983329
8589983379
8589983397
8589983362
8589983379
8589983429
8589983447
8589983414
8589983429
8589983480
8589983498
8589983464
8589983478
8589983530
8589983547
8589983515
8589983530
8589983582
8589983598
8589983565
8589983581
8589983633
8589983647
8589983614
8589983632
8589983684
8589983698
8589983663
8589983682
8589983735
8589983748
8589983712
8589983731
8589983785
8589983797
8589983762
8589983782
8589983835
8589983847
8589983812
8589983831
8589983885
8589983896
8589983861
8589983879
8589983936
8589983947
8589983910
8589983929
8589983986
8589983998
8589983959
8589983980
8589984035
8589984047
8589984010
8589984032
8589984088
8589984096
8589984058
8589984082
8589984139
8589984145
8589984110
8589984132
8589984189
8589984197
8589984161
8589984181
8589984239
8589984247
8589984209
8589984231
8589984290
8589984298
8589984258
8589984283
8589984339
8589984347
8589984308
8589984333
8589984389
8589984398
8589984357
8589984382
8589984439
8589984448
8589984406
8589984434
8589984490
8589984499
8589984456
8589984483
8589984539
8589984550
8589984507
8589984533
8589984590
8589984601
8589984558
8589984584
8589984640
8589984649
8589984606
8589984637
8589984691
8589984699
8589984655
8589984688
8589984741
8589984748
8589984706
8589984737
8589984791
8589984798
8589984756
8589984788
8589984843
8589984848
8589984806
8589984840
8589984893
8589984899
8589984857
8589984892
8589984943
8589984949
8589984906
8589984942
8589984994
8589984999
8589984956
8589984992
8589985045
8589985051
8589985006
8589985041
8589985096
8589985100
8589985055
8589985092
8589985145
8589985151
8589985105
8589985140
8589985195
8589985202
8589985152
8589985190
8589985247
8589985252
8589985201
8589985239
8589985297
8589985303
8589985250
8589985288
8589985348
8589985353
8589985299
8589985339
8589985399
8589985402
8589985350
8589985390
8589985448
8589985454
8589985399
8589985440
8589985497
8589985503
8589985448
8589985491
8589985545
8589985552
8589985498
8589985540
8589985595
8589985602
8589985548
8589985591
8589985645
8589985652
8589985598
8589985640
8589985696
8589985702
8589985647
8589985690
8589985746
8589985752
8589985697
8589985741
8589985797
8589985802
8589985746
8589985791
8589985847
8589985854
8589985797
8589985842
8589985896
8589985904
8589985846
8589985892
8589985946
8589985954
8589985898
8589985942
8589985995
8589986004
8589985948
8589985992
8589986044
8589986054
8589986000
8589986041
8589986092
8589986104
8589986048
8589986092
8589986143
8589986154
8589986098
8589986143
8589986193
8589986204
8589986148
8589986192
8589986244
8589986254
8589986196
8589986243
8589986294
8589986304
8589986248
8589986293
8589986344
8589986355
8589986299
8589986343
8589986394
8589986405
8589986349
8589986394
8589986444
8589986455
8589986397
8589986443
8589986494
8589986505
8589986449
8589986493
8589986545
8589986555
8589986498
8589986544
8589986595
8589986606
8589986547
8589986595
8589986643
8589986654
8589986597
8589986644
8589986694
8589986705
8589986646
8589986694
8589986742
8589986754
8589986697
8589986744
8589986791
8589986805
8589986748
8589986794
8589986840
8589986856
8589986798
8589986843
8589986890
8589986906
8589986849
8589986894
8589986940
8589986956
8589986901
8589986944
8589986988
8589987005
8589986951
8589986994
8589987038
8589987055
8589987002
8589987043
8589987086
8589987105
8589987051
8589987092
8589987136
8589987156
8589987102
8589987142
8589987184
8589987206
8589987152
8589987191
8589987235
8589987256
8589987202
8589987242
8589987285
8589987307
8589987252
8589987291
8589987335
8589987358
8589987303
8589987342
8589987386
8589987407
8589987353
8589987392
8589987438
8589987457
8589987403
8589987441
8589987488
8589987505
8589987453
8589987490
8589987539
8589987555
8589987500
8589987539
8589987588
8589987606
8589987550
8589987587
8589987637
8589987656
8589987601
8589987637
8589987688
8589987708
8589987650
8589987685
8589987737
8589987758
8589987701
8589987735
8589987786
8589987806
8589987751
8589987786
8589987836
8589987856
8589987799
8589987837
8589987886
8589987905
8589987851
8589987886
8589987937
8589987955
8589987901
8589987935
8589987988
8589988005
8589987953
8589987984
8589988038
8589988055
8589988005
8589988036
8589988089
8589988105
8589988056
8589988086
8589988139
8589988155
8589988107
8589988136
8589988188
8589988205
8589988156
8589988185
8589988236
8589988256
8589988206
8589988234
8589988287
8589988306
8589988257
8589988285
8589988337
8589988358
8589988306
8589988336
8589988388
8589988407
8589988354
8589988387
8589988437
8589988457
8589988405
8589988438
8589988487
8589988505
8589988456
8589988488
8589988537
8589988554
8589988507
8589988539
8589988587
8589988603
8589988558
8589988589
8589988639
8589988652
8589988608
8589988640
8589988686
8589988704
8589988658
8589988690
8589988736
8589988755
8589988708
8589988741
8589988785
8589988807
8589988758
8589988792
8589988835
8589988858
8589988807
8589988843
8589988886
8589988909
8589988858
8589988893
8589988935
8589988960
8589988907
8589988944
8589988985
8589989011
8589988958
8589988995
8589989036
8589989060
8589989008
8589989046
8589989086
8589989110
8589989057
8589989095
8589989135
8589989161
8589989108
8589989144
8589989186
8589989211
8589989157
8589989194
8589989235
8589989259
8589989207
8589989242
8589989285
8589989308
8589989259
8589989291
8589989335
8589989358
8589989310
8589989342
8589989384
8589989408
8589989358
8589989393
8589989434
8589989458
8589989407
8589989443
8589989487
8589989508
8589989457
8589989493
8589989538
8589989560
8589989507
8589989543
8589989588
8589989609
8589989558
8589989594
8589989638
8589989659
8589989608
8589989645
8589989688
8589989708
8589989656
8589989693
8589989737
8589989761
8589989705
8589989745
8589989786
8589989810
8589989755
8589989795
8589989836
8589989859
8589989805
8589989846
8589989886
8589989910
8589989855
8589989896
8589989937
8589989959
8589989906
8589989945
8589989986
8589990008
8589989953
8589989995
8589990037
8589990057
8589990004
8589990045
8589990087
8589990107
8589990053
8589990094
8589990138
8589990158
8589990103
8589990144
8589990188
8589990207
8589990154
8589990196
8589990238
8589990259
8589990204
8589990244
8589990292
8589990310
8589990254
8589990295
8589990341
8589990360
8589990304
8589990344
8589990392
8589990410
8589990353
8589990394
8589990442
8589990461
8589990403
8589990442
8589990493
8589990511
8589990453
8589990493
8589990543
8589990562
8589990503
8589990542
8589990594
8589990612
8589990554
8589990590
8589990646
8589990663
8589990603
8589990641
8589990697
8589990713
8589990653
8589990691
8589990746
8589990761
8589990701
8589990740
8589990794
8589990812
8589990751
8589990790
8589990844
8589990861
8589990802
8589990838
8589990895
8589990912
8589990852
8589990889
8589990944
8589990963
8589990901
8589990939
8589990995
8589991015
8589990951
8589990989
8589991043
8589991064
8589990999
8589991037
8589991094
8589991116
8589991048
8589991086
8589991145
8589991167
8589991099
8589991137
8589991194
8589991218
8589991146
8589991189
8589991245
8589991267
8589991196
8589991240
8589991294
8589991316
8589991246
8589991289
8589991343
8589991366
8589991294
8589991338
8589991393
8589991417
8589991342
8589991388
8589991442
8589991469
8589991392
8589991438
8589991492
8589991519
8589991440
8589991486
8589991545
8589991570
8589991490
8589991536
8589991594
8589991620
8589991539
8589991586
8589991644
8589991670
8589991587
8589991635
8589991695
8589991719
8589991636
8589991685
8589991745
8589991769
8589991686
8589991735
8589991795
8589991817
8589991735
8589991786
8589991843
8589991868
8589991784
8589991836
8589991895
8589991919
8589991833
8589991886
8589991945
8589991969
8589991884
8589991937
8589991995
8589992018
8589991935
8589991988
8589992046
8589992070
8589991985
8589992037
8589992095
8589992121
8589992037
8589992088
8589992143
8589992171
8589992088
8589992137
8589992193
8589992222
8589992138
8589992187
8589992243
8589992271
8589992186
8589992237
8589992293
8589992321
8589992238
8589992285
8589992342
8589992371
8589992289
8589992337
8589992391
8589992421
8589992339
8589992387
8589992441
8589992470
8589992389
8589992436
8589992491
8589992520
8589992442
8589992488
8589992541
8589992569
8589992493
8589992538
8589992592
8589992619
8589992543
8589992588
8589992643
8589992671
8589992594
8589992637
8589992696
8589992721
8589992645
8589992687
8589992746
8589992769
8589992694
8589992735
8589992796
8589992818
8589992743
8589992785
8589992848
8589992869
8589992794
8589992836
8589992898
8589992918
8589992844
8589992885
8589992950
8589992968
8589992893
8589992934
8589993000
8589993018
8589992944
8589992984
8589993051
8589993066
8589992995
8589993034
8589993102
8589993117
8589993045
8589993084
8589993152
8589993167
8589993096
8589993133
8589993202
8589993217
8589993146
8589993184
8589993250
8589993266
8589993196
8589993235
8589993298
8589993315
8589993245
8589993287
8589993348
8589993363
8589993296
8589993338
8589993399
8589993413
8589993346
8589993388
8589993450
8589993461
8589993395
8589993439
8589993502
8589993509
8589993446
8589993488
8589993552
8589993559
8589993497
8589993538
8589993601
8589993609
8589993546
8589993589
8589993650
8589993659
8589993596
8589993640
8589993700
8589993708
8589993646
8589993689
8589993750
8589993757
8589993698
8589993738
8589993801
8589993809
8589993748
8589993787
8589993852
8589993859
8589993800
8589993838
8589993903
8589993908
8589993849
8589993888
8589993952
8589993959
8589993898
8589993935
8589994002
8589994009
8589993949
8589993985
8589994052
8589994057
8589993999
8589994037
8589994102
8589994106
8589994048
8589994086
8589994153
8589994155
8589994098
8589994135
8589994205
8589994205
8589994149
8589994185
8589994254
8589994256
8589994198
8589994235
8589994303
8589994305
8589994248
8589994285
8589994352
8589994355
8589994297
8589994333
8589994402
8589994405
8589994347
8589994384
8589994452
8589994454
8589994395
8589994433
8589994502
8589994504
8589994447
8589994484
8589994553
8589994555
8589994498
8589994534
8589994603
8589994607
8589994549
8589994584
8589994653
8589994657
8589994600
8589994631
8589994702
8589994708
8589994649
8589994682
8589994754
8589994757
8589994695
8589994730
8589994805
8589994808
8589994745
8589994780
8589994855
8589994859
8589994796
8589994830
8589994905
8589994909
8589994844
8589994881
8589994954
8589994960
8589994895
8589994930
8589995004
8589995010
8589994945
8589994979
8589995051
8589995060
8589994994
8589995028
8589995102
8589995110
8589995046
8589995078
8589995150
8589995158
8589995096
8589995126
8589995200
8589995207
8589995145
8589995176
8589995250
8589995258
8589995196
8589995227
8589995300
8589995308
8589995246
8589995277
8589995350
8589995359
8589995297
8589995326
8589995401
8589995409
8589995347
8589995377
8589995451
8589995459
8589995397
8589995428
8589995501
8589995510
8589995448
8589995477
8589995551
8589995561
8589995498
8589995526
8589995602
8589995613
8589995550
8589995575
8589995650
8589995664
8589995600
8589995624
8589995701
8589995715
8589995649
8589995675
8589995751
8589995765
8589995698
8589995725
8589995801
8589995815
8589995749
8589995775
8589995850
8589995864
8589995800
8589995824
8589995901
8589995915
8589995852
8589995873
8589995950
8589995966
8589995902
8589995922
8589996001
8589996018
8589995952
8589995973
8589996051
8589996068
8589996001
8589996023
8589996101
8589996118
8589996049
8589996074
8589996151
8589996169
8589996100
8589996123
8589996201
8589996220
8589996149
8589996175
8589996251
8589996271
8589996198
8589996225
8589996301
8589996320
8589996247
8589996275
8589996348
8589996370
8589996298
8589996326
8589996400
8589996420
8589996348
8589996377
8589996451
8589996469
8589996398
8589996427
8589996500
8589996519
8589996449
8589996479
8589996549
8589996570
8589996499
8589996528
8589996602
8589996621
8589996548
8589996579
8589996653
8589996670
8589996596
8589996627
8589996704
8589996719
8589996645
8589996679
8589996752
8589996769
8589996695
8589996729
8589996802
8589996819
8589996744
8589996778
8589996851
8589996869
8589996793
8589996828
8589996900
8589996918
8589996843
8589996877
8589996948
8589996968
8589996894
8589996927
8589996998
8589997018
8589996944
8589996976
8589997048
8589997067
8589996994
8589997025
8589997099
8589997119
8589997044
8589997076
8589997148
8589997169
8589997094
8589997125
8589997201
8589997218
8589997144
8589997176
8589997250
8589997268
8589997196
8589997225
8589997299
8589997319
8589997245
8589997275
8589997350
8589997370
8589997294
8589997326
8589997400
8589997419
8589997344
8589997377
8589997450
8589997470
8589997393
8589997426
8589997501
8589997520
8589997444
8589997476
8589997551
8589997571
8589997492
8589997528
8589997600
8589997621
8589997542
8589997580
8589997649
8589997671
8589997592
8589997631
8589997699
8589997721
8589997643
8589997681
8589997749
8589997770
8589997694
8589997731
8589997800
8589997820
8589997743
8589997782
8589997851
8589997869
8589997793
8589997832
8589997901
8589997918
8589997840
8589997882
8589997951
8589997968
8589997892
8589997931
8589998000
8589998019
8589997941
8589997981
8589998050
8589998069
8589997992
8589998032
8589998098
8589998119
8589998042
8589998082
8589998150
8589998169
8589998091
8589998132
8589998199
8589998218
8589998140
8589998183
8589998250
8589998268
8589998190
8589998233
8589998301
8589998320
8589998240
8589998282
8589998350
8589998367
8589998289
8589998331
8589998399
8589998419
8589998338
8589998381
8589998446
8589998470
8589998387
8589998432
8589998498
8589998521
8589998437
8589998483
8589998549
8589998571
8589998486
8589998530
8589998600
8589998622
8589998537
8589998580
8589998650
8589998672
8589998587
8589998628
8589998701
8589998721
8589998637
8589998679
8589998752
8589998773
8589998687
8589998730
8589998803
8589998824
8589998738
8589998780
8589998852
8589998875
8589998788
8589998829
8589998901
8589998925
8589998836
8589998879
8589998952
8589998974
8589998886
8589998930
8589999000
8589999027
8589998937
8589998978
8589999050
8589999076
8589998987
8589999028
8589999099
8589999127
8589999039
8589999077
8589999150
8589999178
8589999089
8589999127
8589999200
8589999228
8589999140
8589999174
8589999250
8589999280
8589999191
8589999225
8589999301
8589999330
8589999242
8589999273
8589999351
8589999379
8589999293
8589999324
8589999400
8589999430
8589999344
8589999373
8589999451
8589999481
8589999394
8589999423
8589999503
8589999531
8589999444
8589999474
8589999554
8589999580
8589999495
8589999522
8589999606
8589999627
8589999544
8589999573
8589999654
8589999677
8589999594
8589999624
8589999704
8589999727
8589999645
8589999670
8589999755
8589999778
8589999694
8589999721
8589999805
8589999828
8589999745
8589999771
8589999853
8589999877
8589999795
8589999822
8589999903
8589999928
8589999843
8589999872
8589999953
8589999975
8589999892
8589999923
8590000002
8590000024
8589999941
8589999975
8590000051
8590000075
8589999989
8590000025
8590000101
8590000127
8590000041
8590000076
8590000151
8590000176
8590000090
8590000125
8590000200
8590000226
8590000140
8590000174
8590000249
8590000276
8590000190
8590000225
8590000299
8590000325
8590000241
8590000276
8590000348
8590000374
8590000291
8590000325
8590000400
8590000424
8590000342
8590000376
8590000449
8590000475
8590000393
8590000427
8590000500
8590000526
8590000443
8590000475
8590000550
8590000577
8590000491
8590000526
8590000599
8590000627
8590000542
8590000576
8590000650
8590000677
8590000592
8590000624
8590000702
8590000726
8590000643
8590000674
8590000751
8590000776
8590000693
8590000723
8590000803
8590000827
8590000742
8590000771
8590000852
8590000874
8590000792
8590000822
8590000901
8590000926
8590000842
8590000871
8590000952
8590000974
8590000893
8590000922
8590001002
8590001024
8590000942
8590000971
8590001053
8590001074
8590000991
8590001020
8590001102
8590001127
8590001043
8590001070
8590001153
8590001178
8590001092
8590001119
8590001202
8590001228
8590001142
8590001171
8590001253
8590001278
8590001192
8590001222
8590001303
8590001329
8590001242
8590001272
8590001353
8590001380
8590001292
8590001323
8590001402
8590001431
8590001340
8590001371
8590001452
8590001480
8590001391
8590001421
8590001503
8590001529
8590001441
8590001473
8590001552
8590001577
8590001491
8590001524
8590001603
8590001627
8590001540
8590001574
8590001652
8590001677
8590001591
8590001623
8590001702
8590001727
8590001642
8590001674
8590001751
8590001777
8590001690
8590001723
8590001802
8590001828
8590001740
8590001773
8590001852
8590001877
8590001791
8590001823
8590001901
8590001927
8590001841
8590001873
8590001950
8590001977
8590001892
8590001924
8590002000
8590002028
8590001941
8590001973
8590002049
8590002080
8590001991
8590002022
8590002099
8590002131
8590002043
8590002072
8590002150
8590002182
8590002094
8590002123
8590002199
8590002231
8590002145
8590002173
8590002249
8590002280
8590002195
8590002222
8590002298
8590002331
8590002244
8590002270
8590002348
8590002382
8590002296
8590002321
8590002397
8590002432
8590002345
8590002371
8590002448
8590002482
8590002395
8590002421
8590002499
8590002532
8590002444
8590002470
8590002548
8590002582
8590002493
8590002520
8590002598
8590002633
8590002543
8590002572
8590002648
8590002683
8590002593
8590002620
8590002697
8590002734
8590002643
8590002670
8590002746
8590002784
8590002693
8590002720
8590002795
8590002834
8590002744
8590002769
8590002844
8590002884
8590002794
8590002818
8590002893
8590002934
8590002844
8590002867
8590002944
8590002984
8590002895
8590002917
8590002995
8590003034
8590002947
8590002966
8590003044
8590003084
8590002996
8590003016
8590003094
8590003133
8590003045
8590003067
8590003145
8590003184
8590003095
8590003117
8590003194
8590003234
8590003144
8590003168
8590003243
8590003283
8590003194
8590003218
8590003294
8590003333
8590003242
8590003267
8590003345
8590003384
8590003291
8590003317
8590003396
8590003434
8590003342
8590003367
8590003448
8590003483
8590003391
8590003416
8590003498
8590003534
8590003441
8590003465
8590003547
8590003586
8590003492
8590003516
8590003596
8590003634
8590003541
8590003566
8590003647
8590003683
8590003592
8590003616
8590003697
8590003732
8590003641
8590003666
8590003747
8590003783
8590003691
8590003714
8590003797
8590003833
8590003740
8590003763
8590003845
8590003883
8590003790
8590003816
8590003895
8590003933
8590003840
8590003868
8590003944
8590003983
8590003889
8590003918
8590003994
8590004033
8590003939
8590003969
8590004043
8590004083
8590003989
8590004019
8590004094
8590004133
8590004039
8590004069
8590004142
8590004182
8590004090
8590004120
8590004191
8590004233
8590004139
8590004169
8590004242
8590004282
8590004188
8590004220
8590004291
8590004333
8590004237
8590004271
8590004340
8590004383
8590004286
8590004320
8590004389
8590004433
8590004337
8590004370
8590004439
8590004484
8590004387
8590004418
8590004488
8590004532
8590004436
8590004467
8590004540
8590004582
8590004487
8590004518
8590004591
8590004633
8590004536
8590004567
8590004641
8590004684
8590004585
8590004616
8590004692
8590004733
8590004633
8590004665
8590004742
8590004784
8590004684
8590004714
8590004790
8590004834
8590004734
8590004765
8590004840
8590004883
8590004782
8590004815
8590004890
8590004934
8590004832
8590004864
8590004939
8590004983
8590004882
8590004915
8590004990
8590005035
8590004932
8590004966
8590005039
8590005085
8590004983
8590005016
8590005088
8590005134
8590005034
8590005065
8590005138
8590005185
8590005084
8590005117
8590005188
8590005235
8590005135
8590005166
8590005238
8590005283
8590005185
8590005214
8590005289
8590005331
8590005236
8590005264
8590005341
8590005380
8590005287
8590005315
8590005391
8590005430
8590005337
8590005365
8590005441
8590005479
8590005387
8590005417
8590005489
8590005530
8590005439
8590005466
8590005539
8590005581
8590005488
8590005517
8590005591
8590005628
8590005538
8590005569
8590005641
8590005679
8590005588
8590005619
8590005690
8590005729
8590005636
8590005668
8590005740
8590005780
8590005685
8590005718
8590005790
8590005831
8590005737
8590005768
8590005840
8590005881
8590005787
8590005817
8590005890
8590005930
8590005837
8590005866
8590005941
8590005980
8590005886
8590005914
8590005989
8590006029
8590005934
8590005966
8590006039
8590006078
8590005985
8590006015
8590006089
8590006128
8590006034
8590006066
8590006138
8590006179
8590006084
8590006116
8590006188
8590006229
8590006133
8590006165
8590006237
8590006279
8590006183
8590006216
8590006288
8590006330
8590006233
8590006266
8590006336
8590006381
8590006284
8590006316
8590006385
8590006430
8590006335
8590006367
8590006436
8590006479
8590006385
8590006417
8590006488
8590006531
8590006437
8590006467
8590006537
8590006580
8590006486
8590006517
8590006587
8590006631
8590006535
8590006567
8590006636
8590006677
8590006584
8590006618
8590006686
8590006727
8590006634
8590006669
8590006737
8590006776
8590006685
8590006719
8590006786
8590006826
8590006735
8590006769
8590006837
8590006876
8590006785
8590006818
8590006885
8590006927
8590006834
8590006867
8590006935
8590006976
8590006884
8590006918
8590006987
8590007026
8590006934
8590006970
8590007036
8590007075
8590006985
8590007020
8590007086
8590007125
8590007035
8590007069
8590007137
8590007173
8590007084
8590007119
8590007186
8590007221
8590007134
8590007169
8590007235
8590007271
8590007183
8590007218
8590007285
8590007323
8590007233
8590007269
8590007333
8590007372
8590007283
8590007318
8590007384
8590007421
8590007332
8590007367
8590007434
8590007472
8590007383
8590007417
8590007484
8590007522
8590007433
8590007467
8590007532
8590007573
8590007482
8590007518
8590007583
8590007623
8590007533
8590007568
8590007633
8590007673
8590007582
8590007619
8590007682
8590007722
8590007634
8590007670
8590007732
8590007774
8590007685
8590007721
8590007781
8590007824
8590007735
8590007770
8590007830
8590007876
8590007787
8590007821
8590007880
8590007925
8590007837
8590007872
8590007930
8590007977
8590007888
8590007921
8590007981
8590008029
8590007940
8590007972
8590008032
8590008079
8590007990
8590008023
8590008083
8590008128
8590008041
8590008073
8590008134
8590008176
8590008089
8590008123
8590008183
8590008226
8590008140
8590008173
8590008235
8590008278
8590008191
8590008225
8590008286
8590008328
8590008243
8590008276
8590008335
8590008379
8590008295
8590008324
8590008384
8590008428
8590008345
8590008373
8590008434
8590008479
8590008395
8590008422
8590008483
8590008529
8590008444
8590008472
8590008533
8590008580
8590008494
8590008519
8590008583
8590008630
8590008545
8590008569
8590008634
8590008680
8590008596
8590008619
8590008682
8590008730
8590008647
8590008670
8590008733
8590008783
8590008696
8590008719
8590008783
8590008833
8590008745
8590008769
8590008832
8590008884
8590008796
8590008821
8590008882
8590008934
8590008846
8590008871
8590008932
8590008984
8590008896
8590008920
8590008982
8590009036
8590008946
8590008969
8590009032
8590009084
8590008997
8590009018
8590009082
8590009136
8590009047
8590009068
8590009133
8590009185
8590009098
8590009118
8590009183
8590009234
8590009147
8590009167
8590009234
8590009285
8590009196
8590009216
8590009283
8590009332
8590009247
8590009265
8590009333
8590009380
8590009297
8590009315
8590009382
8590009430
8590009348
8590009365
8590009430
8590009480
8590009398
8590009413
8590009482
8590009528
8590009448
8590009462
8590009533
8590009580
8590009499
8590009510
8590009582
8590009629
8590009550
8590009560
8590009633
8590009678
8590009600
8590009612
8590009683
8590009728
8590009650
8590009661
8590009733
8590009777
8590009699
8590009712
8590009783
8590009827
8590009750
8590009761
8590009833
8590009876
8590009800
8590009811
8590009883
8590009928
8590009849
8590009861
8590009931
8590009980
8590009899
8590009912
8590009982
8590010030
8590009948
8590009963
8590010032
8590010081
8590009997
8590010011
8590010082
8590010130
8590010046
8590010061
8590010131
8590010180
8590010097
8590010111
8590010181
8590010229
8590010148
8590010161
8590010232
8590010280
8590010199
8590010211
8590010283
8590010330
8590010251
8590010261
8590010332
8590010381
8590010302
8590010311
8590010382
8590010432
8590010352
8590010361
8590010431
8590010483
8590010401
8590010410
8590010480
8590010531
8590010451
8590010461
8590010529
8590010581
8590010503
8590010511
8590010579
8590010630
8590010552
8590010560
8590010630
8590010681
8590010603
8590010609
8590010681
8590010731
8590010651
8590010659
8590010730
8590010782
8590010699
8590010709
8590010779
8590010832
8590010748
8590010758
8590010830
8590010882
8590010798
8590010810
8590010879
8590010933
8590010850
8590010861
8590010928
8590010983
8590010900
8590010910
8590010978
8590011033
8590010951
8590010960
8590011028
8590011084
8590011001
8590011011
8590011078
8590011134
8590011051
8590011060
8590011127
8590011183
8590011101
8590011112
8590011178
8590011232
8590011151
8590011162
8590011228
8590011282
8590011200
8590011212
8590011278
8590011331
8590011252
8590011262
8590011330
8590011381
8590011302
8590011313
8590011380
8590011431
8590011351
8590011364
8590011431
8590011480
8590011402
8590011414
8590011479
8590011529
8590011452
8590011464
8590011529
8590011581
8590011502
8590011514
8590011581
8590011632
8590011551
8590011563
8590011629
8590011682
8590011604
8590011612
8590011679
8590011732
8590011654
8590011661
8590011730
8590011782
8590011704
8590011712
8590011781
8590011833
8590011755
8590011762
8590011831
8590011883
8590011806
8590011813
8590011882
8590011934
8590011856
8590011864
8590011932
8590011987
8590011908
8590011914
8590011980
8590012038
8590011958
8590011962
8590012030
8590012090
8590012009
8590012012
8590012079
8590012140
8590012060
8590012060
8590012130
8590012191
8590012109
8590012111
8590012180
8590012240
8590012159
8590012161
8590012229
8590012292
8590012208
8590012209
8590012279
8590012343
8590012258
8590012260
8590012330
8590012391
8590012307
8590012310
8590012380
8590012442
8590012356
8590012360
8590012429
8590012491
8590012407
8590012410
8590012478
8590012543
8590012458
8590012460
8590012527
8590012594
8590012509
8590012509
8590012578
8590012643
8590012558
8590012557
8590012630
8590012692
8590012610
8590012609
8590012680
8590012742
8590012660
8590012660
8590012729
8590012791
8590012711
8590012709
8590012779
8590012842
8590012763
8590012756
8590012829
8590012890
8590012813
8590012806
8590012879
8590012941
8590012864
8590012856
8590012926
8590012991
8590012913
8590012907
8590012978
8590013042
8590012962
8590012958
8590013028
8590013093
8590013013
8590013008
8590013077
8590013142
8590013063
8590013057
8590013128
8590013190
8590013113
8590013106
8590013177
8590013240
8590013162
8590013154
8590013224
8590013289
8590013211
8590013205
8590013274
8590013339
8590013261
8590013254
8590013322
8590013390
8590013311
8590013304
8590013371
8590013439
8590013363
8590013355
8590013423
8590013490
8590013413
8590013406
8590013476
8590013540
8590013463
8590013456
8590013527
8590013592
8590013513
8590013506
8590013578
8590013643
8590013564
8590013555
8590013628
8590013692
8590013613
8590013604
8590013679
8590013742
8590013664
8590013652
8590013730
8590013793
8590013713
8590013701
8590013781
8590013845
8590013765
8590013750
8590013831
8590013895
8590013816
8590013799
8590013882
8590013945
8590013867
8590013850
8590013932
8590013996
8590013919
8590013900
8590013983
8590014045
8590013966
8590013949
8590014033
8590014095
8590014014
8590014000
8590014084
8590014144
8590014064
8590014049
8590014136
8590014195
8590014114
8590014100
8590014186
8590014246
8590014164
8590014148
8590014236
8590014296
8590014215
8590014199
8590014287
8590014344
8590014265
8590014249
8590014337
8590014395
8590014316
8590014301
8590014385
8590014444
8590014365
8590014351
8590014434
8590014494
8590014415
8590014401
8590014485
8590014545
8590014467
8590014450
8590014536
8590014593
8590014516
8590014499
8590014585
8590014641
8590014566
8590014550
8590014634
8590014691
8590014617
8590014599
8590014683
8590014740
8590014667
8590014649
8590014733
8590014789
8590014717
8590014699
8590014783
8590014839
8590014768
8590014748
8590014832
8590014888
8590014819
8590014797
8590014882
8590014936
8590014869
8590014848
8590014931
8590014985
8590014919
8590014898
8590014980
8590015036
8590014968
8590014948
8590015031
8590015086
8590015019
8590014997
8590015078
8590015135
8590015068
8590015046
8590015129
8590015185
8590015117
8590015095
8590015179
8590015235
8590015168
8590015145
8590015228
8590015285
8590015217
8590015193
8590015278
8590015337
8590015267
8590015242
8590015328
8590015388
8590015317
8590015292
8590015379
8590015440
8590015368
8590015340
8590015431
8590015490
8590015420
8590015390
8590015482
8590015540
8590015469
8590015439
8590015532
8590015589
8590015518
8590015488
8590015582
8590015638
8590015570
8590015538
8590015633
8590015688
8590015619
8590015589
8590015684
8590015738
8590015669
8590015639
8590015734
8590015789
8590015720
8590015690
8590015786
8590015841
8590015772
8590015740
8590015837
8590015891
8590015823
8590015790
8590015889
8590015940
8590015872
8590015840
8590015938
8590015989
8590015921
8590015892
8590015988
8590016036
8590015971
8590015942
8590016041
8590016086
8590016021
8590015991
8590016090
8590016135
8590016074
8590016040
8590016139
8590016185
8590016122
8590016090
8590016188
8590016235
8590016173
8590016140
8590016236
8590016285
8590016222
8590016190
8590016286
8590016336
8590016271
8590016239
8590016336
8590016385
8590016321
8590016290
8590016386
8590016435
8590016371
8590016341
8590016436
8590016485
8590016420
8590016391
8590016487
8590016535
8590016472
8590016440
8590016537
8590016586
8590016521
8590016489
8590016588
8590016637
8590016573
8590016539
8590016638
8590016686
8590016621
8590016590
8590016689
8590016738
8590016673
8590016641
8590016741
8590016789
8590016723
8590016691
8590016791
8590016839
8590016775
8590016742
8590016842
8590016890
8590016825
8590016794
8590016891
8590016939
8590016876
8590016842
8590016942
8590016988
8590016926
8590016894
8590016992
8590017039
8590016977
8590016943
8590017043
8590017089
8590017028
8590016994
8590017091
8590017140
8590017079
8590017044
8590017142
8590017189
8590017128
8590017093
8590017191
8590017239
8590017179
8590017143
8590017241
8590017289
8590017229
8590017192
8590017290
8590017340
8590017278
8590017241
8590017340
8590017390
8590017328
8590017289
8590017390
8590017441
8590017378
8590017338
8590017441
8590017493
8590017427
8590017389
8590017491
8590017543
8590017476
8590017437
8590017539
8590017593
8590017526
8590017486
8590017590
8590017643
8590017576
8590017535
8590017641
8590017691
8590017626
8590017586
8590017692
8590017742
8590017675
8590017638
8590017740
8590017791
8590017724
8590017688
8590017790
8590017841
8590017772
8590017739
8590017840
8590017891
8590017823
8590017788
8590017890
8590017944
8590017872
8590017839
8590017940
8590017994
8590017922
8590017889
8590017989
8590018044
8590017973
8590017941
8590018038
8590018095
8590018022
8590017992
8590018088
8590018144
8590018072
8590018042
8590018135
8590018194
8590018122
8590018091
8590018184
8590018243
8590018170
8590018143
8590018234
8590018295
8590018218
8590018192
8590018283
8590018342
8590018269
8590018244
8590018333
8590018392
8590018319
8590018294
8590018383
8590018442
8590018370
8590018344
8590018434
8590018493
8590018420
8590018392
8590018483
8590018542
8590018471
8590018441
8590018535
8590018591
8590018521
8590018493
8590018585
8590018639
8590018573
8590018545
8590018634
8590018688
8590018621
8590018594
8590018683
8590018739
8590018670
8590018646
8590018735
8590018789
8590018722
8590018696
8590018786
8590018838
8590018771
8590018747
8590018835
8590018887
8590018820
8590018798
8590018886
8590018936
8590018872
8590018848
8590018934
8590018986
8590018923
8590018896
8590018985
8590019036
8590018971
8590018946
8590019034
8590019088
8590019021
8590018995
8590019083
8590019138
8590019072
8590019046
8590019134
8590019189
8590019121
8590019096
8590019184
8590019240
8590019169
8590019146
8590019236
8590019289
8590019218
8590019196
8590019286
8590019342
8590019268
8590019246
8590019336
8590019393
8590019318
8590019296
8590019387
8590019441
8590019369
8590019344
8590019438
8590019491
8590019420
8590019394
8590019487
8590019542
8590019473
8590019444
8590019537
8590019591
8590019521
8590019495
8590019586
8590019644
8590019571
8590019545
8590019635
8590019695
8590019620
8590019596
8590019686
8590019744
8590019670
8590019646
8590019735
8590019794
8590019721
8590019695
8590019785
8590019845
8590019770
8590019744
8590019835
8590019897
8590019819
8590019793
8590019884
8590019946
8590019868
8590019842
8590019935
8590019998
8590019917
8590019892
8590019985
8590020049
8590019967
8590019942
8590020036
8590020100
8590020017
8590019993
8590020084
8590020150
8590020067
8590020041
8590020132
8590020200
8590020118
8590020091
8590020182
8590020251
8590020167
8590020142
8590020232
8590020301
8590020217
8590020191
8590020283
8590020351
8590020268
8590020241
8590020334
8590020402
8590020316
8590020291
8590020384
8590020451
8590020365
8590020341
8590020435
8590020502
8590020417
8590020392
8590020485
8590020552
8590020465
8590020441
8590020534
8590020600
8590020517
8590020490
8590020585
8590020650
8590020567
8590020540
8590020633
8590020701
8590020618
8590020591
8590020682
8590020750
8590020668
8590020640
8590020732
8590020800
8590020717
8590020690
8590020782
8590020849
8590020768
8590020740
8590020833
8590020899
8590020819
8590020789
8590020883
8590020948
8590020869
8590020838
8590020933
8590020998
8590020921
8590020886
8590020982
8590021049
8590020971
8590020936
8590021032
8590021098
8590021023
8590020987
8590021082
8590021148
8590021074
8590021037
8590021131
8590021198
8590021126
8590021086
8590021180
8590021247
8590021175
8590021134
8590021232
8590021297
8590021225
8590021186
8590021281
8590021346
8590021276
8590021236
8590021331
8590021398
8590021326
8590021286
8590021379
8590021446
8590021375
8590021337
8590021431
8590021496
8590021425
8590021388
8590021482
8590021546
8590021473
8590021438
8590021530
8590021597
8590021525
8590021487
8590021581
8590021647
8590021576
8590021535
8590021630
8590021696
8590021626
8590021585
8590021679
8590021745
8590021675
8590021634
8590021729
8590021796
8590021725
8590021685
8590021778
8590021846
8590021775
8590021737
8590021828
8590021896
8590021825
8590021787
8590021878
8590021947
8590021875
8590021837
8590021929
8590021998
8590021924
8590021888
8590021978
8590022047
8590021974
8590021938
8590022028
8590022096
8590022024
8590021989
8590022079
8590022146
8590022073
8590022040
8590022131
8590022195
8590022121
8590022090
8590022179
8590022244
8590022172
8590022140
8590022228
8590022295
8590022222
8590022191
8590022278
8590022344
8590022272
8590022242
8590022326
8590022393
8590022323
8590022292
8590022377
8590022444
8590022374
8590022343
8590022426
8590022494
8590022426
8590022393
8590022476
8590022545
8590022478
8590022444
8590022527
8590022594
8590022530
8590022495
8590022577
8590022644
8590022579
8590022545
8590022625
8590022694
8590022629
8590022595
8590022675
8590022744
8590022680
8590022646
8590022724
8590022793
8590022730
8590022695
8590022775
8590022844
8590022781
8590022744
8590022824
8590022893
8590022831
8590022795
8590022875
8590022944
8590022883
8590022844
8590022928
8590022994
8590022931
8590022894
8590022978
8590023044
8590022983
8590022943
8590023025
8590023094
8590023032
8590022992
8590023076
8590023144
8590023083
8590023043
8590023126
8590023192
8590023131
8590023093
8590023176
8590023242
8590023183
8590023145
8590023226
8590023291
8590023232
8590023195
8590023277
8590023340
8590023282
8590023244
8590023328
8590023391
8590023334
8590023295
8590023379
8590023441
8590023383
8590023345
8590023427
8590023488
8590023433
8590023396
8590023476
8590023540
8590023484
8590023447
8590023525
8590023587
8590023534
8590023495
8590023576
8590023637
8590023585
8590023546
8590023627
8590023687
8590023635
8590023596
8590023677
8590023736
8590023685
8590023647
8590023728
8590023787
8590023735
8590023697
8590023778
8590023836
8590023784
8590023746
8590023828
8590023888
8590023836
8590023797
8590023879
8590023938
8590023886
8590023848
8590023927
8590023987
8590023937
8590023899
8590023976
8590024036
8590023988
8590023949
8590024028
8590024085
8590024036
8590023999
8590024078
8590024135
8590024085
8590024051
8590024127
8590024183
8590024134
8590024103
8590024177
8590024233
8590024187
8590024152
8590024227
8590024282
8590024238
8590024201
8590024277
8590024333
8590024289
8590024252
8590024328
8590024382
8590024338
8590024303
8590024378
8590024432
8590024388
8590024354
8590024428
8590024483
8590024438
8590024403
8590024477
8590024532
8590024488
8590024453
8590024525
8590024583
8590024537
8590024502
8590024575
8590024633
8590024587
8590024551
8590024625
8590024683
8590024638
8590024601
8590024677
8590024734
8590024688
8590024653
8590024728
8590024783
8590024739
8590024703
8590024777
8590024834
8590024790
8590024751
8590024825
8590024884
8590024838
8590024801
8590024875
8590024934
8590024888
8590024850
8590024925
8590024984
8590024936
8590024900
8590024975
8590025034
8590024986
8590024949
8590025026
8590025084
8590025037
8590025000
8590025073
8590025133
8590025087
8590025051
8590025124
8590025184
8590025138
8590025099
8590025174
8590025233
8590025187
8590025147
8590025225
8590025282
8590025238
8590025198
8590025275
8590025334
8590025287
8590025249
8590025325
8590025383
8590025335
8590025301
8590025376
8590025431
8590025385
8590025351
8590025426
8590025480
8590025436
8590025402
8590025477
8590025529
8590025485
8590025453
8590025525
8590025578
8590025536
8590025503
8590025575
8590025629
8590025585
8590025553
8590025626
8590025680
8590025634
8590025603
8590025677
8590025730
8590025683
8590025656
8590025728
8590025779
8590025735
8590025706
8590025778
8590025829
8590025786
8590025756
8590025828
8590025877
8590025836
8590025807
8590025877
8590025927
8590025884
8590025856
8590025928
8590025977
8590025934
8590025907
8590025977
8590026026
8590025984
8590025956
8590026027
8590026075
8590026034
8590026007
8590026077
8590026125
8590026084
8590026058
8590026126
8590026174
8590026132
8590026106
8590026174
8590026227
8590026182
8590026155
8590026223
8590026278
8590026231
8590026207
8590026272
8590026326
8590026280
8590026257
8590026322
8590026375
8590026330
8590026309
8590026373
8590026424
8590026382
8590026359
8590026425
8590026475
8590026433
8590026408
8590026474
8590026524
8590026481
8590026458
8590026525
8590026575
8590026531
8590026507
8590026574
8590026625
8590026581
8590026557
8590026625
8590026677
8590026633
8590026606
8590026674
8590026728
8590026682
8590026657
8590026724
8590026779
8590026732
8590026707
8590026775
8590026831
8590026783
8590026759
8590026825
8590026880
8590026833
8590026809
8590026874
8590026929
8590026883
8590026859
8590026925
8590026979
8590026934
8590026909
8590026975
8590027029
8590026984
8590026960
8590027026
8590027079
8590027034
8590027009
8590027077
8590027129
8590027082
8590027059
8590027128
8590027180
8590027132
8590027108
8590027175
8590027230
8590027181
8590027159
8590027224
8590027280
8590027231
8590027208
8590027275
8590027330
8590027281
8590027257
8590027325
8590027380
8590027331
8590027308
8590027375
8590027429
8590027381
8590027359
8590027426
8590027478
8590027430
8590027410
8590027475
8590027526
8590027480
8590027460
8590027525
8590027576
8590027530
8590027511
8590027573
8590027626
8590027580
8590027562
8590027623
8590027678
8590027630
8590027613
8590027674
8590027728
8590027680
8590027662
8590027724
8590027779
8590027733
8590027713
8590027774
8590027830
8590027785
8590027763
8590027824
8590027881
8590027837
8590027812
8590027874
8590027932
8590027886
8590027863
8590027925
8590027982
8590027936
8590027912
8590027975
8590028032
8590027986
8590027962
8590028024
8590028082
8590028038
8590028011
8590028072
8590028132
8590028087
8590028062
8590028121
8590028183
8590028136
8590028111
8590028171
8590028232
8590028186
8590028161
8590028221
8590028282
8590028235
8590028209
8590028272
8590028331
8590028284
8590028258
8590028321
8590028381
8590028333
8590028307
8590028372
8590028430
8590028384
8590028356
8590028422
8590028479
8590028433
8590028407
8590028471
8590028528
8590028485
8590028456
8590028521
8590028579
8590028533
8590028505
8590028569
8590028629
8590028581
8590028555
8590028620
8590028678
8590028630
8590028604
8590028670
8590028727
8590028680
8590028655
8590028721
8590028778
8590028730
8590028705
8590028771
8590028826
8590028781
8590028756
8590028818
8590028877
8590028831
8590028807
8590028870
8590028927
8590028879
8590028857
8590028922
8590028978
8590028928
8590028906
8590028970
8590029028
8590028977
8590028956
8590029019
8590029079
8590029029
8590029006
8590029070
8590029128
8590029077
8590029055
8590029122
8590029178
8590029129
8590029107
8590029172
8590029227
8590029179
8590029156
8590029222
8590029277
8590029229
8590029206
8590029271
8590029325
8590029279
8590029257
8590029321
8590029376
8590029327
8590029307
8590029373
8590029425
8590029377
8590029357
8590029423
8590029473
8590029428
8590029408
8590029473
8590029524
8590029477
8590029457
8590029523
8590029574
8590029529
8590029509
8590029571
8590029625
8590029578
8590029559
8590029621
8590029677
8590029625
8590029610
8590029672
8590029728
8590029677
8590029659
8590029723
8590029777
8590029727
8590029709
8590029772
8590029828
8590029776
8590029757
8590029823
8590029879
8590029825
8590029809
8590029872
8590029929
8590029874
8590029859
8590029923
8590029980
8590029924
8590029910
8590029971
8590030029
8590029973
8590029961
8590030020
8590030079
8590030023
8590030010
8590030069
8590030129
8590030075
8590030062
8590030119
8590030178
8590030126
8590030111
8590030169
8590030231
8590030177
8590030161
8590030218
8590030280
8590030226
8590030211
8590030267
8590030331
8590030278
8590030261
8590030318
8590030380
8590030329
8590030311
8590030368
8590030431
8590030378
8590030360
8590030417
8590030481
8590030427
8590030410
8590030467
8590030529
8590030478
8590030458
8590030517
8590030578
8590030528
8590030508
8590030566
8590030627
8590030578
8590030559
8590030616
8590030677
8590030629
8590030606
8590030666
8590030726
8590030679
8590030657
8590030716
8590030778
8590030730
8590030708
8590030767
8590030827
8590030780
8590030756
8590030817
8590030877
8590030830
8590030806
8590030866
8590030927
8590030880
8590030858
8590030917
8590030978
8590030931
8590030908
8590030968
8590031028
8590030979
8590030957
8590031018
8590031077
8590031029
8590031008
8590031067
8590031126
8590031080
8590031058
8590031118
8590031176
8590031131
8590031107
8590031168
8590031226
8590031181
8590031158
8590031219
8590031276
8590031232
8590031209
8590031269
8590031326
8590031282
8590031259
8590031319
8590031377
8590031331
8590031308
8590031371
8590031427
8590031382
8590031357
8590031422
8590031476
8590031434
8590031407
8590031472
8590031525
8590031485
8590031456
8590031522
8590031574
8590031534
8590031506
8590031571
8590031623
8590031584
8590031558
8590031620
8590031673
8590031634
8590031610
8590031670
8590031721
8590031684
8590031662
8590031721
8590031772
8590031734
8590031711
8590031771
8590031821
8590031786
8590031762
8590031821
8590031873
8590031835
8590031812
8590031871
8590031924
8590031882
8590031862
8590031920
8590031973
8590031932
8590031911
8590031971
8590032022
8590031983
8590031960
8590032020
8590032072
8590032034
8590032012
8590032069
8590032122
8590032083
8590032061
8590032121
8590032171
8590032134
8590032111
8590032172
8590032223
8590032182
8590032161
8590032222
8590032274
8590032232
8590032211
8590032272
8590032323
8590032282
8590032261
8590032321
8590032371
8590032330
8590032311
8590032372
8590032423
8590032381
8590032361
8590032422
8590032471
8590032432
8590032410
8590032473
8590032521
8590032483
8590032461
8590032523
8590032570
8590032532
8590032512
8590032575
8590032621
8590032582
8590032562
8590032624
8590032671
8590032631
8590032612
8590032673
8590032721
8590032681
8590032663
8590032725
8590032770
8590032732
8590032713
8590032776
8590032820
8590032782
8590032763
8590032828
8590032871
8590032835
8590032813
8590032875
8590032921
8590032884
8590032861
8590032924
8590032970
8590032936
8590032911
8590032975
8590033019
8590032985
8590032960
8590033023
8590033068
8590033033
8590033012
8590033073
8590033118
8590033085
8590033062
8590033122
8590033168
8590033138
8590033110
8590033172
8590033217
8590033187
8590033159
8590033221
8590033266
8590033236
8590033210
8590033271
8590033315
8590033286
8590033259
8590033322
8590033364
8590033335
8590033309
8590033372
8590033413
8590033386
8590033357
8590033421
8590033463
8590033436
8590033408
8590033471
8590033514
8590033487
8590033460
8590033521
8590033565
8590033536
8590033510
8590033572
8590033614
8590033587
8590033560
8590033621
8590033664
8590033639
8590033609
8590033670
8590033714
8590033690
8590033662
8590033720
8590033764
8590033738
8590033713
8590033770
8590033815
8590033788
8590033765
8590033820
8590033865
8590033839
8590033815
8590033869
8590033916
8590033889
8590033865
8590033919
8590033964
8590033937
8590033915
8590033970
8590034013
8590033987
8590033965
8590034019
8590034064
8590034037
8590034016
8590034068
8590034113
8590034087
8590034066
8590034119
8590034165
8590034138
8590034114
8590034170
8590034214
8590034189
8590034164
8590034221
8590034265
8590034239
8590034215
8590034270
8590034314
8590034289
8590034264
8590034319
8590034364
8590034338
8590034315
8590034368
8590034412
8590034386
8590034365
8590034419
8590034461
8590034436
8590034414
8590034468
8590034510
8590034486
8590034465
8590034518
8590034559
8590034539
8590034516
8590034567
8590034611
8590034588
8590034566
8590034618
8590034662
8590034637
8590034615
8590034667
8590034712
8590034687
8590034665
8590034716
8590034762
8590034737
8590034715
8590034765
8590034812
8590034787
8590034766
8590034816
8590034862
8590034838
8590034815
8590034866
8590034913
8590034887
8590034864
8590034917
8590034964
8590034938
8590034916
8590034966
8590035014
8590034988
8590034966
8590035016
8590035063
8590035040
8590035018
8590035064
8590035113
8590035090
8590035068
8590035113
8590035163
8590035139
8590035116
8590035162
8590035213
8590035190
8590035165
8590035211
8590035263
8590035240
8590035215
8590035260
8590035314
8590035291
8590035265
8590035311
8590035365
8590035342
8590035314
8590035360
8590035414
8590035393
8590035363
8590035411
8590035466
8590035441
8590035413
8590035461
8590035515
8590035489
8590035463
8590035511
8590035566
8590035539
8590035511
8590035563
8590035615
8590035589
8590035561
8590035614
8590035664
8590035640
8590035609
8590035664
8590035714
8590035690
8590035659
8590035714
8590035765
8590035743
8590035707
8590035764
8590035817
8590035792
8590035758
8590035814
8590035865
8590035844
8590035807
8590035863
8590035915
8590035894
8590035855
8590035914
8590035964
8590035944
8590035904
8590035964
8590036014
8590035993
8590035955
8590036014
8590036064
8590036043
8590036005
8590036064
8590036115
8590036095
8590036058
8590036114
8590036165
8590036146
8590036107
8590036163
8590036217
8590036195
8590036156
8590036213
8590036267
8590036246
8590036207
8590036263
8590036317
8590036293
8590036258
8590036311
8590036365
8590036343
8590036306
8590036361
8590036418
8590036393
8590036355
8590036409
8590036468
8590036445
8590036405
8590036460
8590036518
8590036495
8590036456
8590036510
8590036567
8590036545
8590036507
8590036559
8590036616
8590036595
8590036556
8590036608
8590036667
8590036645
8590036605
8590036658
8590036716
8590036696
8590036654
8590036708
8590036766
8590036746
8590036705
8590036756
8590036817
8590036795
8590036756
8590036805
8590036866
8590036848
8590036807
8590036853
8590036914
8590036900
8590036855
8590036904
8590036964
8590036950
8590036906
8590036955
8590037014
8590037000
8590036954
8590037006
8590037063
8590037051
8590037003
8590037056
8590037112
8590037100
8590037054
8590037106
8590037163
8590037151
8590037106
8590037157
8590037214
8590037200
8590037157
8590037206
8590037263
8590037250
8590037207
8590037255
8590037312
8590037299
8590037256
8590037305
8590037362
8590037351
8590037304
8590037354
8590037412
8590037401
8590037354
8590037405
8590037463
8590037451
8590037406
8590037454
8590037513
8590037502
8590037454
8590037504
8590037562
8590037553
8590037503
8590037552
8590037612
8590037604
8590037553
8590037602
8590037663
8590037653
8590037602
8590037653
8590037713
8590037703
8590037653
8590037703
8590037764
8590037753
8590037702
8590037752
8590037814
8590037803
8590037752
8590037803
8590037864
8590037853
8590037802
8590037853
8590037914
8590037904
8590037854
8590037902
8590037966
8590037952
8590037905
8590037951
8590038015
8590038003
8590037957
8590038001
8590038066
8590038054
8590038006
8590038052
8590038115
8590038104
8590038056
8590038102
8590038165
8590038155
8590038104
8590038153
8590038215
8590038204
8590038152
8590038202
8590038264
8590038253
8590038202
8590038251
8590038315
8590038304
8590038252
8590038301
8590038364
8590038353
8590038300
8590038351
8590038413
8590038402
8590038350
8590038400
8590038466
8590038454
8590038399
8590038449
8590038514
8590038504
8590038449
8590038498
8590038564
8590038554
8590038499
8590038550
8590038612
8590038604
8590038551
8590038599
8590038663
8590038653
8590038603
8590038649
8590038713
8590038703
8590038654
8590038696
8590038763
8590038752
8590038703
8590038747
8590038813
8590038803
8590038751
8590038798
8590038862
8590038854
8590038802
8590038846
8590038913
8590038903
8590038850
8590038896
8590038964
8590038950
8590038901
8590038946
8590039014
8590039000
8590038951
8590038995
8590039064
8590039051
8590039003
8590039045
8590039116
8590039098
8590039053
8590039095
8590039165
8590039148
8590039103
8590039147
8590039215
8590039198
8590039153
8590039198
8590039264
8590039249
8590039203
8590039248
8590039315
8590039300
8590039253
8590039296
8590039365
8590039350
8590039302
8590039345
8590039414
8590039400
8590039352
8590039396
8590039466
8590039450
8590039400
8590039447
8590039515
8590039501
8590039451
8590039497
8590039566
8590039551
8590039501
8590039548
8590039616
8590039602
8590039551
8590039598
8590039665
8590039652
8590039603
8590039647
8590039716
8590039701
8590039654
8590039696
8590039766
8590039752
8590039705
8590039746
8590039817
8590039801
8590039756
8590039796
8590039868
8590039852
8590039807
8590039847
8590039919
8590039901
8590039856
8590039895
8590039967
8590039952
8590039906
8590039945
8590040018
8590040002
8590039957
8590039995
8590040068
8590040051
8590040006
8590040044
8590040118
8590040101
8590040056
8590040095
8590040168
8590040150
8590040105
8590040143
8590040221
8590040200
8590040156
8590040194
8590040272
8590040249
8590040205
8590040245
8590040322
8590040298
8590040254
8590040294
8590040374
8590040345
8590040303
8590040345
8590040425
8590040395
8590040354
8590040396
8590040474
8590040446
8590040404
8590040446
8590040524
8590040496
8590040454
8590040495
8590040576
8590040546
8590040504
8590040543
8590040626
8590040593
8590040554
8590040593
8590040675
8590040645
8590040603
8590040644
8590040726
8590040693
8590040652
8590040694
8590040775
8590040744
8590040701
8590040744
8590040826
8590040795
8590040752
8590040794
8590040876
8590040845
8590040802
8590040844
8590040926
8590040895
8590040853
8590040895
8590040976
8590040944
8590040903
8590040947
8590041026
8590040992
8590040954
8590040996
8590041077
8590041043
8590041004
8590041044
8590041127
8590041093
8590041054
8590041094
8590041177
8590041143
8590041104
8590041144
8590041227
8590041192
8590041152
8590041195
8590041277
8590041241
8590041202
8590041246
8590041326
8590041292
8590041251
8590041295
8590041374
8590041343
8590041301
8590041344
8590041422
8590041394
8590041351
8590041394
8590041470
8590041444
8590041401
8590041445
8590041518
8590041494
8590041449
8590041495
8590041569
8590041544
8590041498
8590041546
8590041619
8590041596
8590041548
8590041594
8590041669
8590041645
8590041599
8590041644
8590041716
8590041695
8590041648
8590041697
8590041766
8590041745
8590041698
8590041747
8590041815
8590041796
8590041750
8590041798
8590041866
8590041846
8590041801
8590041848
8590041915
8590041898
8590041852
8590041898
8590041964
8590041948
8590041902
8590041948
8590042016
8590041997
8590041951
8590041998
8590042066
8590042047
8590042002
8590042050
8590042116
8590042098
8590042050
8590042102
8590042166
8590042147
8590042101
8590042151
8590042216
8590042196
8590042149
8590042201
8590042264
8590042246
8590042199
8590042250
8590042314
8590042295
8590042248
8590042301
8590042363
8590042346
8590042299
8590042350
8590042413
8590042396
8590042349
8590042403
8590042463
8590042447
8590042400
8590042452
8590042513
8590042497
8590042450
8590042500
8590042564
8590042546
8590042500


================================================
FILE: data/usages.data
================================================
2.6224297271376256
2.3404828688740125
2.5107414655010292
1.7600378709022286
0.3675759079717178
2.4649354384441082
2.3126551080958544
3.1636838381746824
5.1962296870134228
6.5845410241288631
6.8079198450407237
5.8702499111279511
5.9041769144363583
6.5327610178162150
6.1951760209345821
8.0320012795978855
8.7957237352537128
8.3542392705978354
7.5553128119712758
9.4868767113689341
9.3159053150911539
9.7547071792711151
8.8876024011434840
9.0838037077319385
9.3733867420776722
9.0795340791008545
9.2958803955345690
10.8942660575936721
10.7172913529093741
8.5142518991126561
9.6877768852503952
10.7874539015809745
10.8325141548863879
12.2341625609731892
11.0982714090156112
9.8461173059726335
10.5227967966111997
11.8291171201693199
11.9428169584232950
12.8652740300348771
10.6884317054608395
9.4563970913455879
8.3406215737611280
9.0589821026257145
8.9272043644200654
8.5571018253512356
11.5369523427309080
12.2741933997582660
11.6539306797719284
12.4930326271593728
10.9879387795076706
9.4834750402161774
10.7924886114525620
10.2708793513005539
9.3746994753021990
10.4651862699281946
11.4986683301934374
12.6880923150955383
12.9641892994303198
12.9948798610342546
12.2610161974739533
11.3121848549338395
10.7815213621402339
11.2269611107669025
10.6309345197963800
9.1970996300280738
7.7769249379553500
7.2453870589557789
8.9776938237714621
7.9367218097579872
8.6089580388614699
7.4352726149816029
8.4776403556028548
8.9433832769264274
7.4714100415855382
8.2186667071660011
8.7996104043794823
8.6423998267479369
8.5883981935305265
7.0322448755935953
6.9659173144883164
5.9803315590224626
6.5253600464882258
5.5805167847848951
5.7110587364134986
6.0624521759605301
5.5780148614066238
6.5313652512311178
7.3950044929072254
8.1749471367369821
9.2082806156955357
8.8954105163650290
8.3805319649526613
7.2111762665475911
6.5314190940796077
7.6321295070325732
7.8473446018366602
9.4262470201182165
10.6144861668758761
9.9401196775496512
10.2008325884251221
9.3809996087601650
10.1181053446909086
7.4562315792240330
6.4196359378028474
6.0714174927342111
7.5464306771066889
7.8225180221432078
8.7729702360188320
10.0685117867135432
10.4107991599549479
10.1110808774906271
10.8394309686620698
9.4428874465635477
11.4192919859912578
11.1271194433997866
12.5172097579668158
11.3899010625808437
11.9914362880108278
11.1865564982790016
12.7385110634009688
13.6915954573986838
16.1031679760406092
16.2942520619861604
15.6467254390605568
16.0877280952794770
16.0618151272224203
16.1394079306966560
17.6044848054638265
18.0364775894468892
17.5829195388971655
16.2317300968021350
17.3278267432434099
16.5249558738193123
16.1131168332523877
16.7809566290101984
16.4459109849272522
16.0138881792826702
16.3723569773530855
15.2891085249351946
15.2214454064948317
14.6227175166732266
14.9266377850695697
14.5910227600381166
14.4297520060712152
12.5301674678534596
13.2132570292480676
14.1583363923914582
12.7066726859816175
12.3490246365344305
13.0308623497470180
13.6829159526287025
12.0544584475565095
11.7736160200752007
12.4638782423753867
13.6112076449956092
14.6415365454255877
16.0706255303433139
15.2609576721162892
14.7294273570426224
15.9859806319068696
15.5263245354885022
14.4546346031692359
13.9863726163871984
13.7100376423286825
13.8295806025707080
13.1334659357653951
13.9424576373912448
14.4951329416323471
16.1861714296525960
14.9916086168739273
14.9657197335779149
14.3258117921341821
13.2617465135986876
14.1903712590573257
13.7373556949398452
14.3674500044894362
15.2431253812222955
14.0794079005008150
14.1713078359055231
13.6049142776170733
12.2378948878923985
12.6886086393614193
12.4139188210545690
11.0989824135746673
12.0257093297565003
12.5477392716958231
12.3937103405964777
12.1971676083678506
13.8846908435087553
14.3678972895951542
13.6460855320461523
13.8917668039458224
13.8386834738357294
16.0111145057128859
15.3899396879558150
13.9917468156490461
14.6181643190805275
14.4010767235177557
13.8124471264923496
14.1920418228088181
12.2988271180320385
10.8887468026914540
10.1818355829444904
10.5228777546346421
9.6443967964582438
9.2875717761276526
9.3066277747953752
10.0592381924233099
11.8342813469562707
11.7829248963028839
11.9261120190968306
11.6380960970356337
10.9361913730654869
11.8015199638576167
10.3715955225524272
10.2532565256261901
10.0842716002647812
10.0423020800161886
9.9008431675445365
10.6135115016916242
11.5867668393376526
11.6128212892303253
10.6411665862286711
10.9634675386323117
12.9442362291162869
13.1770584389429839
13.5944161298557944
12.8966287245701139
12.3559054752088215
12.8653785609833857
12.5706849813123878
13.9313018937321456
14.2335641171051730
14.7684048036613280
14.1291687373567001
14.1276414315775298
13.2894458431990490
14.6079911139889411
13.5253961097553130
15.4803896853546927
14.3849696279836561
13.7457906539758401
14.8643395245311005
17.7479819793964673
18.6806220080763339
19.2201797762149269
18.8467824320065027
18.2185914082858922
17.3965444155119577
16.6373635303063523
17.2255717058710189
16.4128524782494267
16.6332200652148714
16.0542350285229318
16.3251341941311239
17.8021923298192029
17.4281922697669529
15.1915240592733483
14.0158893628681813
13.2087444434417272
12.3377135014086914
11.8796145373111841
12.0719097374539306
12.5787006031752000
10.6087630306533018
10.7373625903571739
10.9163392533434163
10.3732003424716552
10.8583020366252079
10.7288694012001962
11.0667017046717202
10.3640087683874658
8.1610787818812334
6.3213525156529595
6.0210269494161848
5.1559107520332264
4.5937475189784260
5.4817230693531416
5.3087249521225912
5.2802215547700966
5.2512941657086420
4.1833483881850597
2.3197692273879564
0.9314890979998660
0.0000000000000000
0.0000000000000000
1.0362137943945651
1.2235628595295072
1.1789984070271580
0.2614470904560051
0.7827708801714739
0.7984032913286057
0.0000000000000000
0.0000000000000000
1.2750002407053145
1.0019283427142356
3.1331816767394143
3.2276358446206541
3.8897094662866949
4.6681372995851653
4.2028810161665380
4.7573692673320336
4.1046083145853656
5.5838677437323430
4.1317753343891521
2.0620448655901757
3.2382952363599191
1.8568999660423831
0.5647158507818193
0.0745760433142787
0.0000000000000000
0.2337277731304377
1.0127643819792627
0.0000000000000000
0.0000000000000000
0.0000000000000000
0.0000000000000000
0.0000000000000000
1.3053328457596161
0.2121387115729347
0.0000000000000000
0.0000000000000000
0.0000000000000000
0.0000000000000000
0.0000000000000000
0.7535893230322678
1.0516391159790026
0.6190910483699151
0.0000000000000000
0.0000000000000000
1.3623011165728771
0.0000000000000000
0.0000000000000000
0.0000000000000000
0.0000000000000000
0.0000000000000000
0.8501237697273325
0.9361305911121875
0.1565918018341602
0.3295509894686671
0.8911081644896888
2.4446961811852530
2.1799576854476985
2.7099121558492985
1.9691789890896392
2.0818402129202891
0.6898533445756363
1.0916049306268729
1.4626858784782177
3.1698543118100941
2.9621414570588120
1.2164883415116505
0.0000000000000000
0.0000000000000000
0.0000000000000000
1.2978019712766957
0.5225314319245671
0.0000000000000000
1.5326527434444153
0.9229109641364306
0.0000000000000000
0.0000000000000000
0.0000000000000000
0.0000000000000000
0.0000000000000000
0.9241710851111806
0.6576579600512664
0.5464827280455051
0.0000000000000000
0.1845712128919823
1.2107787710723965
2.4628715694033962
2.1139253947353511
2.4457167814990415
1.9883002778738001
1.6247268908490562
0.9188184371587016
0.8201048208648493
1.6184499516996063
1.1510993323180152
1.3874897273993563
3.1034667884405804
4.4222714098837432
4.9536954027100082
5.7609152564482988
5.8631447463288193
7.2847504082095309
6.7917689215828654
8.6141242929116597
9.5602392375233531
9.0046397183845457
10.3862187036949223
8.9947008024040187
8.5737857581560117
6.5203069460698417
7.1056486029267321
6.1248262249169034
6.8949446925717783
5.4239018039684890
5.9657525901898687
4.9738057038759642
4.4172369418039246
2.5892381365546537
2.5693059603032951
3.4814892422755999
3.8454747706087065
4.1927446855404922
2.9436853749119565
2.5821450257366636
0.2279079981132273
1.0513897718123646
2.6191839890495032
2.1198190200398623
1.8771620545801218
1.9053917689553230
1.1821626800514666
0.7672101788286477
0.0000000000000000
0.0000000000000000
0.2305938557334026
0.7002109237520038
0.0000000000000000
0.8358882935198093
1.0749022469596163
0.0000000000000000
0.0000000000000000
0.0696863599369275
0.0000000000000000
0.3796632810668747
0.0000000000000000
1.2800373975642101
0.0000000000000000
0.0000000000000000
0.0047180373090803
0.0000000000000000
0.0000000000000000
0.0000000000000000
0.0000000000000000
0.0000000000000000
0.0000000000000000
2.2043123506959650
0.9849581168046335
0.7211631474802890
0.6814243101699529
1.8731125954094388
2.3140814165199668
2.9682960592930856
2.9171604676894103
3.9254223558520152
4.2523358997684948
4.0137368561389692
2.3626480610772256
2.2213411414469801
2.1892756709017944
1.2183669469796574
0.6693806559586322
0.0397656212732410
1.3923314800870483
2.6117578109342547
3.2246008112844109
1.8493624587894326
2.0255028304094465
2.6436109285290308
1.8850476309720510
3.2308145212274342
1.4233395828289459
0.0000000000000000
0.0000000000000000
0.0818197221158767
0.0000000000000000
2.0823981121868225
2.3136383963606484
2.1506946439351804
3.8790187064842705
2.7528722655382722
2.4555408913383907
2.2594625938471071
1.8307640871869892
2.2983423785786070
2.8759313623814968
2.5972991091194939
3.4064877180016033
4.6245152904851130
5.3615981651252236
7.4717583058621138
8.0417996853296145
6.6757992395268833
6.0601111565923080
6.1945771234878642
7.0751339039166918
7.5671944441875709
7.6087745998077017
8.3440974251734623
8.3229110725639384
7.0809686023262080
7.8742815120367720
6.6702476641748101
6.6409871941487850
7.3247758855578740
7.2111615665820343
7.4214893574578795
7.6804763008116383
7.2715831618454914
7.7738938342959685
7.7980039314826479
8.1252145338071831
7.4962660551357594
7.4710534963548296
7.2747589518071392
7.1802823730426946
5.1268182057323060
6.1793082297063258
5.2456465105372576
6.4045600598924954
5.4840165529618616
6.4774825022813713
7.4470473308485277
9.6076769265065121
11.1313210219898568
12.2294711329785670
12.6156296956281881
12.8767037662934900
12.5406723988094146
12.0337137686016735
11.7482035909979192
12.6563798915430858
12.2871844339531311
10.5790082163460415
12.5160013054247514
11.9174264222699815
13.1133651483314946
11.8780539626422783
10.1333063602677331
10.1184366003679891
10.5984077703222432
8.2501942555078536
8.0106831279683881
8.6112173753828234
8.0728846684876796
9.6550969582949691
11.2461264148422817
12.7691542768678072
13.5559762435516884
13.6976105084685003
14.4779489208074157
13.7826162581824789
15.7318258606168015
16.6169357328174740
17.9653629187463437
18.0300979832487087
16.6975704293110887
16.0510193223978028
15.5100774832790904
15.0797788826647974
16.8525902989576721
18.1238426195947504
18.0363509271504761
17.8010590102497410
16.6792070551837384
17.4052425547787912
17.3028686275973094
17.3375207946672703
19.4334071528692505
18.8691762111448185
18.6754410422449446
17.6385763023090973
18.1389110494894830
17.3686824910618540
18.1786454180782471
18.7114373441491679
18.7485321273682253
17.8260473800257344
17.1243003669078675
16.3380232358326474
17.9783604722179042
17.3814401949659683
17.1538221571087064
18.4965563906969770
18.0272471942453407
18.7613015993611327
17.9238170915797888
18.2100793322019143
18.4449591712403205
18.2104687771477636
18.0341317196097641
19.1650456727117913
19.4574041074914454
18.8214030970035964
16.6039954275786030
17.4971199990177375
17.6179610430372016
17.8677577974546224
17.4366082030411071
18.0884506403787135
18.1545600591220584
19.0619338147483042
19.2412259720896870
19.7187629567061293
19.2440521791800343
19.0743962339247197
19.4894251514832462
17.5852119604564763
17.2621820641993402
18.5904581024550346
17.4656866334094687
18.4463165124812321
19.2449943886465924
18.3843736596456786
18.2649664339274125
18.2928133627220610
18.7281985333241892
16.4396545939321221
16.1728170728932881
16.1873105690577752
15.3683177700839337
17.1313275788566131
16.5647454583966365
17.4447495403751027
17.6871567148424127
17.6538477799950329
20.1098829428621606
19.5529937574283856
20.0241266014013810
18.8761671072285608
19.7294349544253684
21.8581945828235860
22.8446940377214851
24.2930987517395565
24.1293123295317251
25.7598846396352812
26.4399122155374471
24.8094377140151607
25.0334702066077597
24.2635549191310957
24.3242018887536275
24.4690789359376879
25.4166071239289231
26.1192600557145482
26.6302417766794051
25.3194279292238740
24.4999201824746464
24.3724026416790700
25.4071926075363663
26.1975826014713356
26.0204740188007655
26.9585659463650309
26.3830703091439318
25.5331294178259149
24.3668083752921270
23.9731933151615380
25.1607166606625761
25.0383879314464366
23.1173857854831013
23.0211364895139603
23.7496510875759732
23.5530654247259648
23.5079858540075932
24.1082216725218146
24.3574428842244544
23.4619807523694952
22.4284154358428651
21.7753221312847174
20.8182276797692190
20.4541461615187252
22.4186564400888848
21.1668167326714780
21.0204144430882280
21.9100225075524513
23.0887982662633391
22.7438177710441920
23.2202107055172711
23.6474234647957644
22.4909681014131912
23.1032920723399648
23.3008370955326107
21.4722201982100636
23.4311224776182030
24.2946440983914016
22.2563850545612567
22.2190479582554374
22.4222209119405456
23.4632412777884412
23.9283026687059213
24.0701008073477247
24.8999241208554274
27.6790980458114433
30.1136228499124172
32.4629619757063494
31.9453364040123446
32.6045682722534025
32.5204531012835645
30.5630396114083709
29.4140480494275103
30.3722885074035389
31.1630010962678412
30.8094747404632656
30.8504299763377858
31.9657471608363437
30.3740355633344130
29.7127218008747995
30.7953109596949979
31.1953479869260946
30.9073194605948558
28.7273644578284291
28.6210431283664519
28.1033035538581935
27.8150142932440190
26.9816275106937837
26.6040547909382319
27.4545177109264635
26.9800303376140747
28.1125470875873411
29.4896151972862697
30.8099765632718849
30.2185238049447982
30.8926936056326689
29.6834138399897114
29.0283995535194386
29.9262545398189310
30.1820473892292256
30.6310216896080760
32.1241247469774152
31.6184911919640790
32.5275512189992853
32.4977070671106389
33.8371599274192576
34.2621534845176257
35.0460321229415825
37.7086191469512215
39.1742819836909462
39.3140050969479091
40.4060129041186187
41.2185837035606468
40.8427896141087459
40.0162943230111026
40.2535972255809327
41.0167908634485840
41.2355936909321699
41.5710485953233331
41.4799251677668721
40.7204524732843467
41.6030908780082314
42.8059809318544922
44.8637142159746034
44.8214459082699221
44.7776684026340845
45.1318598911270215
43.5141328397929144
44.6259633633468766
44.8825895293442230
44.0747714507609842
44.3159391355948955
45.9644744198131860
46.4026957003100264
45.2635885221737979
44.0786389463844017
42.7157391804244426
41.8081717535321360
41.0010942599831125
39.7184925263285677
38.8844565438341618
40.2969862747760885
40.6443587241399769
42.5213695240013081
44.2466873189036463
44.0370217346167223
43.5398766827791945
44.4457690149525959
45.0563070092202764
44.2590774208628588
44.7651585708377411
45.1911714339913075
45.1582885779039387
45.2265416402460687
43.7507483565411945
42.9819915992454611
42.7161959572232988
42.0054750111452577
41.1248099691795588
40.6945090859294965
39.7305065379784068
40.5171401965848403
40.4977510672372105
39.8640735081947071
40.7245405682314470
40.7469216787044246
41.2223123306907127
38.8117638973371726
36.4375656334367335
35.4192422370923836
36.3074218612277662
34.8691858886905948
34.5327565843004507
33.0226873582512326
34.1218822285568137
35.2700427093956890
36.5039844131527005
37.9565807180596835
39.5100774574129758
41.1209248592942060
40.2391259226735230
41.5769659127131987
40.2506209964179149
40.4784045066822742
41.2041154406361159
40.8472131136513070
42.3481066699909405
43.5851331471896373
45.6356828349217309
45.1682023595301203
45.6603630065116377
45.5518804931656760
45.2548843487567609
45.9839704941319738
44.9392199591771870
44.9582635977662335
46.7062976633389653
45.5685524499558525
46.3997317155944842
47.5731358111168916
47.9890353446192677
46.9787826862075519
47.6028176489249830
48.5136069173428481
48.2550369353906348
49.6522964229533130
50.2987663904326610
49.2651872064985028
49.1896573169907114
49.3969654576758899
49.9333143629033174
51.2262511648915151
51.1739024901640249
48.8052640669768252
48.6877778976422135
49.0202928940918738
50.4234883051463498
50.0900669855128982
49.6924832192795449
49.1615888641928649
49.1485826639800010
47.1842717540965069
46.6135950003543513
48.4551728050157564
47.6585217522035691
47.8209151716320022
47.7655940858750085
46.9914413859220161
47.5005574177200955
48.7999135879928758
48.8528086698467305
47.4220739753640288
46.8284544355269858
46.6066945232620284
46.2153464693840945
47.5070847750698348
46.7967644639665465
45.4391486479057392
43.7582997162629965
44.7924545311261184
45.7144341523358904
44.9101831050625435
45.0391187320638693
44.8201061183873364
44.6301477655063010
44.9277520130904051
46.3825954731052903
46.3047031442093768
45.6095991089869131
44.7121321780896466
46.5970969084910962
45.7723378491975126
45.7382244044006683
46.2266169270407730
48.0192362606899721
47.3161548592993668
46.9510923226393189
46.1004209784345633
45.3736242468474629
46.7791591008309382
45.5863564439313507
45.1168187911434870
45.0240147191808617
46.7789229631422643
45.2980605991036498
46.3202425901529793
47.0510473523642005
47.2845654433952092
47.9594354589902494
47.1483025607528532
45.7008400022426571
44.7895294098975896
45.9300848796629921
46.9502960264354314
45.3472465076505244
45.9055646962436938
46.0668672330091056
45.8053665374971288
46.4688706900977380
45.1161699717437727
44.7718578612434186
44.6125610815766720
45.9408612096636020
46.4576231495853520
47.5355072548233579
48.5399461140986475
47.9333292041841403
48.9240202434625076
48.9815769392276366
48.2276531414437599
47.6659559138452806
48.8835230079224701
50.6459176648275502
51.5216774379434170
52.4368889874176176
52.5394714745335847
52.9030584551071570
53.1184217562753531
52.2782974827301459
52.6272308345118773
52.2599813324801517
52.8437315975573227
52.3732667736169262
52.6392253558682057
53.3672019505248016
53.9665218639096054
51.8155324112774238
51.9084811969896691
51.2061206687911010
51.5250627680288247
52.4646371433691527
52.5251246155466589
52.4743775361886051
52.3392016447157573
52.9081355442819898
53.3778910674612845
53.9795604821372805
52.8142532805780220
53.9773296269308105
53.9543961102201735
56.5609502708346739
56.2733400914831279
54.5276116593625346
52.4436948356516623
53.1631949687678400
54.3682457726525215
53.3429810591528053
53.2107463071803721
52.2932019099746483
51.3279816601208694
51.3818236568963087
52.0126431222705321
52.1638153764413417
51.7724368486625579
50.3965903653766816
50.0484756095258803
49.1501279896966992
47.0928378172605875
45.7630941043671697
45.3157166675809577
46.9488533712991583
45.9541442540752101
45.4312276643448740
45.1307864928510583
44.3675050420675561
45.1545081903257639
42.7360521507324762
42.6181325870760972
42.5888796210672922
41.4542397971900769
40.3889954812322145
40.2792171338756759
40.9480777749769942
40.0670513503367900
39.4407370278110392
40.5186083499088667
40.7028034009673050
40.6674901092029444
39.1150270978315575
39.1022421235590940
39.1141024729527871
39.8617215315612512
40.1462928558037504
41.4418535139953264
40.2219680241660029
40.2679368312658639
40.7188761950458584
41.2875283246938594
40.8286762829458567
41.4742926815918125
41.1883776467099381
41.1214376505891579
41.8266840057884295
42.1092987110461650
42.5875473735401684
43.0553971767293575
42.5799662361938616
43.5143436642123618
45.8569992008889926
44.9906595130270190
44.8156436631641242
45.1274279043441737
43.7397170072122208
42.1974599389463805
42.1597927364000924
42.0621944103316636
41.4851633522602796
42.6634855696413098
43.1117553047369100
42.1655247082801949
41.2340564523297104
40.5271238318233813
40.1828390390876464
40.9769061268573083
41.1579789949758847
39.6051822921397800
38.9660721333060422
39.1101032639123858
37.9997552909367613
37.9432094979104022
38.9850299658641362
37.2366182375287451
37.1164069365623206
37.1039445525886151
37.6574349235332662
37.2063915768898710
36.8401214381580218
36.6120658712518789
36.8776367122940982
36.7321113265895178
38.1808163584864388
38.6711012715278741
38.8841332095863379
38.9118600676224631
40.7979035881906498
41.9067301131144418
41.8088322543189790
40.2786763440648414
40.8096056384891241
40.3989252922396815
40.0242887076745362
40.2798536626709947
37.7959955307586029
37.7051340793068732
35.7090182210842215
32.8374293637765220
33.7705553289694294
33.6492029451657828
32.7493968971917013
33.3975000497377437
33.5772398597400823
33.0912942153246590
31.0980548677885729
31.6858149274569172
31.0555496698656732
30.5395786513426870
30.3429006265438375
31.2775156344321346
31.1396786341841754
32.0558195625680966
31.5084440092786195
29.5645632848356819
28.7653738228258682
27.9205447590460665
27.4397219107520733
27.8528529294644756
27.2285637700683445
26.8907552605504776
28.0157109835980691
28.1373703142732019
27.5497608234082776
27.4659523672556531
29.1770986346776340
30.2124530277815637
32.2630162323325749
32.6840024962389251
34.0638200449693329
35.2149082153323079
35.6055233802451667
35.8165717750827710
37.4592729527962121
36.2858290077392169
37.4977361698333738
36.9576751625889131
38.5696537940498558
39.7276925017580069
39.0866974872435335
40.4279937637089262
40.7936627901580309
41.3196773064579617
39.7430023167806539
39.7111481256238577
39.7898209464069339
39.0301170975614795
39.0152034217696482
39.0020301490903449
40.0107980333269637
39.2731636504579953
39.0258757652521595
39.2221390117090181
38.1160737714363265
37.8219023641693255
36.7120646837490838
38.9331340007330482
38.3405356915206355
39.3490251908227506
38.9913732980353203
39.0591181406023296
37.8121873840758695
37.6990428955788275
36.9818754817560347
36.9433819110370010
36.8715342329796556
36.9498700110309386
37.5371215786204786
36.6540181261682747
35.6241252209217194
36.9110997217775463
37.4886890937170918
38.1227306698592656
36.6251535561282680
37.6540407181822516
38.2766769226801031
38.4612098613140247
39.4773120142581604
38.5734997568724083
38.6831485675917577
39.1319529551445555
38.5006711915270188
38.3549330698736668
37.6984308861148705
37.2414130115445801
37.0494635001749870
37.2089371210290523
37.9177980081286492
37.0022499257436195
37.3679392144729832
37.2960546171350273
36.7646289669618014
35.7278584016198124
36.5259797008618605
34.9903203279128192
33.7098749906394275
31.1839958782697479
31.3592224000152271
30.6106678896250841
29.4861060061348006
32.3676764895638769
33.7787848236284916
34.5871726609614640
35.0409905922813110
35.1402174627550323
34.2199612216603342
34.6153102088905769
34.4679075409211322
33.9041807853137129
34.5593105183069866
36.3026832138063256
38.3469539280864211
36.6264628298148693
36.9918293182665465
37.9958262721420255
39.2333408863534245
40.3382273896217001
39.7581120617812545
40.0143569439055256
40.5037809625672622
41.7921833904350493
44.5651355364910344
44.5132340760592484
44.4781914382478405
44.4404285293149997
44.6819488360180372
44.5988808495289604
45.8451690482363716
46.5635019493722524
45.8199020427180841
45.1831315085163325
44.5093148102181573
43.3125340372090051
42.9390697634023013
41.6108995228361636
40.6706427857729764
40.3173263419961430
40.7129430546571172
41.9351757953065629
40.0388599096605731
39.9918329947508084
39.8037853525114542
39.7972345594495209
38.3446479315703712
39.1692057125026665
39.2664388886158235
38.5346672797328580
37.8733419335831485
38.3325086456581872
39.2823856033551309
37.9774959588650205
36.7563199965542537
37.0182490257288421
39.2303494705922020
39.8424128223537366
39.7131912147320065
39.6953943565232734
40.4618364568574478
40.6751634533517858
42.4395925343631788
41.1595383551946554
41.9599852489169010
39.2355220771058342
39.8301977978683865
40.1766336795540013
39.4536506257025010
38.5990813644249045
40.4311882282045687
41.0019213176042996
40.8805298074077115
43.0870627529071299
43.7232408979569058
42.8537320877725492
43.8296966550455309
43.6827536525664542
43.3958094057803692
43.4339832603835490
43.2823331856278202
43.9476461317792158
44.8831681495660106
45.4316329207102640
46.1665102402797416
43.7583069077622895
43.6283069954711351
45.4877303030281510
44.4141872788656116
44.1593337945933584
46.2215325629504292
46.6559994715913220
46.2505982042736008
45.6074333288131513
45.6112978608625355
47.6213179829359063
47.1058752743503817
46.2645078322990884
46.8556256431116083
45.1028612658732584
45.3627594415058226
45.4464284797633340
46.1622085529743060
46.0142799301254399
44.9383191970660363
45.9598088917980760
45.1684557652883782
43.2668479729766631
42.9951321596835854
44.5986077077371377
43.5906209127880899
43.8037567499681728
45.3760060237081149
46.1383329047452477
45.4051517652767345
45.3755300833939330
45.4122562638027745
46.1408974907924829
46.4388055873345635
46.2545229870616481
47.2625821448611703
47.3362208204273003
46.4011492584229330
46.8976639425895812
46.9141052295341368
46.7047185421291928
47.4133414014923389
47.1189967024007572
46.0434404030382609
45.1746101017084314
44.9941412530626366
45.5833038241864088
47.2200362185174924
47.3799026086153745
47.0235577737690917
45.5514158326358256
45.6121726628891935
45.7098025165129016
44.2530397758464460
42.8059388295123142
42.1685192507180062
42.1629941656126164
42.2255141043827251
41.8372240439752687
40.3307605367722530
41.3841272821177313
41.2638322627415732
40.2475461766542750
41.6037952667727069
42.8643761775484506
42.9607921780518112
44.3077924522291013
42.5587977754546500
43.1051789119436464
46.0985954490061829
44.4156183142390546
43.6150124477468353
41.6514070950581470
44.1750730934677449
43.2636926571281748
43.3572363271046015
42.9881240327360103
42.8758886579437473
42.0159459832338129
41.8222924900433952
41.5533162790677864
41.1125268543959095
41.2822586371173230
42.8952229674044005
43.1849166591532594
43.2016618907457826
42.2146343133830300
40.7943236237402047
42.5362613682540669
41.1006609241082188
39.9514521396451983
39.5672667212774414
41.0775304489272131
40.8724557783390026
41.1798283499566438
42.0598864520460083
42.3844206940483659
43.1579706765736262
43.4455559832002152
41.5335351827750543
40.6024620706230479
38.8841365878919376
39.3607328119268232
38.8496631887178623
38.3301704497759843
41.0304896759301698
40.7905822286994777
40.2062575127729005
39.6092349477422445
40.4755510398598659
40.6118369356172053
41.4742431016668007
42.5365242406421515
42.8387626482248720
43.7491618951211905
44.7415953018095820
44.4738405356379118
45.4200471240407282
45.0122832129343422
43.8675008559156936
44.1123674861482087
43.5557916211035874
42.6474473074368632
43.0155242676581864
42.7117822295998621
43.2074549666118770
43.6378063739970514
46.0224142863755290
45.7426536872771266
45.9988219152093549
44.7964569351745538
45.0615561264484299
44.6022811991311485
45.7218719061690351
45.6212116913003527
45.2704707026647810
45.8584013199563998
45.5869483369697477
43.7372495358387710
43.3363246066288283
42.9759426239440145
42.3411069090503460
41.7789056116491935
41.9959732317787768
39.0456461089667357
38.9992509909661962
37.3331121126830539
38.3108215573370501
39.7544560159298044
40.9055791711578323
42.2397718584825057
41.3985448160338905
41.4405063498743260
42.4751902495221216
42.7113236583456910
42.2560194507268463
43.1223073100965237
40.9888663610680553
40.0352187844995910
40.5466890491717109
40.7443780723179785
40.7753716279825582
41.0030009904059014
39.9392544398133040
39.6401107238887818
38.5682337788945020
37.9581040234538705
37.8187410958167263
38.7301370971504753
39.8075950049619607
40.8091988867062483
40.7184351242786846
40.2866877528648288
42.0144969891104125
42.7576175320513272
44.0487481794145594
44.3163844728501388
43.7703035053344820
44.2224574739985812
45.3269772547926237
45.9981227143152438
45.1717651461210608
44.4617134016077387
44.9917601329029253
46.7771126577915553
47.5063982479118962
48.2996502796374045
45.5397734111438837
43.1018995262662372
40.8358840265093619
42.0011669234906080
41.3386356590979815
40.8774231196097233
42.8196051298536062
43.1926968634529445
44.3549513068802668
43.0039236167764187
44.5836540430430688
44.4305875322160091
45.4244430815611793
46.5576215270210838
44.6981046049167858
43.0934091089846589
44.3730608347188564
44.6394800723726135
45.6082511983144414
46.6905273641873393
45.6636997509360683
45.5749832661684309
44.7775820983154063
44.7852512447825788
43.6153264703121550
42.4522626299369321
41.7730487863453064
40.6095894228549383
41.8010984806478731
42.7542511707001083
43.6870164138411781
44.9558457864935050
42.2636789880808053
42.9222767008392339
44.4290797598510281
43.9119127574753634
44.7956396709640146
43.7159187941327971
45.2658162220879774
45.9865383093478357
47.9252172459611643
46.5459129782660881
46.2279149507943856
46.1449772548049637
46.1576418568823357
47.3877316786356459
47.9666340161506426
48.5422972340445540
48.8447020536710212
49.2793379364319080
48.6684666027014927
47.2699802436389547
47.8113107461444073
46.9876329124596879
46.7888328401220761
46.2826101978429705
45.4651696357823170
46.5016651047812957
47.4286416461231042
45.4258848522216709
44.6107696512551897
43.9953345510929026
44.6326863700831922
45.2256192681535651
45.1790820182104937
45.8323311553365329
45.9030767346507247
45.7234644442188909
46.6267193194075986
45.0197325370099506
44.6967151261488098
44.0927902924882389
45.5127883833471998
45.6195214398758964
44.6659345512263926
45.5003691837522410
45.2495389831237844
44.7515962659602948
44.9087795506189025
43.1971521680890618
45.1688806729785952
46.4096430496300769
45.7778564140755861
46.1732045441387697
45.2347709843346664
43.2618386843258236
42.8888727429432706
41.7779513694275551
41.4186826048638039
42.7995871127310181
43.2885214555937452
43.3191548300227467
42.1019417215032661
41.7400168562745648
43.9033292676018760
44.5361608000025626
45.3447117657047798
45.8818295260639530
46.6792461121353526
47.3875516002447554
47.5386737787585574
48.3754963570898227
46.6774614056692769
46.6953188961458920
47.9027739559184766
47.4049039986821228
47.4242342343538965
47.8854167209771546
45.7478272386448666
46.5995955267190567
46.1680879655219698
45.5317846844728820
46.1536474655198319
47.3062978485512389
47.6002286876923648
49.4779134436035122
49.8120184072501146
49.9247266517707828
50.1698454366740307
50.7909434423754576
50.8616151648413393
51.2971634572695834
52.3359773250506564
53.8997290200243739
53.8552990985562943
52.6678800691997822
53.6358136809689512
55.1861591278924521
57.9425039327357965
57.5073411579132951
58.3916665946082105
58.5337801637375037
58.9626945506464537
59.0296443437537945
60.5703763761590963
60.5800068130805656
60.0683341460909190
60.8350964396246709
62.0450587445369308
61.3697470623059260
61.3539508556790736
61.1167289298190823
60.5091482067207664
61.0962701342700569
60.1616009315897671
59.2658001827401364
59.7667417677750166
60.3094105899325541
61.5958804192493758
62.4563852880172519
62.4895991624428646
61.8841580749629898
60.6939441119878396
61.5437152683148767
61.8360634911332170
63.0210875135016764
61.9510169764766232
62.3329393347287350
60.3058223415021004
60.3290207408966950
59.1081965246267274
58.5838064304046497
58.8524705323229185
59.1942168644691762
59.7151143746664701
60.6976603630102289
62.6198702543601726
63.5894990361173953
61.2971695006231272
62.5505162140971365
62.3022451407057645
60.4376663756496697
60.5743970986116125
58.4555865811868145
60.0934565534190668
61.3772116731254229
61.7059159667113093
60.9319805115640065
60.2445590110321092
60.4578179014296850
60.6995455678350666
61.1033492378885867
61.2552694811883995
61.9312466052376465
61.7232650606781803
61.3811106536068536
62.4284164562879980
61.7725139846222930
62.6662057261093537
63.6468712750335115
62.7462140876030716
61.2852732049457316
61.0238315893974246
59.5118891656466360
60.2487516298170007
59.3615506387178939
60.5246927035721640
59.9806715135024362
59.7233331161870709
59.4320543065988787
60.5777609672112618
60.1019517933392962
60.2835757269188051
60.0993444235338004
59.0854910189024025
58.0704404274274069
58.1843242716699507
57.1734105468678493
58.6626301959674734
59.5343904286443006
59.6689794211623337
60.4732739028992725
62.1804397843004324
61.8501823777907234
62.9462501597986730
62.4528285709933684
63.1864004414610179
62.7951150248452237
64.6997011739001096
66.4057019415235033
66.6000919946877303
65.5923996416423307
64.6429166051977973
64.3632263574949377
63.5688526513375436
64.4921228486406903
63.3045007447606096
62.7501233991691620
63.9440213770400590
63.3468691276643412
62.3992408643588732
62.7860425604297347
62.4162304871709992
63.3565438061158943
64.2232918282393399
64.2246687322128196
62.8343832049837303
62.4386531564035820
63.7113490540680161
63.4390886643715248
60.9470607318327922
61.6502011716597380
60.7956044986808735
62.1199635385239191
62.5187578138433935
62.5114439251104770
62.6991757219841972
62.9183871832224781
62.6699572597458356
64.5918568670823703
63.7145083301552759
62.7635390531424164
63.0551263191258826
61.8593297933165829
63.1964393989610684
62.4242761649045192
63.3337553087617167
63.1941680835234862
63.2545405358437804
62.8217170022095956
64.3196835148390420
65.9577016516527550
65.2232260757890288
65.5155777736750764
66.9981083802048829
67.5540293332339843
65.6228595515658100
64.9206203860470197
63.3207915237701116
62.8860049863501303
62.4847488408209699
62.7094538140427460
63.5089711792988467
64.0444123309755753
62.9189837519804840
63.3937025866501642
63.6324700691745946
63.4786114218562787
64.9749807127535490
63.3320517295511536
64.2526603750605148
64.7339372094933623
64.4966862864687869
62.9058482413940823
64.4942974278105225
64.3192314099381264
64.4578589940759628
66.2004274309957736
65.4923037930530398
63.8751504482060994
64.3341299831883049
63.8546699615806403
63.6178198625386457
62.9931330958443851
63.1593710784827991
64.0423796417715891
64.9099712543425795
65.9208030434308370
64.1903110938503971
64.5586539056621405
64.9301235036034967
65.4991476455837045
65.2083860338921397
65.5231256626940848
67.4686942069939875
65.9782645590800030
67.6124517394936220
68.5700798361618808
65.4035944682821082
64.4781923714812280
63.6855835286845675
62.6153717922813797
63.1060788567101341
61.9583978818862775
61.5498351782122981
63.0437285077036407
62.4843090335498914
65.2143759150831386
65.7859935829477678
67.7332431218530218
66.6233800713625754
65.9656594379025876
66.1977102726833664
64.9584886576922855
65.2763032261731979
66.7562850854175025
64.8851881625915325
63.8417490406108357
63.6358094104006540
64.7278518844965163
63.9009365524242767
64.4474598278102206
64.5864044712819947
65.1460512542424084
65.2496605209393294
64.6134401984592159
66.1424327022107548
65.7137241422512943
66.8619001127357393
67.1045949341013568
66.2442305190034517
65.8624654266398153
65.6167182377389651
64.3266378137942922
63.7830997245520237
64.4273112825054710
65.6789467473030868
64.8984972867889951
64.8940499485680959
64.7933244942557991
64.7265557650151919
65.4409646268388769
65.4035652941439452
65.7654208779234040
66.7410349167116266
65.9626731117706697
66.0646636128068110
67.9436898598064261
68.0800847466003205
67.9524430965814048
66.4966723146999925
66.9332159462351655
65.9026233998449413
65.7278464392971529
64.2889217310370356
62.1897132644575379
61.5976686376223910
60.3745737011934054
61.8240390440636602
62.9737552190487335
64.8945185439532679
64.3395642393088423
63.9012134333485378
63.2795670279804980
64.6064397405642836
65.9897780200062130
66.6969871382284936
65.6268188356351629
66.0360152563418978
65.0901626918061993
64.6958451132265537
64.7869498372384243
65.4800638059855089
68.1892172685779485
67.7321792760461392
67.6000344913258999
66.6502974322354191
67.2799672332032515
68.7037150938006960
68.0648361410891027
66.7480463813719638
67.4810534181716548
67.3998125750486565
67.8161500396101218
66.3602118948196704
65.6849796891295910
66.1556477438109596
66.9430373292515384
69.2612555121957882
69.8116038642054804
68.8987769362294387
69.1384978967354158
68.9408728603434042
68.6411349263886024
70.0740128100526789
68.4021344472532746
67.0554138766785996
66.4984503502075341
65.4443288470595519
66.3801327558234249
66.1576083885292690
66.0064667893699095
65.8597819811427314
65.0051140805106940
64.5429925264806457
64.6451460777069826
64.2844654678141154
64.8136173183306852
64.8551479645015121
64.1375625572221253
62.7089296899961539
61.4513251136507961
61.7330298642346875
59.7823166168605411
61.4995398132984121
60.8089423173174737
61.4202275908891338
61.8888680293724889
61.5851931419729297
62.0278511591863619
61.4283591437747489
61.7413420359405123
61.2755203071320977
62.3809079824247092
62.2959923230839081
62.3802015176411970
61.9446855146399429
60.5312661857180530
61.8756194647101267
60.7768200803433771
61.5117820320022801
59.5584060633343242
57.4567543662586786
56.1903035598263259
56.8977342835290187
55.6995848725569047
55.1184411236358756
55.4047496761865261
55.3491818069182600
55.7696935393318753
55.8981553571887844
55.4854477544048734
57.2473737712961110
59.2015018166103957
59.9892487024194381
60.4647041961406373
60.5950661770956671
61.3244833754605736
61.4447820966803206
62.2983065113988772
61.6123955358797843
62.2414611031414680
61.7327512260096825
61.5952076891250755
64.1158538099337107
64.0647424693772791
64.5503145332090611
64.9815755813328337
65.2267267615767139
65.8799790510572336
66.0944871035889605
65.4468106140676156
64.8925197563565348
65.1484534166679481
64.0436278624884494
63.8208256605098043
62.0953295640031868
62.3805878997340386
63.7372362716586593
66.6772130368096754
67.7771038021495258
68.4469089895556522
68.4987631044592149
66.9751252860403667
66.5058825925352437
66.1139465501297252
66.7114313340713352
65.6714782652353648
65.1852485721801571
66.0325651877812447
67.2193983528530481
67.9379267819439150
69.0266499924455843
70.1384895446624057
69.7922203391078853
71.5258312265440992
71.9544466088880199
72.4664557086399128
71.3215763855433238
70.9651864156788008
71.0505053615947162
69.9181707398241485
70.2806765758797241
70.1241463960932236
71.9375489787395423
72.4919714616947317
72.2554248224921736
73.4353550873282188
71.6984893261878540
70.9974998153176955
70.5490439870618218
72.5525046793612063
72.3317168243863620
72.5386280568269370
71.6057689603769774
71.8004504732970474
71.3609101085065731
70.9578389980377295
68.8254236267975301
68.5836542691659190
67.4967324434701368
67.8172011938921457
66.8610242007996192
66.7969599895035202
66.5167587438621268
66.3257643205218699
64.8228261909527106
65.4085535788760382
65.8065359760873037
69.9210981262798725
71.7268850424673587
71.8477995284314801
72.3682893852311508
72.2371772080307863
70.0799193694479357
69.9153753289781719
70.3353130858577913
72.8675340915818737
71.5715581486093839
71.3189131199882951
71.0376649540444163
71.2461197823992052
71.5845521008367598
71.0307966253731706
71.8670379175008236
71.4608384215978418
71.7930247488110354
72.7360071418608243
72.2868001362152341
71.7409379757173156
70.8144922242853312
72.2725016491112342
72.3309318853251568
72.5421473486152593
72.4028724631712493
73.2643316304513945
73.3576211856451579
74.4161232438364095
75.6686806019565523
76.1121242229230148
76.6439821623025495
77.9145871914946611
77.6558190098145076
77.0417510424486522
79.0409609585338302
78.9102305847848555
77.5081977087849623
76.7849309442042767
76.3118650061571770
77.5262249681879041
78.1272413908689174
77.8102526254883173
77.0190565062418244
78.9814013566526683
79.3606360448068244
79.6904138325950271
79.2237109103934785
78.6676978380554033
78.4313953314625820
77.8068544563915907
78.1376772301441207
78.1783036237674480
76.2256398580925776
76.6905570959041256
76.3973148819375467
75.2556986060951516
74.3582689394224587
76.3498736547823711
76.2869623115716138
76.5206954091418794
76.8267793154708869
76.6437098954065164
75.3631975098616635
72.9199348862813679
74.4797213436302741
75.7274126658258240
76.6875617162403813
75.4236914359456563
74.2995529151038880
74.5066945083218144
74.7785293884197131
74.4980723008210930
74.3214444176961280
74.8280959072622238
73.4359289536297837
71.3586226953105154
74.9895195169996640
75.0278645823095474
73.9138642699336117
73.2305742772036581
73.0610297772509654
73.3040008899726416
71.8694744379987895
71.5386055741823270
71.6221592194278998
70.4156062265713558
69.4511531539615277
70.9839896063530631
70.9729363617479549
71.3099836209873388
72.5399185307906293
73.1385303522212382
72.9586833789274749
72.4330083655409283
72.2234635129104987
73.6162410419540265
73.4419730510538074
72.8877734563115069
73.7406280626564694
75.5326823459206054
74.4802768098268757
73.8552003068598850
74.8717252092111067
75.4993413586806383
76.3111578946320037
78.3602603993078048
77.2674705716222121
77.2212705522266702
78.0703625456041266
78.2052135404127711
79.0509250042937879
80.4265229701234858
80.7640242404871316
81.2390738050817873
81.9809804936845836
81.9236116574301150
81.4600063078083707
81.6288287749554229
81.0407895870533395
79.8792972551076303
80.9996882525657043
81.3483506283940301
81.2283302765394666
81.5633396683350469
81.1064554449174722
80.1635422272629512
81.2624639721481259
80.8504522604421965
80.2720316729556629
80.0247656375579197
81.0714837198249256
81.9707106505937872
82.6639704476914687
81.9038751846759681
81.4738665901249703
81.9855515264986821
83.0760576219473847
83.2604646331993479
83.2893087114723016
83.5556205023673044
84.4165376678242865
85.5359633448614431
86.3287607538914017
87.7892302465823207
87.4288073062434279
87.3103124472927874
89.0996639381361462
89.3197446029126496
88.5703239056069265
89.3682109434854226
88.1457371945797377
87.9615321150635623
87.7659828814330893
88.9941067578036495
89.0497521419009814
88.4222133911885209
88.7999025169364558
88.5159694639828416
88.1496689251508343
88.8584269927493722
88.7264223278591260
90.3940460378660759
88.9164719235564860
89.1207386876860710
87.0343741704288334
87.2012709283779088
87.4320639044637460
87.8980435537460352
88.3352931994575670
89.3340411206611407
91.2352409227396350
91.4811028850587320
92.9898259324916410
93.3116560452956918
93.3130291947306745
92.8740727282988843
92.2322930264845695
90.6111202608328909
89.9184310991768712
89.6104498192398182
88.9818826127921625
88.3646089876761351
89.7437700526471502
90.6227786086279252
91.0581735664599563
89.8475664173789426
89.5020083272670490
88.1559645698923333
87.7951172375121160
86.1465964676533531
85.9140837804289959
85.4685017942235277
85.8659999233642282
85.0588233001679015
84.1909812690311554
86.0486591173603159
86.5125931254533498
87.3286268530715972
87.1813874715006705
87.6435897582017276
86.8722472469834770
86.0223916357263079
86.7899158141606080
85.7651001314411303
86.0804765544693993
87.2595242334089960
88.4584908209658352
90.8043069343984826
91.9660585171287011
91.4772441926286461
90.4218848462703590
89.3255217252758200
88.9857596876854871


================================================
FILE: data/used.data
================================================
549755813888
50
134217728
1340687348
15.6076549143957415
8589934592
8589934592
8589934592
8589934592
0
0
0
0
549755813838
49
134217727
1375196111
16.0093897885966179
8589934644
8589934640
8589934642
8589934643
3
5
4
5
549755813789
49
134217727
1510800336
17.5880307412199848
8589934693
8589934691
8589934692
8589934693
7
9
10
8
549755813739
49
134217727
1595894916
18.5786620312931419
8589934743
8589934740
8589934741
8589934744
12
14
14
12
549755813691
49
134217727
1555930923
18.1134199242883369
8589934793
8589934791
8589934790
8589934795
18
19
18
16
549755813641
49
134217727
1346791127
15.6787122487086954
8589934842
8589934842
8589934841
8589934845
24
25
21
19
549755813592
49
134217727
1376267097
16.0218577069465127
8589934893
8589934892
8589934890
8589934894
29
30
26
24
549755813543
49
134217727
1283421812
14.9409963321726238
8589934940
8589934943
8589934938
8589934943
33
34
31
30
549755813492
49
134217727
1470594707
17.1199756203943743
8589934989
8589934991
8589934987
8589934993
37
39
36
35
549755813443
49
134217727
1523696248
17.7381589127448436
8589935038
8589935043
8589935036
8589935044
43
43
42
42
549755813392
49
134217727
1598706380
18.6113917803559943
8589935090
8589935096
8589935084
8589935094
49
48
48
46
549755813341
49
134217727
1489729003
17.3427281356003142
8589935139
8589935144
8589935135
8589935142
55
53
51
50
549755813290
49
134217727
1419736677
16.5279102222078578
8589935187
8589935195
8589935183
8589935192
59
58
56
56
549755813241
49
134217727
1344455482
15.6515217730946112
8589935237
8589935243
8589935232
8589935242
63
62
63
63
549755813191
49
134217727
1272194362
14.8102916157902555
8589935287
8589935293
8589935281
8589935292
69
67
67
67
549755813140
49
134217727
1150924642
13.3985262695417600
8589935337
8589935343
8589935331
8589935342
73
70
72
74
549755813089
49
134217727
1262680204
14.6995322404923474
8589935388
8589935394
8589935381
8589935391
79
74
76
79
549755813040
49
134217727
1387434451
16.1518628173743224
8589935438
8589935446
8589935431
8589935441
83
80
82
82
549755812989
49
134217727
1131549128
13.1729655981838825
8589935487
8589935495
8589935483
8589935492
88
85
86
88
549755812941
49
134217727
1239087971
14.4248825019351710
8589935538
8589935544
8589935533
8589935543
92
89
90
93
549755812891
49
134217727
1335266205
15.5445445029130855
8589935588
8589935593
8589935582
8589935595
96
95
97
99
549755812843
49
134217727
1443791191
16.8079416181882380
8589935639
8589935642
8589935634
8589935646
99
99
103
103
549755812794
49
134217727
1575160777
18.3372848837983682
8589935689
8589935693
8589935684
8589935695
103
106
107
109
549755812745
49
134217727
1393950993
16.2277253479820978
8589935738
8589935744
8589935735
8589935745
108
110
109
116
549755812696
49
134217727
1217125246
14.1692027329748615
8589935790
8589935795
8589935785
8589935793
114
117
112
120
549755812647
49
134217727
1266740369
14.7467987772594071
8589935839
8589935845
8589935834
8589935844
118
122
116
124
549755812598
49
134217727
1174062137
13.6678821530658059
8589935889
8589935894
8589935883
8589935893
123
127
121
129
549755812548
49
134217727
1237431719
14.4056011822147330
8589935938
8589935945
8589935933
8589935945
128
135
125
134
549755812497
49
134217727
1209846691
14.0844691905230608
8589935987
8589935993
8589935983
8589935995
133
141
130
140
549755812448
49
134217727
1281817400
14.9223185149695343
8589936036
8589936043
8589936035
8589936046
141
145
135
144
549755812397
49
134217727
1429492245
16.6414799836941327
8589936086
8589936092
8589936085
8589936094
147
150
140
151
549755812347
49
134217727
1607010446
18.7080638347263744
8589936136
8589936143
8589936135
8589936144
152
155
145
156
549755812296
49
134217727
1742619346
20.2867591998517014
8589936187
8589936193
8589936184
8589936193
157
161
148
161
549755812246
49
134217727
1779019682
20.7105148904735863
8589936238
8589936244
8589936235
8589936243
161
165
153
166
549755812197
49
134217727
1679185912
19.5482968446820848
8589936288
8589936294
8589936286
8589936293
166
171
159
171
549755812146
49
134217727
1478118496
17.2075640442507343
8589936338
8589936344
8589936337
8589936343
171
176
164
175
549755812096
49
134217727
1561818562
18.1819610610583950
8589936388
8589936395
8589936385
8589936394
176
182
170
180
549755812046
49
134217727
1568557496
18.2604125757458249
8589936438
8589936444
8589936436
8589936444
181
185
173
186
549755811994
49
134217727
1421922350
16.5533548068827727
8589936487
8589936492
8589936486
8589936494
187
191
177
188
549755811941
49
134217727
1365803618
15.9000467776698358
8589936537
8589936541
8589936535
8589936543
191
196
181
192
549755811891
49
134217727
1507701615
17.5519568734654214
8589936589
8589936593
8589936585
8589936595
197
201
185
197
549755811842
49
134217727
1421081159
16.5435620472933778
8589936637
8589936643
8589936633
8589936643
202
205
189
203
549755811792
49
134217727
1356042166
15.7864085272609955
8589936686
8589936692
8589936683
8589936695
207
209
195
207
549755811742
49
134217727
1247903155
14.5275047460831939
8589936736
8589936742
8589936731
8589936746
214
216
202
211
549755811693
49
134217727
1403686958
16.3410668987216567
8589936785
8589936792
8589936781
8589936796
219
221
206
215
549755811644
49
134217727
1536526136
17.8875184687024280
8589936836
8589936843
8589936832
8589936847
223
224
212
218
549755811593
49
134217727
1543729987
17.9713823295894422
8589936886
8589936895
8589936882
8589936896
228
229
219
224
549755811541
49
134217727
1663184763
19.3620189452827063
8589936937
8589936945
8589936931
8589936943
235
235
227
230
549755811491
49
134217727
1618186518
18.8381704281155500
8589936987
8589936996
8589936980
8589936992
241
241
232
234
549755811440
49
134217727
1417513912
16.5020338331240737
8589937039
8589937045
8589937030
8589937042
246
246
238
239
549755811390
49
134217727
1543238645
17.9656623626810834
8589937089
8589937095
8589937079
8589937090
252
251
244
245
549755811341
49
134217727
1590886114
18.5203519031481889
8589937139
8589937145
8589937130
8589937140
258
256
249
248
549755811290
49
134217727
1809829817
21.0691920604162952
8589937188
8589937196
8589937179
8589937191
263
261
254
255
549755811240
49
134217727
1896897350
22.0827915538461497
8589937237
8589937245
8589937229
8589937239
269
266
257
260
549755811190
49
134217727
1928382021
22.4493213689263023
8589937287
8589937296
8589937278
8589937287
274
273
260
265
549755811139
49
134217727
2204083655
25.6589108117737155
8589937336
8589937346
8589937329
8589937336
279
281
266
270
549755811088
49
134217727
1952429910
22.7292756350521010
8589937387
8589937396
8589937381
8589937387
283
285
270
275
549755811039
49
134217727
2023626674
23.5581150559706067
8589937437
8589937445
8589937430
8589937437
289
291
274
279
549755810988
49
134217727
2033734867
23.6757899143791732
8589937488
8589937493
8589937480
8589937488
294
296
279
283
549755810938
49
134217727
1762633209
20.5197512374864317
8589937537
8589937546
8589937529
8589937538
298
300
283
290
549755810886
49
134217727
2059670955
23.9777257132198613
8589937588
8589937597
8589937579
8589937586
302
304
289
295
549755810836
49
134217727
2121345070
24.6957069059195007
8589937636
8589937646
8589937628
8589937636
308
308
293
300
549755810786
49
134217727
2298205880
26.7546377203874925
8589937684
8589937696
8589937678
8589937686
313
314
299
305
549755810737
49
134217727
2354780546
27.4132535120460759
8589937735
8589937746
8589937729
8589937736
317
319
305
311
549755810686
49
134217727
2237829613
26.0517654665317835
8589937784
8589937796
8589937780
8589937785
322
325
311
316
549755810637
49
134217727
2032044581
23.6561123876007713
8589937834
8589937846
8589937830
8589937834
328
329
317
321
549755810587
49
134217727
2170719499
25.2705009185510825
8589937884
8589937897
8589937882
8589937886
333
333
323
327
549755810535
49
134217727
2355455363
27.4211094225514245
8589937936
8589937946
8589937932
8589937937
339
338
326
333
549755810484
49
134217727
2371379811
27.6064943876753439
8589937986
8589937995
8589937983
8589937987
344
344
330
338
549755810435
49
134217727
2487227546
28.9551395252965982
8589938036
8589938045
8589938033
8589938038
347
347
337
345
549755810383
49
134217727
2504161649
29.1522784309055325
8589938086
8589938096
8589938083
8589938088
352
351
342
351
549755810333
49
134217727
2504388981
29.1549249296456594
8589938136
8589938145
8589938131
8589938139
358
357
348
355
549755810284
49
134217727
2583362353
30.0742959783658463
8589938186
8589938194
8589938181
8589938188
362
361
354
361
549755810235
49
134217727
2773126863
32.2834456260241183
8589938235
8589938246
8589938230
8589938239
369
365
355
365
549755810185
49
134217727
2759432387
32.1240209477635190
8589938285
8589938296
8589938279
8589938289
374
371
360
370
549755810137
49
134217727
2950900642
34.3530047974508861
8589938335
8589938347
8589938326
8589938340
380
377
366
375
549755810086
49
134217727
3194806819
37.1924464124224059
8589938387
8589938398
8589938376
8589938390
384
381
371
380
549755810036
49
134217727
3348649522
38.9834111811545867
8589938438
8589938448
8589938427
8589938438
390
385
375
386
549755809987
49
134217727
3349520813
38.9935543446026855
8589938486
8589938497
8589938477
8589938489
393
389
380
392
549755809936
49
134217727
3451684922
40.1829011139377386
8589938535
8589938546
8589938528
8589938539
398
395
383
396
549755809884
49
134217727
3408022728
39.6746062685449061
8589938586
8589938596
8589938577
8589938588
403
400
388
401
549755809833
49
134217727
3430074526
39.9313229923807427
8589938637
8589938646
8589938627
8589938636
409
406
395
406
549755809783
49
134217726
3628297930
42.2389471309057640
8589938687
8589938697
8589938676
8589938687
416
411
401
412
549755809732
49
134217726
3191990294
37.1596577405354651
8589938738
8589938749
8589938726
8589938736
421
418
406
416
549755809681
49
134217726
3181291083
37.0351025337778168
8589938789
8589938800
8589938776
8589938784
425
423
411
422
549755809631
49
134217726
3308648868
38.5177422886119345
8589938839
8589938849
8589938826
8589938834
430
426
417
427
549755809581
49
134217726
3408949880
39.6853997435375945
8589938890
8589938899
8589938877
8589938883
435
434
423
434
549755809529
49
134217726
3367897665
39.2074890657629567
8589938939
8589938950
8589938927
8589938933
441
437
430
439
549755809479
49
134217726
3377632951
39.3208227035293163
8589938989
8589938999
8589938977
8589938983
446
443
436
445
549755809429
49
134217726
3264961697
38.0091566727992998
8589939039
8589939050
8589939027
8589939031
450
446
440
451
549755809379
49
134217726
3525525037
41.0425131826199916
8589939090
8589939101
8589939078
8589939081
453
451
446
456
549755809330
49
134217726
3444521977
40.0995134495699546
8589939141
8589939151
8589939130
8589939131
459
456
452
461
549755809279
49
134217726
3467998866
40.3728204185040980
8589939190
8589939200
8589939179
8589939181
464
463
457
465
549755809231
49
134217726
3452183346
40.1887035254134304
8589939239
8589939251
8589939228
8589939231
470
467
464
471
549755809180
49
134217726
3320497588
38.6556795421386070
8589939289
8589939301
8589939278
8589939282
475
472
470
478
549755809130
49
134217726
3239789427
37.7161128858087551
8589939340
8589939351
8589939327
8589939334
482
477
475
485
549755809081
49
134217726
3303412421
38.4567820227589792
8589939388
8589939401
8589939377
8589939385
486
481
482
488
549755809030
49
134217726
3464091991
40.3273384013918630
8589939437
8589939452
8589939426
8589939435
492
485
486
494
549755808979
49
134217726
3558443497
41.4257344977689144
8589939488
8589939501
8589939476
8589939484
497
490
490
499
549755808930
49
134217726
3444987263
40.1049301010458450
8589939536
8589939549
8589939527
8589939531
503
494
494
505
549755808880
49
134217726
3486799062
40.5916835056079961
8589939585
8589939599
8589939577
8589939583
507
500
501
509
549755808830
49
134217726
3338900207
38.8699142224055691
8589939635
8589939650
8589939626
8589939633
512
504
506
515
549755808779
49
134217726
3534309723
41.1447803925089701
8589939685
8589939700
8589939677
8589939682
517
508
510
520
549755808729
49
134217726
3551520317
41.3451380716855041
8589939734
8589939749
8589939729
8589939732
521
514
514
526
549755808678
49
134217726
3477121480
40.4790216156254132
8589939784
8589939801
8589939779
8589939782
526
520
518
532
549755808627
49
134217726
3308322619
38.5139442453745460
8589939835
8589939850
8589939830
8589939832
530
525
524
537
549755808576
49
134217726
3025440707
35.2207653600153634
8589939883
8589939899
8589939879
8589939883
535
531
529
543
549755808527
49
134217726
2945268752
34.2874409641806466
8589939933
8589939947
8589939929
8589939933
539
534
530
546
549755808476
49
134217726
3096551501
36.0486039596821897
8589939984
8589939996
8589939978
8589939984
545
539
537
551
549755808428
49
134217726
3091078118
35.9848853920215461
8589940034
8589940045
8589940027
8589940034
551
543
543
556
549755808378
49
134217726
2896065707
33.7146421338565574
8589940083
8589940094
8589940078
8589940084
556
549
548
563
549755808330
49
134217726
2995359460
34.8705735625268147
8589940132
8589940145
8589940128
8589940135
561
554
551
568
549755808280
49
134217726
3113789922
36.2492855972853434
8589940181
8589940193
8589940178
8589940186
566
561
556
574
549755808229
49
134217726
3179507932
37.0143439173512263
8589940231
8589940245
8589940230
8589940236
569
567
560
579
549755808179
49
134217726
3282684531
38.2154776217956638
8589940280
8589940295
8589940279
8589940285
575
570
564
584
549755808129
49
134217726
3178705795
37.0050058126127226
8589940330
8589940344
8589940329
8589940335
578
573
569
590
549755808080
49
134217726
3333534288
38.8074466974558518
8589940379
8589940394
8589940378
8589940386
583
578
574
595
549755808029
49
134217726
3683395219
42.8803639919424597
8589940430
8589940443
8589940428
8589940435
588
584
580
600
549755807980
49
134217726
3600319901
41.9132400013930351
8589940481
8589940493
8589940478
8589940487
592
588
584
604
549755807930
49
134217726
3346093206
38.9536517447914434
8589940533
8589940542
8589940528
8589940537
597
594
589
609
549755807878
49
134217726
3249222833
37.8259321835082787
8589940584
8589940592
8589940577
8589940586
603
598
593
614
549755807829
49
134217726
3253101292
37.8710833862129093
8589940634
8589940642
8589940627
8589940635
609
603
596
619
549755807780
49
134217726
3521437142
40.9949238191980925
8589940683
8589940692
8589940678
8589940685
615
610
603
623
549755807730
49
134217726
3642803383
42.4078128223342716
8589940735
8589940743
8589940728
8589940735
621
615
607
628
549755807682
49
134217726
3683336322
42.8796783379297253
8589940783
8589940795
8589940778
8589940786
625
622
611
633
549755807631
49
134217726
3639339866
42.3674921782470690
8589940831
8589940846
8589940827
8589940836
629
626
616
637
549755807580
49
134217726
3634658823
42.3129976716720435
8589940880
8589940897
8589940879
8589940887
634
631
622
640
549755807531
49
134217726
3653077933
42.5274243246892283
8589940930
8589940947
8589940930
8589940937
638
637
629
644
549755807483
49
134217726
3831368652
44.6030014707193132
8589940980
8589940997
8589940981
8589940986
642
643
633
650
549755807433
49
134217726
3811474394
44.3714018313736176
8589941030
8589941047
8589941031
8589941036
649
650
638
654
549755807382
49
134217726
3556051104
41.3978833731383986
8589941081
8589941098
8589941079
8589941087
653
654
643
657
549755807331
49
134217726
3761528021
43.7899495141137933
8589941133
8589941147
8589941130
8589941137
658
658
647
664
549755807280
49
134217726
3745000426
43.5975429928848541
8589941181
8589941198
8589941181
8589941187
664
661
654
668
549755807231
49
134217726
3791454954
44.1383448703769403
8589941230
8589941250
8589941231
8589941237
668
665
659
674
549755807183
49
134217726
3916226049
45.5908715877134796
8589941281
8589941301
8589941281
8589941288
673
669
665
680
549755807135
49
134217726
3734676012
43.4773509926031068
8589941330
8589941350
8589941334
8589941339
678
673
670
687
549755807084
49
134217726
3769914763
43.8875840397099068
8589941382
8589941399
8589941385
8589941389
685
677
676
692
549755807036
49
134217726
3704969347
43.1315198933561135
8589941432
8589941449
8589941435
8589941439
691
681
682
697
549755806984
49
134217726
3581763373
41.6972135857824995
8589941483
8589941499
8589941485
8589941489
697
685
684
703
549755806936
49
134217726
3715069363
43.2490995579138868
8589941534
8589941548
8589941534
8589941539
700
689
689
707
549755806887
49
134217726
3685628160
42.9063588413146704
8589941585
8589941598
8589941585
8589941591
706
692
695
713
549755806837
49
134217726
3690928018
42.9680573058958188
8589941634
8589941650
8589941633
8589941641
711
698
701
719
549755806788
49
134217726
3981490878
46.3506542010914870
8589941685
8589941702
8589941681
8589941692
716
704
708
726
549755806738
49
134217726
3889976159
45.2852826508662574
8589941737
8589941752
8589941731
8589941744
720
709
713
731
549755806688
49
134217726
3894984403
45.3435862839272588
8589941787
8589941802
8589941782
8589941793
724
715
717
736
549755806641
49
134217726
3835959215
44.6564426535434791
8589941837
8589941851
8589941831
8589941844
729
720
724
741
549755806591
49
134217726
3939121644
45.8574113958765253
8589941886
8589941900
8589941882
8589941893
735
727
730
747
549755806542
49
134217726
3966132629
46.1718606438618338
8589941936
8589941950
8589941933
8589941944
739
732
735
751
549755806494
49
134217726
3928142477
45.7295970703900849
8589941987
8589941999
8589941984
8589941993
744
735
740
757
549755806445
49
134217726
3804491341
44.2901083861044143
8589942037
8589942048
8589942035
8589942043
751
741
745
763
549755806395
49
134217726
3932345647
45.7785284076716295
8589942088
8589942097
8589942086
8589942092
756
746
749
768
549755806346
49
134217726
3902919377
45.4359615427285064
8589942139
8589942147
8589942135
8589942142
760
751
754
775
549755806296
49
134217726
3837984750
44.6800229941768734
8589942189
8589942198
8589942186
8589942193
764
757
760
779
549755806246
49
134217726
3815494438
44.4182013028768523
8589942240
8589942250
8589942237
8589942243
768
764
764
784
549755806195
49
134217726
3764151329
43.8204888444884375
8589942291
8589942301
8589942287
8589942295
774
767
769
789
549755806144
49
134217726
4219531905
49.1218164737916823
8589942341
8589942353
8589942336
8589942346
779
771
775
795
549755806095
49
134217726
4441143572
51.7017158287719454
8589942389
8589942401
8589942386
8589942396
783
775
780
800
549755806044
49
134217726
4409345771
51.3315407057335378
8589942439
8589942450
8589942435
8589942447
787
780
786
806
549755805996
49
134217726
4266197305
49.6650732318562405
8589942488
8589942499
8589942486
8589942496
791
785
791
809
549755805945
49
134217726
4254562757
49.5296292606971917
8589942538
8589942550
8589942535
8589942546
795
790
794
814
549755805896
49
134217726
4303778347
50.1025741427371187
8589942591
8589942600
8589942585
8589942597
801
794
798
820
549755805846
49
134217726
4423724733
51.4989338519081556
8589942640
8589942652
8589942636
8589942646
808
800
804
827
549755805795
49
134217726
4389397642
51.0993139122246305
8589942691
8589942702
8589942686
8589942696
810
807
811
831
549755805746
49
134217726
4346545905
50.6004540480388698
8589942741
8589942753
8589942736
8589942747
816
812
816
835
549755805694
49
134217725
4333301222
50.4462656343884106
8589942792
8589942803
8589942787
8589942796
819
816
821
841
549755805643
49
134217725
4223438164
49.1672913127110007
8589942841
8589942853
8589942837
8589942846
824
822
827
845
549755805593
49
134217725
4121805712
47.9841338474276924
8589942893
8589942903
8589942886
8589942896
831
827
832
849
549755805543
49
134217725
4169241405
48.5363579990226626
8589942941
8589942952
8589942937
8589942947
836
831
837
855
549755805492
49
134217725
4399120169
51.2124990305469296
8589942992
8589943002
8589942988
8589942997
841
836
843
861
549755805443
49
134217725
4241213209
49.3742200723655742
8589943041
8589943052
8589943038
8589943047
848
841
847
865
549755805394
49
134217725
3939340252
45.8599563329146349
8589943090
8589943101
8589943088
8589943097
854
845
851
871
549755805343
49
134217725
4001684668
46.5857408590907056
8589943141
8589943150
8589943137
8589943147
859
851
858
875
549755805294
49
134217725
3752629885
43.6863615762612199
8589943190
8589943202
8589943185
8589943197
863
856
863
881
549755805245
49
134217725
3778383179
43.9861693802891054
8589943239
8589943253
8589943235
8589943249
869
862
866
888
549755805194
49
134217725
3979930667
46.3324909450541256
8589943289
8589943304
8589943285
8589943298
873
869
872
893
549755805145
49
134217725
4083797558
47.5416607100541313
8589943339
8589943355
8589943336
8589943349
878
875
878
899
549755805097
49
134217725
4007305388
46.6511746438386226
8589943389
8589943405
8589943388
8589943398
883
882
883
905
549755805047
49
134217725
4220375662
49.1316390982242694
8589943440
8589943454
8589943437
8589943447
888
885
888
909
549755804998
49
134217725
4374584282
50.9268637119860728
8589943489
8589943505
8589943486
8589943497
892
891
892
915
549755804947
49
134217725
4393082067
51.1422062710874457
8589943538
8589943554
8589943537
8589943547
897
895
896
920
549755804896
49
134217725
4537280263
52.8208942131873869
8589943587
8589943604
8589943588
8589943598
902
902
901
925
549755804846
49
134217725
4575997528
53.2716224940344674
8589943636
8589943655
8589943637
8589943647
906
906
907
929
549755804796
49
134217725
4700516503
54.7212141510764027
8589943686
8589943704
8589943687
8589943698
910
911
911
935
549755804747
49
134217725
4803313775
55.9179319009630120
8589943736
8589943755
8589943735
8589943748
915
917
915
940
549755804697
49
134217725
5142585389
59.8675733141468953
8589943785
8589943805
8589943786
8589943796
920
923
921
945
549755804647
49
134217725
5125988936
59.6743651705871159
8589943835
8589943855
8589943837
8589943845
926
927
926
950
549755804599
49
134217725
5284914257
61.5244994152338123
8589943886
8589943906
8589943888
8589943896
930
931
932
955
549755804549
49
134217725
5339526165
62.1602656910012499
8589943937
8589943956
8589943938
8589943947
935
937
935
961
549755804499
49
134217725
5315721619
61.8831443024576160
8589943986
8589944006
8589943987
8589943997
938
942
941
965
549755804450
49
134217725
5315449086
61.8799716053351290
8589944035
8589944055
8589944039
8589944045
944
948
945
970
549755804401
49
134217725
5365992430
62.4683735682742238
8589944086
8589944107
8589944088
8589944095
949
954
949
978
549755804353
49
134217725
5348041809
62.2594008399923879
8589944136
8589944157
8589944138
8589944144
957
957
955
983
549755804303
49
134217725
5529309322
64.3696324310549386
8589944187
8589944207
8589944190
8589944193
961
963
958
989
549755804255
49
134217725
5492990015
63.9468200476573401
8589944238
8589944257
8589944240
8589944243
966
968
963
993
549755804203
49
134217725
5506253925
64.1012322741301688
8589944288
8589944306
8589944291
8589944293
972
973
970
998
549755804154
49
134217725
5723761437
66.6333529839654659
8589944338
8589944356
8589944341
8589944344
977
979
975
1000
549755804105
49
134217725
5580669618
64.9675449599306916
8589944389
8589944406
8589944390
8589944393
980
983
980
1000
549755804055
49
134217725
5628340455
65.5225065512414915
8589944438
8589944456
8589944440
8589944443
985
987
985
1000
549755804005
49
134217725
5631454053
65.5587535978654756
8589944487
8589944505
8589944490
8589944495
989
991
990
1000
549755803956
49
134217725
5881277220
68.4670780342340350
8589944538
8589944554
8589944540
8589944545
996
998
993
1000
549755803907
49
134217725
5898898303
68.6722144404393191
8589944587
8589944605
8589944591
8589944596
999
1000
998
1000
549755803858
49
134217725
6158791567
71.6977702393880350
8589944636
8589944655
8589944642
8589944647
1000
1000
1000
1000
549755803808
49
134217725
6222724495
72.4420474787319790
8589944687
8589944706
8589944692
8589944696
1000
1000
1000
1000
549755803759
49
134217725
6102439232
71.0417427173460396
8589944738
8589944756
8589944740
8589944746
1000
1000
1000
1000
549755803711
49
134217725
5986926219
69.6969942576096884
8589944788
8589944806
8589944791
8589944797
1000
1000
1000
1000
549755803660
49
134217725
6104926268
71.0706956238953751
8589944839
8589944855
8589944841
8589944846
1000
1000
1000
1000
549755803611
49
134217725
6140131505
71.4805385274786005
8589944889
8589944904
8589944890
8589944897
1000
1000
1000
1000
549755803562
49
134217725
5996060133
69.8033270120910032
8589944939
8589944953
8589944939
8589944947
1000
1000
1000
1000
549755803511
49
134217725
6014328126
70.0159944393671196
8589944987
8589945004
8589944991
8589944995
1000
1000
1000
1000
549755803460
49
134217725
6204746688
72.2327582593009367
8589945036
8589945054
8589945040
8589945045
1000
1000
1000
1000
549755803412
49
134217725
6309287540
73.4497739532380223
8589945085
8589945103
8589945090
8589945095
1000
1000
1000
1000
549755803361
49
134217725
6442386196
74.9992462401882705
8589945135
8589945154
8589945140
8589945147
1000
1000
1000
1000
549755803310
49
134217725
6280477111
73.1143764111431267
8589945184
8589945204
8589945190
8589945196
1000
1000
1000
1000
549755803260
49
134217725
6342603781
73.8376260493034380
8589945233
8589945254
8589945239
8589945247
1000
1000
1000
1000
549755803212
49
134217725
6101334430
71.0288811267538733
8589945284
8589945304
8589945289
8589945295
1000
1000
1000
1000
549755803162
49
134217725
6075291204
70.7256980731862228
8589945336
8589945354
8589945338
8589945347
1000
1000
1000
1000
549755803113
49
134217725
5894535973
68.6214302410771637
8589945386
8589945402
8589945388
8589945398
1000
1000
1000
1000
549755803062
49
134217725
5803737573
67.5643977418450135
8589945437
8589945449
8589945437
8589945447
1000
1000
1000
1000
549755803009
49
134217725
5644115052
65.7061470288019507
8589945487
8589945497
8589945488
8589945498
1000
1000
1000
1000
549755802959
49
134217725
5507208157
64.1123410029905045
8589945535
8589945547
8589945538
8589945550
1000
1000
1000
1000
549755802910
49
134217725
5498901729
64.0156414487024819
8589945587
8589945595
8589945589
8589945599
1000
1000
1000
1000
549755802857
49
134217725
5535681032
64.4438088877923576
8589945637
8589945644
8589945640
8589945650
1000
1000
1000
1000
549755802806
49
134217725
5917761545
68.8918114799756296
8589945688
8589945695
8589945688
8589945701
1000
1000
1000
1000
549755802756
49
134217725
5771225051
67.1859021652101092
8589945738
8589945744
8589945738
8589945751
1000
1000
1000
1000
549755802705
49
134217725
5741687549
66.8420403959065794
8589945789
8589945794
8589945788
8589945799
1000
1000
1000
1000
549755802656
49
134217725
5789576384
67.3995398057719513
8589945840
8589945845
8589945838
8589945848
1000
1000
1000
1000
549755802606
49
134217725
5721272977
66.6043834991359063
8589945890
8589945896
8589945889
8589945898
1000
1000
1000
1000
549755802558
49
134217725
5828667120
67.8546158682751184
8589945939
8589945944
8589945939
8589945948
1000
1000
1000
1000
549755802508
49
134217725
5896721046
68.6468678372388439
8589945989
8589945994
8589945988
8589945999
1000
1000
1000
1000
549755802458
49
134217725
5924380342
68.9688644203413617
8589946038
8589946044
8589946038
8589946049
1000
1000
1000
1000
549755802408
49
134217725
5847233742
68.0707597904910813
8589946091
8589946095
8589946085
8589946099
1000
1000
1000
1000
549755802358
49
134217725
6071376024
70.6801193862632147
8589946140
8589946144
8589946134
8589946149
1000
1000
1000
1000
549755802308
49
134217725
6074894635
70.7210814044869238
8589946192
8589946194
8589946184
8589946199
1000
1000
1000
1000
549755802257
49
134217725
5936405429
69.1088548537155134
8589946243
8589946241
8589946234
8589946249
1000
1000
1000
1000
549755802208
49
134217725
6076831759
70.7436325000379185
8589946294
8589946290
8589946285
8589946298
1000
1000
1000
1000
549755802160
49
134217725
5933556425
69.0756880834089912
8589946343
8589946341
8589946334
8589946348
1000
1000
1000
1000
549755802109
49
134217725
5747822648
66.9134623408383789
8589946393
8589946392
8589946384
8589946397
1000
1000
1000
1000
549755802061
49
134217725
5576804074
64.9225441115728046
8589946443
8589946441
8589946435
8589946446
1000
1000
1000
1000
549755802011
49
134217725
5715179851
66.5334501653683503
8589946493
8589946491
8589946483
8589946496
1000
1000
1000
1000
549755801961
49
134217725
5672471147
66.0362554225041691
8589946543
8589946540
8589946532
8589946549
1000
1000
1000
1000
549755801912
49
134217725
5696804463
66.3195325038961414
8589946592
8589946590
8589946582
8589946598
1000
1000
1000
1000
549755801861
49
134217725
5966152620
69.4551577348016167
8589946642
8589946641
8589946631
8589946650
1000
1000
1000
1000
549755801810
49
134217725
5969839805
69.4980822185964797
8589946692
8589946692
8589946681
8589946700
1000
1000
1000
1000
549755801760
49
134217725
5792718268
67.4361161506626416
8589946742
8589946742
8589946732
8589946750
1000
1000
1000
1000
549755801709
49
134217725
5865779582
68.2866617911222136
8589946792
8589946791
8589946783
8589946798
1000
1000
1000
1000
549755801659
49
134217725
5825838696
67.8216886723629955
8589946841
8589946842
8589946830
8589946850
1000
1000
1000
1000
549755801607
49
134217725
5997614401
69.8214210712572338
8589946889
8589946891
8589946880
8589946900
1000
1000
1000
1000
549755801557
49
134217724
6222429294
72.4386108814758813
8589946938
8589946942
8589946929
8589946950
1000
1000
1000
1000
549755801509
49
134217724
6110371470
71.1340861197697052
8589946989
8589946991
8589946980
8589946999
1000
1000
1000
1000
549755801459
49
134217724
6117154169
71.2130471278030370
8589947038
8589947042
8589947030
8589947049
1000
1000
1000
1000
549755801410
49
134217724
6129397315
71.3555761115788840
8589947088
8589947093
8589947079
8589947100
1000
1000
1000
1000
549755801358
49
134217724
6101749532
71.0337135586843544
8589947135
8589947143
8589947130
8589947151
1000
1000
1000
1000
549755801310
49
134217724
6213520848
72.3349029247248865
8589947185
8589947193
8589947179
8589947201
1000
1000
1000
1000
549755801260
49
134217724
6360908783
74.0507243129489297
8589947234
8589947242
8589947228
8589947250
1000
1000
1000
1000
549755801209
49
134217724
6510013041
75.7865263375774134
8589947283
8589947290
8589947280
8589947299
1000
1000
1000
1000
549755801158
49
134217724
6542785462
76.1680475238458143
8589947334
8589947339
8589947330
8589947350
1000
1000
1000
1000
549755801107
49
134217724
6616275096
77.0235794596472800
8589947383
8589947389
8589947381
8589947399
1000
1000
1000
1000
549755801057
49
134217724
6517970511
75.8791634715821317
8589947435
8589947439
8589947431
8589947450
1000
1000
1000
1000
549755801008
49
134217724
6515103488
75.8457869346549529
8589947486
8589947489
8589947480
8589947499
1000
1000
1000
1000
549755800959
49
134217724
6541720857
76.1556538971921952
8589947537
8589947538
8589947531
8589947549
1000
1000
1000
1000
549755800908
49
134217724
6610403749
76.9552279884066763
8589947588
8589947587
8589947579
8589947599
1000
1000
1000
1000
549755800856
49
134217724
6551674528
76.2715298734213718
8589947639
8589947637
8589947628
8589947649
1000
1000
1000
1000
549755800804
49
134217724
6654972442
77.4740758654208861
8589947688
8589947687
8589947677
8589947697
1000
1000
1000
1000
549755800754
49
134217724
7005338627
81.5528750838949890
8589947739
8589947737
8589947728
8589947747
1000
1000
1000
1000
549755800704
49
134217724
6994850785
81.4307805374470064
8589947786
8589947787
8589947778
8589947798
1000
1000
1000
1000
549755800653
49
134217724
7036348438
81.9138767907824814
8589947836
8589947837
8589947828
8589947849
1000
1000
1000
1000
549755800603
49
134217724
7194233557
83.7519014849541890
8589947887
8589947888
8589947878
8589947902
1000
1000
1000
1000
549755800553
49
134217724
7385356490
85.9768652595355576
8589947938
8589947939
8589947928
8589947953
1000
1000
1000
1000
549755800504
49
134217724
7401329328
86.1628135724917996
8589947988
8589947988
8589947979
8589948004
1000
1000
1000
1000
549755800454
49
134217724
7596273870
88.4322667288585649
8589948039
8589948038
8589948029
8589948054
1000
1000
1000
1000
549755800403
49
134217724
7689866143
89.5218241958296375
8589948090
8589948088
8589948081
8589948103
1000
1000
1000
1000
549755800353
49
134217724
7631212533
88.8390063005593760
8589948139
8589948137
8589948131
8589948153
1000
1000
1000
1000
549755800303
49
134217724
7434508159
86.5490660048542964
8589948189
8589948189
8589948180
8589948204
1000
1000
1000
1000
549755800250
49
134217724
7234975668
84.2262020899777895
8589948239
8589948238
8589948230
8589948255
1000
1000
1000
1000
549755800200
49
134217724
7306585262
85.0598474842845462
8589948289
8589948288
8589948280
8589948305
1000
1000
1000
1000
549755800150
49
134217724
7393950050
86.0769074726768935
8589948339
8589948337
8589948329
8589948354
1000
1000
1000
1000
549755800099
49
134217724
7467761981
86.9361914439626275
8589948389
8589948389
8589948381
8589948404
1000
1000
1000
1000
549755800049
49
134217724
7535313195
87.7225910676557419
8589948440
8589948439
8589948431
8589948456
1000
1000
1000
1000
549755799998
49
134217724
7347760752
85.5391932740323426
8589948490
8589948489
8589948479
8589948505
1000
1000
1000
1000
549755799946
49
134217724
7486917511
87.1591911627964180
8589948540
8589948539
8589948529
8589948555
1000
1000
1000
1000
549755799895
49
134217724
7611246200
88.6065675880512202
8589948590
8589948589
8589948579
8589948604
1000
1000
1000
1000
549755799844
49
134217724
7591906438
88.3814231375757799
8589948639
8589948639
8589948629
8589948655
1000
1000
1000
1000
549755799794
49
134217724
7813068781
90.9560916646753412
8589948689
8589948689
8589948680
8589948707
1000
1000
1000
1000
549755799746
49
134217724
7768499615
90.4372382843197045
8589948738
8589948740
8589948729
8589948756
1000
1000
1000
1000
549755799694
49
134217724
7957414973
92.6365025086620761
8589948788
8589948790
8589948779
8589948804
1000
1000
1000
1000
549755799643
49
134217724
8068979722
93.9352871212203411
8589948837
8589948839
8589948831
8589948852
1000
1000
1000
1000
549755799592
49
134217724
7799340046
90.7962681595132892
8589948888
8589948890
8589948880
8589948902
1000
1000
1000
1000
549755799543
49
134217724
7967228116
92.7507425255983833
8589948939
8589948940
8589948930
8589948953
1000
1000
1000
1000
549755799493
49
134217724
7799787976
90.8014827447914854
8589948987
8589948992
8589948981
8589949003
1000
1000
1000
1000
549755799441
49
134217724
7945420329
92.4968664737709219
8589949037
8589949041
8589949031
8589949051
1000
1000
1000
1000
549755799391
49
134217724
8047396610
93.6840266315500259
8589949086
8589949090
8589949081
8589949102
1000
1000
1000
1000
549755799342
49
134217724
8167584292
95.0831953970314459
8589949135
8589949140
8589949131
8589949152
1000
1000
1000
1000
549755799293
49
134217724
8236090732
95.8807153231577161
8589949188
8589949191
8589949182
8589949203
1000
1000
1000
1000
549755799243
49
134217724
8337833469
97.0651566676304753
8589949236
8589949240
8589949232
8589949254
1000
1000
1000
1000
549755799194
49
134217724
8252512606
96.0718911023387676
8589949286
8589949291
8589949280
8589949305
1000
1000
1000
1000
549755799143
49
134217724
8182998878
95.2626447986736622
8589949335
8589949341
8589949330
8589949355
1000
1000
1000
1000
549755799093
49
134217724
8453473652
98.4113855774834860
8589949387
8589949390
8589949381
8589949406
1000
1000
1000
1000
549755799042
49
134217724
8418623887
98.0056809229869117
8589949438
8589949440
8589949430
8589949456
1000
1000
1000
1000
549755798993
49
134217724
8073624197
93.9893559203632947
8589949488
8589949489
8589949481
8589949506
1000
1000
1000
1000
549755798943
49
134217724
8174950966
95.1689547712806245
8589949537
8589949540
8589949531
8589949556
1000
1000
1000
1000
549755798893
49
134217724
8165242250
95.0559304360679960
8589949588
8589949589
8589949580
8589949606
1000
1000
1000
1000
549755798843
49
134217724
8517653118
99.1585328951801444
8589949638
8589949640
8589949630
8589949658
1000
1000
1000
1000
549755798792
49
134217724
8439651690
98.2504767609789269
8589949688
8589949690
8589949681
8589949709
1000
1000
1000
1000
549755798740
49
134217724
8589934592
100.0000000000000000
8589949738
8589949740
8589949730
8589949757
1000
1000
1000
1000
549755798691
49
134217724
8589934592
100.0000000000000000
8589949789
8589949789
8589949780
8589949807
1000
1000
1000
1000
549755798640
49
134217724
8589934592
100.0000000000000000
8589949840
8589949839
8589949829
8589949857
1000
1000
1000
1000
549755798589
49
134217724
8589934592
100.0000000000000000
8589949889
8589949891
8589949881
8589949907
1000
1000
1000
1000
549755798539
49
134217724
8589934592
100.0000000000000000
8589949940
8589949941
8589949928
8589949957
1000
1000
1000
1000
549755798488
49
134217724
8567214349
99.7355015651484820
8589949989
8589949992
8589949979
8589950007
1000
1000
1000
1000
549755798439
49
134217724
8589934592
100.0000000000000000
8589950039
8589950044
8589950028
8589950058
1000
1000
1000
1000
549755798388
49
134217724
8589934592
100.0000000000000000
8589950089
8589950094
8589950077
8589950105
1000
1000
1000
1000
549755798339
49
134217724
8589934592
100.0000000000000000
8589950140
8589950143
8589950127
8589950154
1000
1000
1000
1000
549755798290
49
134217724
8442847646
98.2876825951637016
8589950191
8589950193
8589950176
8589950206
1000
1000
1000
1000
549755798239
49
134217724
8386339600
97.6298423511196205
8589950240
8589950244
8589950226
8589950256
1000
1000
1000
1000
54975579818
Download .txt
gitextract_xmcwhvin/

├── .clang-format
├── .gitignore
├── LICENSE.md
├── Makefile
├── README.md
├── ansible-playbook.yaml
├── avx512.cpp
├── avx512.hpp
├── data/
│   ├── README.md
│   ├── ibm.data
│   ├── redis_memory.data
│   ├── usages.data
│   ├── used.data
│   └── writes.data
├── example/
│   ├── Makefile
│   └── example.cpp
├── gbench/
│   └── perf.cpp
├── gtest/
│   └── test.cpp
├── helpers.hpp
├── middleout.cpp
├── middleout.hpp
├── scalar.cpp
└── scalar.hpp
Download .txt
SYMBOL INDEX (77 symbols across 10 files)

FILE: avx512.cpp
  type middleout (line 18) | namespace middleout {
    class Avx52<double> (line 20) | class Avx52<double>
    class Avx52<int64_t> (line 21) | class Avx52<int64_t>
    class Avx52<uint64_t> (line 22) | class Avx52<uint64_t>
    function __m512i (line 40) | inline __m512i byteLength(__mmask8 mask, __m512i leftOffset, __m512i r...
    function __m512i (line 49) | inline __m512i byteRound(__m512i x) {
    function compressOffsets (line 57) | inline int compressOffsets(__mmask8 notSame, __m512i offsets) {
    function __m512i (line 71) | inline __m512i byte_reverse_within_epi64(__m512i a) {
    function compressBlock (line 107) | inline void compressBlock(std::vector<T>& data,
    function decompressBlock (line 218) | inline void decompressBlock(std::vector<char>& input,

FILE: avx512.hpp
  type middleout (line 18) | namespace middleout {
    class Avx52 (line 22) | class Avx52 {
      method maxCompressedSize (line 34) | static size_t maxCompressedSize(size_t count) {

FILE: example/example.cpp
  function compressionWrapper (line 59) | void compressionWrapper(std::vector<T>& dataToCompress, std::vector<char...
  function decompressionWrapper (line 91) | void decompressionWrapper(std::vector<char>& compressedData,
  function testSequence (line 155) | void testSequence(T from, T to) {
  function testStockData (line 178) | void testStockData() {
  function main (line 224) | int main(void) {

FILE: gbench/perf.cpp
  function getCompressor (line 36) | auto getCompressor() {
  function getDecompressor (line 41) | auto getDecompressor() {
  function benchmarkCompress (line 119) | static void benchmarkCompress(benchmark::State& state, std::vector<T>& d...
  function benchmarkDecompress (line 134) | static void benchmarkDecompress(benchmark::State& state, std::vector<T>&...
  function BM_sequenceCompress (line 145) | static void BM_sequenceCompress(benchmark::State& state) {
  function BM_sequenceDecompress (line 152) | static void BM_sequenceDecompress(benchmark::State& state) {
  function BM_RandRepeatCompress (line 159) | static void BM_RandRepeatCompress(benchmark::State& state) {
  function BM_RandRepeatDecompress (line 166) | static void BM_RandRepeatDecompress(benchmark::State& state) {
  function BM_testRandomDistributionCompress (line 173) | static void BM_testRandomDistributionCompress(benchmark::State& state) {
  function BM_testRandomDistributionDecompress (line 180) | static void BM_testRandomDistributionDecompress(benchmark::State& state) {

FILE: gtest/test.cpp
  type middleout (line 27) | namespace middleout {
    function checkFunctions (line 30) | void checkFunctions(vector<V>& dataIn, T& compress, U& decompress) {
    function compressDecompressCheck (line 55) | void compressDecompressCheck(vector<T>& dataIn) {
    function testSequence (line 76) | void testSequence(long from, long to) {
    function testSequenceDecimal (line 99) | void testSequenceDecimal(double from, double to) {
    function testRDRAndomDistribution (line 109) | void testRDRAndomDistribution(double from, double to) {
    function TEST (line 126) | TEST(CompressionTest, exampleCompressRatioTest) {
    function TEST (line 145) | TEST(CompressionTest, basicTest) {
    function TEST (line 248) | TEST(CompressionTest, testSequences) {
    function TEST (line 264) | TEST(CompressionTest, testDifferentInputDataLength) {
    function TEST (line 270) | TEST(CompressionTest, testRandom) {
    function TEST (line 282) | TEST(CompressionTest, testRDRandom) {
    function TEST (line 290) | TEST(CompressionTest, testVarLength) {
    function TEST (line 296) | TEST(CompressionTest, testSteps) {
    function TEST (line 308) | TEST(CompressionTest, testAlteringSeq) {
    function TEST (line 331) | TEST(CompressionTest, test50PercentMonotonic) {
    function TEST (line 348) | TEST(CompressionTest, testVarSEqLength) {
    function TEST (line 361) | TEST(CompressionTest, testConstantSequenceDiffLength) {
    function TEST (line 373) | TEST(CompressionTest, testSimpleAPI) {
    function TEST (line 400) | TEST(CompressionTest, testSignChangeAltering) {
    function TEST (line 413) | TEST(CompressionTest, testSequencesDecimal) {
    function TEST (line 428) | TEST(CompressionTest, testVersionByte) {

FILE: helpers.hpp
  type middleout (line 19) | namespace middleout {
    function floor8 (line 32) | inline int floor8(int x) {
    function ceil8 (line 39) | inline int ceil8(int x) {
    function clearTopBits (line 43) | inline uint64_t clearTopBits(uint64_t data, uint64_t bitsCount) {
    function getBytesLengthOfOffsets (line 48) | inline int getBytesLengthOfOffsets(int offsetsCount) {
    function __m512i (line 56) | inline __m512i clearTopBits(__m512i toClear, uint64_t bitsCount) {
    function fillStart (line 66) | void fillStart(std::vector<T>& data, std::vector<char>& output, size_t...
    function doNotCompressTheData (line 74) | size_t doNotCompressTheData(std::vector<T>& data, std::vector<char>& o...
    function doNotDecompressTheData (line 83) | void doNotDecompressTheData(std::vector<char>& input, size_t inputElem...

FILE: middleout.cpp
  type middleout (line 24) | namespace middleout {
    function compressSimple (line 26) | std::unique_ptr<std::vector<char>> compressSimple(std::vector<int64_t>...
    function compressSimple (line 30) | std::unique_ptr<std::vector<char>> compressSimple(std::vector<double>&...
    function compress (line 34) | size_t compress(std::vector<int64_t>& data, std::vector<char>& output) {
    function compress (line 38) | size_t compress(std::vector<double>& data, std::vector<char>& output) {
    function decompress (line 42) | void decompress(std::vector<char>& input, size_t inputElements, std::v...
    function decompress (line 46) | void decompress(std::vector<char>& input, size_t inputElements, std::v...
    function maxCompressedSize (line 50) | size_t maxCompressedSize(size_t count) {

FILE: middleout.hpp
  type middleout (line 19) | namespace middleout {

FILE: scalar.cpp
  type middleout (line 17) | namespace middleout {
    class Scalar<double> (line 19) | class Scalar<double>
    class Scalar<int64_t> (line 20) | class Scalar<int64_t>
    class Scalar<uint64_t> (line 21) | class Scalar<uint64_t>
    function decompressValue (line 164) | inline void decompressValue(const size_t j,
    function decompressBlock (line 232) | inline void decompressBlock(std::vector<char>& input,

FILE: scalar.hpp
  type middleout (line 18) | namespace middleout {
    class Scalar (line 22) | class Scalar {
      method maxCompressedSize (line 34) | static size_t maxCompressedSize(size_t count) {
Condensed preview — 23 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (566K chars).
[
  {
    "path": ".clang-format",
    "chars": 1836,
    "preview": "BasedOnStyle: Chromium\nAccessModifierOffset: -1\nAlignAfterOpenBracket: true\nAlignEscapedNewlinesLeft: true\nAlignOperands"
  },
  {
    "path": ".gitignore",
    "chars": 299,
    "preview": "\n# Prerequisites\n*.d\n\n# Compiled Object files\n*.slo\n*.lo\n*.o\n*.obj\n\n# Precompiled Headers\n*.gch\n*.pch\n\n# Compiled Dynami"
  },
  {
    "path": "LICENSE.md",
    "chars": 473,
    "preview": "           DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE\n                   Version 2, December 2004\n\nCopyright (C) 2004 S"
  },
  {
    "path": "Makefile",
    "chars": 2064,
    "preview": "CC = g++\n\n###\n#\tCOMPILE AND RUN TESTS\n###\nGOOGLE_TEST_LIB = gtest\nCC_TEST_FLAGS = -O2 -g -Wall -Wno-strict-aliasing -fsa"
  },
  {
    "path": "README.md",
    "chars": 5311,
    "preview": "# Middle-out Compression for Time-series Data\n\nWe all know, how the Middle-out compression works at the HBO show [1], bu"
  },
  {
    "path": "ansible-playbook.yaml",
    "chars": 667,
    "preview": "---\n- hosts: middleout\n  become: yes\n  become_user: root\n  tasks:\n    - name: install required sw\n      apt: name={{item"
  },
  {
    "path": "avx512.cpp",
    "chars": 11542,
    "preview": "/*\n\nCopyright (c) 2017, Schizofreny s.r.o - info@schizofreny.com\nAll rights reserved.\n\nSee LICENSE.md file\n\n*/\n\n#include"
  },
  {
    "path": "avx512.hpp",
    "chars": 1052,
    "preview": "/*\n\nCopyright (c) 2017, Schizofreny s.r.o - info@schizofreny.com\nAll rights reserved.\n\nSee LICENSE.md file\n\n*/\n\n#include"
  },
  {
    "path": "data/README.md",
    "chars": 135,
    "preview": "File ibm.data contains minute stock data. Rest of files were generated by the https://github.com/influxdata/influxdb-com"
  },
  {
    "path": "data/redis_memory.data",
    "chars": 95040,
    "preview": "8589934592\n8589934592\n8589934592\n8589934592\n8589934644\n8589934640\n8589934642\n8589934643\n8589934693\n8589934691\n8589934692"
  },
  {
    "path": "data/usages.data",
    "chars": 42867,
    "preview": "2.6224297271376256\n2.3404828688740125\n2.5107414655010292\n1.7600378709022286\n0.3675759079717178\n2.4649354384441082\n2.3126"
  },
  {
    "path": "data/used.data",
    "chars": 258912,
    "preview": "549755813888\n50\n134217728\n1340687348\n15.6076549143957415\n8589934592\n8589934592\n8589934592\n8589934592\n0\n0\n0\n0\n54975581383"
  },
  {
    "path": "data/writes.data",
    "chars": 48209,
    "preview": "0\n0\n0\n0\n52\n100\n6\n2\n102\n200\n12\n7\n152\n299\n16\n11\n203\n399\n23\n18\n252\n499\n29\n23\n303\n599\n34\n27\n354\n700\n40\n33\n405\n800\n45\n37\n455\n"
  },
  {
    "path": "example/Makefile",
    "chars": 358,
    "preview": "CPP = g++\nCPP_ARGS = -O3 -march=native -o demo\nTARGET = example.cpp\n\nHAVE_AVX512 = $(shell grep avx512 /proc/cpuinfo)\n\n\n"
  },
  {
    "path": "example/example.cpp",
    "chars": 6771,
    "preview": "/*\n\nCopyright (c) 2017, Schizofreny s.r.o - info@schizofreny.com\nAll rights reserved.\n\nSee LICENSE.md file\n\n*/\n\n#include"
  },
  {
    "path": "gbench/perf.cpp",
    "chars": 9216,
    "preview": "/*\n\nCopyright (c) 2017, Schizofreny s.r.o - info@schizofreny.com\nAll rights reserved.\n\nSee LICENSE.md file\n\n*/\n\n#include"
  },
  {
    "path": "gtest/test.cpp",
    "chars": 12085,
    "preview": "/*\n\nCopyright (c) 2017, Schizofreny s.r.o - info@schizofreny.com\nAll rights reserved.\n\nSee LICENSE.md file\n\n*/\n\n#include"
  },
  {
    "path": "helpers.hpp",
    "chars": 2004,
    "preview": "/*\n\nCopyright (c) 2017, Schizofreny s.r.o - info@schizofreny.com\nAll rights reserved.\n\nSee LICENSE.md file\n\n*/\n\n#include"
  },
  {
    "path": "middleout.cpp",
    "chars": 1335,
    "preview": "/*\n\nCopyright (c) 2017, Schizofreny s.r.o - info@schizofreny.com\nAll rights reserved.\n\nSee LICENSE.md file\n\n*/\n\n#include"
  },
  {
    "path": "middleout.hpp",
    "chars": 855,
    "preview": "/*\n\nCopyright (c) 2017, Schizofreny s.r.o - info@schizofreny.com\nAll rights reserved.\n\nSee LICENSE.md file\n\n*/\n\n#include"
  },
  {
    "path": "scalar.cpp",
    "chars": 11549,
    "preview": "/*\n\nCopyright (c) 2017, Schizofreny s.r.o - info@schizofreny.com\nAll rights reserved.\n\nSee LICENSE.md file\n\n*/\n\n#include"
  },
  {
    "path": "scalar.hpp",
    "chars": 1061,
    "preview": "/*\n\nCopyright (c) 2017, Schizofreny s.r.o - info@schizofreny.com\nAll rights reserved.\n\nSee LICENSE.md file\n\n*/\n\n#include"
  }
]

// ... and 1 more files (download for full content)

About this extraction

This page contains the full source code of the schizofreny/middle-out GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 23 files (10.9 MB), approximately 230.1k tokens, and a symbol index with 77 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!