PNG  IHDR  8] PLTE S =tRNS   PNG  IHDR  8] PLTE S =tRNS   REDROOM
PHP 7.4.33
Preview: heapsampling.go Size: 9.67 KB
/proc/thread-self/root/opt/golang/1.22.0/test/heapsampling.go

// run

// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Test heap sampling logic.

package main

import (
	"fmt"
	"math"
	"runtime"
)

var a16 *[16]byte
var a512 *[512]byte
var a256 *[256]byte
var a1k *[1024]byte
var a16k *[16 * 1024]byte
var a17k *[17 * 1024]byte
var a18k *[18 * 1024]byte

// This test checks that heap sampling produces reasonable results.
// Note that heap sampling uses randomization, so the results vary for
// run to run. To avoid flakes, this test performs multiple
// experiments and only complains if all of them consistently fail.
func main() {
	// Sample at 16K instead of default 512K to exercise sampling more heavily.
	runtime.MemProfileRate = 16 * 1024

	if err := testInterleavedAllocations(); err != nil {
		panic(err.Error())
	}
	if err := testSmallAllocations(); err != nil {
		panic(err.Error())
	}
}

// Repeatedly exercise a set of allocations and check that the heap
// profile collected by the runtime unsamples to a reasonable
// value. Because sampling is based on randomization, there can be
// significant variability on the unsampled data. To account for that,
// the testcase allows for a 10% margin of error, but only fails if it
// consistently fails across three experiments, avoiding flakes.
func testInterleavedAllocations() error {
	const iters = 50000
	// Sizes of the allocations performed by each experiment.
	frames := []string{"main.allocInterleaved1", "main.allocInterleaved2", "main.allocInterleaved3"}

	// Pass if at least one of three experiments has no errors. Use a separate
	// function for each experiment to identify each experiment in the profile.
	allocInterleaved1(iters)
	if checkAllocations(getMemProfileRecords(), frames[0:1], iters, allocInterleavedSizes) == nil {
		// Passed on first try, report no error.
		return nil
	}
	allocInterleaved2(iters)
	if checkAllocations(getMemProfileRecords(), frames[0:2], iters, allocInterleavedSizes) == nil {
		// Passed on second try, report no error.
		return nil
	}
	allocInterleaved3(iters)
	// If it fails a third time, we may be onto something.
	return checkAllocations(getMemProfileRecords(), frames[0:3], iters, allocInterleavedSizes)
}

var allocInterleavedSizes = []int64{17 * 1024, 1024, 18 * 1024, 512, 16 * 1024, 256}

// allocInterleaved stress-tests the heap sampling logic by interleaving large and small allocations.
func allocInterleaved(n int) {
	for i := 0; i < n; i++ {
		// Test verification depends on these lines being contiguous.
		a17k = new([17 * 1024]byte)
		a1k = new([1024]byte)
		a18k = new([18 * 1024]byte)
		a512 = new([512]byte)
		a16k = new([16 * 1024]byte)
		a256 = new([256]byte)
		// Test verification depends on these lines being contiguous.

		// Slow down the allocation rate to avoid #52433.
		runtime.Gosched()
	}
}

func allocInterleaved1(n int) {
	allocInterleaved(n)
}

func allocInterleaved2(n int) {
	allocInterleaved(n)
}

func allocInterleaved3(n int) {
	allocInterleaved(n)
}

// Repeatedly exercise a set of allocations and check that the heap
// profile collected by the runtime unsamples to a reasonable
// value. Because sampling is based on randomization, there can be
// significant variability on the unsampled data. To account for that,
// the testcase allows for a 10% margin of error, but only fails if it
// consistently fails across three experiments, avoiding flakes.
func testSmallAllocations() error {
	const iters = 50000
	// Sizes of the allocations performed by each experiment.
	sizes := []int64{1024, 512, 256}
	frames := []string{"main.allocSmall1", "main.allocSmall2", "main.allocSmall3"}

	// Pass if at least one of three experiments has no errors. Use a separate
	// function for each experiment to identify each experiment in the profile.
	allocSmall1(iters)
	if checkAllocations(getMemProfileRecords(), frames[0:1], iters, sizes) == nil {
		// Passed on first try, report no error.
		return nil
	}
	allocSmall2(iters)
	if checkAllocations(getMemProfileRecords(), frames[0:2], iters, sizes) == nil {
		// Passed on second try, report no error.
		return nil
	}
	allocSmall3(iters)
	// If it fails a third time, we may be onto something.
	return checkAllocations(getMemProfileRecords(), frames[0:3], iters, sizes)
}

// allocSmall performs only small allocations for sanity testing.
func allocSmall(n int) {
	for i := 0; i < n; i++ {
		// Test verification depends on these lines being contiguous.
		a1k = new([1024]byte)
		a512 = new([512]byte)
		a256 = new([256]byte)

		// Slow down the allocation rate to avoid #52433.
		runtime.Gosched()
	}
}

// Three separate instances of testing to avoid flakes. Will report an error
// only if they all consistently report failures.
func allocSmall1(n int) {
	allocSmall(n)
}

func allocSmall2(n int) {
	allocSmall(n)
}

func allocSmall3(n int) {
	allocSmall(n)
}

// checkAllocations validates that the profile records collected for
// the named function are consistent with count contiguous allocations
// of the specified sizes.
// Check multiple functions and only report consistent failures across
// multiple tests.
// Look only at samples that include the named frames, and group the
// allocations by their line number. All these allocations are done from
// the same leaf function, so their line numbers are the same.
func checkAllocations(records []runtime.MemProfileRecord, frames []string, count int64, size []int64) error {
	objectsPerLine := map[int][]int64{}
	bytesPerLine := map[int][]int64{}
	totalCount := []int64{}
	// Compute the line number of the first allocation. All the
	// allocations are from the same leaf, so pick the first one.
	var firstLine int
	for ln := range allocObjects(records, frames[0]) {
		if firstLine == 0 || firstLine > ln {
			firstLine = ln
		}
	}
	for _, frame := range frames {
		var objectCount int64
		a := allocObjects(records, frame)
		for s := range size {
			// Allocations of size size[s] should be on line firstLine + s.
			ln := firstLine + s
			objectsPerLine[ln] = append(objectsPerLine[ln], a[ln].objects)
			bytesPerLine[ln] = append(bytesPerLine[ln], a[ln].bytes)
			objectCount += a[ln].objects
		}
		totalCount = append(totalCount, objectCount)
	}
	for i, w := range size {
		ln := firstLine + i
		if err := checkValue(frames[0], ln, "objects", count, objectsPerLine[ln]); err != nil {
			return err
		}
		if err := checkValue(frames[0], ln, "bytes", count*w, bytesPerLine[ln]); err != nil {
			return err
		}
	}
	return checkValue(frames[0], 0, "total", count*int64(len(size)), totalCount)
}

// checkValue checks an unsampled value against its expected value.
// Given that this is a sampled value, it will be unexact and will change
// from run to run. Only report it as a failure if all the values land
// consistently far from the expected value.
func checkValue(fname string, ln int, testName string, want int64, got []int64) error {
	if got == nil {
		return fmt.Errorf("Unexpected empty result")
	}
	min, max := got[0], got[0]
	for _, g := range got[1:] {
		if g < min {
			min = g
		}
		if g > max {
			max = g
		}
	}
	margin := want / 10 // 10% margin.
	if min > want+margin || max < want-margin {
		return fmt.Errorf("%s:%d want %s in [%d: %d], got %v", fname, ln, testName, want-margin, want+margin, got)
	}
	return nil
}

func getMemProfileRecords() []runtime.MemProfileRecord {
	// Force the runtime to update the object and byte counts.
	// This can take up to two GC cycles to get a complete
	// snapshot of the current point in time.
	runtime.GC()
	runtime.GC()

	// Find out how many records there are (MemProfile(nil, true)),
	// allocate that many records, and get the data.
	// There's a race—more records might be added between
	// the two calls—so allocate a few extra records for safety
	// and also try again if we're very unlucky.
	// The loop should only execute one iteration in the common case.
	var p []runtime.MemProfileRecord
	n, ok := runtime.MemProfile(nil, true)
	for {
		// Allocate room for a slightly bigger profile,
		// in case a few more entries have been added
		// since the call to MemProfile.
		p = make([]runtime.MemProfileRecord, n+50)
		n, ok = runtime.MemProfile(p, true)
		if ok {
			p = p[0:n]
			break
		}
		// Profile grew; try again.
	}
	return p
}

type allocStat struct {
	bytes, objects int64
}

// allocObjects examines the profile records for samples including the
// named function and returns the allocation stats aggregated by
// source line number of the allocation (at the leaf frame).
func allocObjects(records []runtime.MemProfileRecord, function string) map[int]allocStat {
	a := make(map[int]allocStat)
	for _, r := range records {
		var pcs []uintptr
		for _, s := range r.Stack0 {
			if s == 0 {
				break
			}
			pcs = append(pcs, s)
		}
		frames := runtime.CallersFrames(pcs)
		line := 0
		for {
			frame, more := frames.Next()
			name := frame.Function
			if line == 0 {
				line = frame.Line
			}
			if name == function {
				allocStat := a[line]
				allocStat.bytes += r.AllocBytes
				allocStat.objects += r.AllocObjects
				a[line] = allocStat
			}
			if !more {
				break
			}
		}
	}
	for line, stats := range a {
		objects, bytes := scaleHeapSample(stats.objects, stats.bytes, int64(runtime.MemProfileRate))
		a[line] = allocStat{bytes, objects}
	}
	return a
}

// scaleHeapSample unsamples heap allocations.
// Taken from src/cmd/pprof/internal/profile/legacy_profile.go
func scaleHeapSample(count, size, rate int64) (int64, int64) {
	if count == 0 || size == 0 {
		return 0, 0
	}

	if rate <= 1 {
		// if rate==1 all samples were collected so no adjustment is needed.
		// if rate<1 treat as unknown and skip scaling.
		return count, size
	}

	avgSize := float64(size) / float64(count)
	scale := 1 / (1 - math.Exp(-avgSize/float64(rate)))

	return int64(float64(count) * scale), int64(float64(size) * scale)
}

Directory Contents

Dirs: 24 × Files: 338

Name Size Perms Modified Actions
abi DIR
- drwxr-xr-x 2024-02-02 18:09:55
Edit Download
- drwxr-xr-x 2024-02-02 18:09:55
Edit Download
arenas DIR
- drwxr-xr-x 2024-02-02 18:09:55
Edit Download
- drwxr-xr-x 2024-02-02 18:09:55
Edit Download
chan DIR
- drwxr-xr-x 2024-02-02 18:09:55
Edit Download
- drwxr-xr-x 2024-02-02 18:09:55
Edit Download
- drwxr-xr-x 2024-02-02 18:09:55
Edit Download
codegen DIR
- drwxr-xr-x 2024-02-02 18:09:55
Edit Download
ddd2.dir DIR
- drwxr-xr-x 2024-02-02 18:09:55
Edit Download
dwarf DIR
- drwxr-xr-x 2024-02-02 18:09:55
Edit Download
fixedbugs DIR
- drwxr-xr-x 2024-02-02 18:09:55
Edit Download
- drwxr-xr-x 2024-02-02 18:09:55
Edit Download
- drwxr-xr-x 2024-02-02 18:09:55
Edit Download
interface DIR
- drwxr-xr-x 2024-02-02 18:09:55
Edit Download
- drwxr-xr-x 2024-02-02 18:09:55
Edit Download
ken DIR
- drwxr-xr-x 2024-02-02 18:09:55
Edit Download
- drwxr-xr-x 2024-02-02 18:09:55
Edit Download
- drwxr-xr-x 2024-02-02 18:09:55
Edit Download
- drwxr-xr-x 2024-02-02 18:09:55
Edit Download
runtime DIR
- drwxr-xr-x 2024-02-02 18:09:55
Edit Download
stress DIR
- drwxr-xr-x 2024-02-02 18:09:55
Edit Download
syntax DIR
- drwxr-xr-x 2024-02-02 18:09:55
Edit Download
typeparam DIR
- drwxr-xr-x 2024-02-02 18:09:55
Edit Download
- drwxr-xr-x 2024-02-02 18:09:55
Edit Download
24.83 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.56 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
822 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
588 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
803 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.50 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
187 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
603 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
9.09 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
856 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
374 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
3.85 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
237 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.01 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
5.55 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
798 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.12 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.46 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.10 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
724 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
406 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
480 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
6.09 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.04 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.57 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.12 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
657 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
822 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
3.70 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
743 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.15 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
5.79 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.69 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
280 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.87 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
358 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
364 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
280 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
346 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
373 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
7.63 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.16 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.39 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.05 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
868 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
240.68 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.71 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.63 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
403 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
4.78 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
3.79 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1008 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
659 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.28 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
835 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
834 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.93 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
727 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
833 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
3.41 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
5.87 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
544 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.09 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
4.72 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.39 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
458 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
3.33 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
6.60 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
851 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
782 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
4.23 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.70 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
252 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
926 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.43 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
875 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.40 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.05 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
563 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
586 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
126 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
574 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.06 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.16 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.22 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
9.28 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
308 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
292 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
316 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
549 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
308 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
333 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
3.80 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
35.11 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
35.14 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
524 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.40 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
5.31 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
3.64 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.63 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
4.65 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.92 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
677 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
368 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
4.53 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
3.31 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.79 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.76 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.79 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
8.90 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
13.05 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
874 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
538 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
3.89 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
8.90 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
8.94 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.04 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
943 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.17 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
6.28 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.10 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
3.03 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
3.95 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
7.88 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.72 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.20 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.29 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
445 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
578 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
505 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
409 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.49 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
393 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
477 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
599 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.31 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
721 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
5.33 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
411 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
303 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
977 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
34.54 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
872 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
722 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
65 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
8.39 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
9.67 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
269 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
13 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.36 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
425 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
703 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
247 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
310 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
722 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.44 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
6.42 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
301 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
305 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
305 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.39 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.53 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
479 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.08 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.22 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.74 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.16 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.15 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
407 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
11.69 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
12.69 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.36 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.87 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.63 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.02 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
571 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.62 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
513 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
4.26 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
270 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
839 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
387 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.59 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.02 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.08 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
237 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.28 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
456 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
597 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
3.55 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
741 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.67 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
4.99 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.22 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
18.03 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.29 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
953 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
18.36 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.02 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
13.81 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
598 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.04 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.30 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
605 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
5.49 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.18 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
14.91 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.47 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.49 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
3.62 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.05 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
3.16 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
5.24 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
739 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.21 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
570 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
230 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
6.73 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
467 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.15 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
4.61 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
984 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
11.16 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.23 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
3.67 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
3.15 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
3.60 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
5.65 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
428 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
844 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
806 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
813 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
3.09 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
6.79 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
11.28 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.31 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.23 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.08 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
424 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.22 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.03 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.56 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
247 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
315 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
41 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
21.08 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
604 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
225 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
8.14 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
830 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.27 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
5.11 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
8.35 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
731 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
10.64 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.50 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.22 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.64 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.20 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
408 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
578 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
719 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
651 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
573 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
544 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
555 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
421 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
479 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.52 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.14 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.28 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
7.22 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
252 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
32.69 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
3.27 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
286 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
286 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
286 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
286 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
603 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
600 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
9.43 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.31 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
834 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.00 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
381 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
17 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.12 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.95 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.92 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
5.19 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.85 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
735 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.90 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.69 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
975 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.55 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.42 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
674 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.02 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.45 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
3.58 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
565 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
6.53 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
775 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.24 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
526 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.25 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.13 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
796 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
513 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.57 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
7.69 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
893 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
543 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
528 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.83 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.60 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
655 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
598 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
999 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
250 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.16 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.28 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
297 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
758 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.33 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
481 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
367 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
479 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
5.96 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.19 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
449 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
509 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.97 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
5.88 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
5.71 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
814 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).
 !"#$%&'(()*+,-./00123456789 t\ wIDATx ]ys  47Y ƒ -  "  Rv  < f{Ɛ $k l L > L  ~h^ 1  [  r G t& h  l F z3O Y ! p A(_g̷ E8 )S 8 c  Kb"z ~ 5 J xAL WU <  *  5 m;W a pB h ~P J 2 3 6 ҙ .Ƹ P i  4g F R L P ΪK/D  M v (a3 k J Œ4N5* SH ` SdJ z  O J Xՠ V>u ߱ BE&L b2 ?2` tX+  c CB A$ i b C ĀMB E : /  # Dx &l =q Ty  0 \p I ( L Ǎ { e 4k ;`u^ヲ eP!( d {  )T A 8 O;Ě n >;s6 !  :Nx `[S D HU ~ q›J F} a g*D 49 / pn k h (t 8NxƐF _!r չ7 ZR R׷ q/5") Ӎ NY 0 x sZ!   o  fu  ,  K"$ ? pg  㕣=  1» {h " fh7    y  } € +7  $ y " X —ą - G P u 4 m >J 5 L =V ' ^@I p ?MS xЌ XV P ! h "C NS9B8̢ ]!K  e   zA , ӏkbY  !< XQ ٿyS| *" f { w  4@[S <  # 0 ! js [m  =,~ o "ݎ DHf Wo $ g ! Vԅ t mB /y Wf V4񺍸 c+@x?  B ~u " xUN e 0 BĂ) ~J pz! 7y6]l Ԥ@ P a< O /DHC `≻  N m"$  0ObB }{ x AO FCG D R ^ "B  { WDH  UR l@ T #  +"d T ; 0 i  D}. 7 ` ' ] w rE &S i ƕiTD EL P _ u h $ Ա FG wVD G L R Zf ' .!] J /ZR oGЍs Mr Ĥ ʬ 3 Q [3 cL ` ^ p + ( F;# B 5 '  2Y f [  ϶R0e }  E 7 6M aۮ H <& n % L] E}Up x紉, Uw' Q  Ǯշo k ވۙ 0N94 VX5 xEDE l D #֤ } C o )W :  ^ s 9  bRf iX5u ཱི 4 :[  T 1. | [E 2ؽ Iy\ : o x K G 5 ylP ' uK E ftb/i[3 .g _  [3M n G, #NwQ5~  ؚ) | n =Ц"x qg gB ` 듘 ~ x w ? ? R~  _ u. &VQ K˻   H C ( TN˄+ `C dA nB׭ D 3"Z G ê ^k H_ /- ~ " R_  .8 Z_ 6@ o  xg  uP ? 3լ @7AM!  E7^ - =V L  x  g-D0  CtmW 7  O  G _ WD0 g C  w1 r d w : a | \  *" f nֳ ^ H# f L ` Z ۽hV  }S F r0Ù Bć5r] @! NL iQ]{s^=4 d  WD  "  "   M; t" 8 5 e dL| "-*st" ) SWD ?R[S e ooF  20.D ? bo =) A i o d ģ ZҰaO @E =) i D a &ܟa CϞ y6 ,<%{^x%{f8? `iw^ ?/ M * IEND B`