pax_global_header00006660000000000000000000000064140226767610014525gustar00rootroot0000000000000052 comment=936343600d578fb5da472acf6987ed76935a389b rsrc-0.10.2/000077500000000000000000000000001402267676100125565ustar00rootroot00000000000000rsrc-0.10.2/.hgignore000066400000000000000000000000441402267676100143570ustar00rootroot00000000000000glob:*.res glob:*.exe glob:tmp rsrc-0.10.2/.travis.yml000066400000000000000000000010421402267676100146640ustar00rootroot00000000000000language: go jobs: allow_failures: - go: master include: - name: -- Default linux build go: 1.x os: linux arch: amd64 - name: -- Default windows build go: 1.x os: windows arch: amd64 - name: -- Go devel - check future version breakage go: master os: linux arch: amd64 - name: -- Ubuntu/IBM (?) cares for ppc64le? see https://github.com/akavel/rsrc/pull/31 go: 1.x os: linux arch: ppc64le before_install: - |- case $TRAVIS_OS_NAME in windows) choco install upx ;; esac rsrc-0.10.2/AUTHORS000066400000000000000000000002311402267676100136220ustar00rootroot00000000000000Force Charlie Mateusz Czapliński Quentin Renard shnmng Thomas Combeléran rsrc-0.10.2/LICENSE.txt000066400000000000000000000021261402267676100144020ustar00rootroot00000000000000The MIT License (MIT) Copyright (c) 2013-2017 The rsrc Authors. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. rsrc-0.10.2/README.txt000066400000000000000000000033231402267676100142550ustar00rootroot00000000000000rsrc - Tool for embedding binary resources in Go programs. INSTALL: go get github.com/akavel/rsrc USAGE: rsrc.exe [-manifest FILE.exe.manifest] [-ico FILE.ico[,FILE2.ico...]] [OPTIONS...] Generates a .syso file with specified resources embedded in .rsrc section, aimed for consumption by Go linker when building Win32 excecutables. The generated *.syso files should get automatically recognized by 'go build' command and linked into an executable/library, as long as there are any *.go files in the same directory. OPTIONS: -arch string architecture of output file - one of: 386, amd64, [EXPERIMENTAL: arm, arm64] (default "amd64") -ico string comma-separated list of paths to .ico files to embed -manifest string path to a Windows manifest file to embed -o string name of output COFF (.res or .syso) file; if set to empty, will default to 'rsrc_windows_{arch}.syso' Based on ideas presented by Minux. In case anything does not work, it'd be nice if you could report (either via Github issues, or via email to czapkofan@gmail.com), and please attach the input file(s) which resulted in a problem, plus error message & symptoms, and/or any other details. TODO MAYBE/LATER: - fix or remove FIXMEs LICENSE: MIT Copyright 2013-2020 The rsrc Authors. http://github.com/akavel/rsrc (NOTE: This project is currently in low-priority maintenance mode. I welcome bug reports and sometimes try to address them, but this happens very randomly. If it works for you, that's great and I'm happy! Still, and especially if not, you might like to check the following more featureful alternative from @tc-hib who is a very nice guy: https://github.com/tc-hib/go-winres) rsrc-0.10.2/binutil/000077500000000000000000000000001402267676100142245ustar00rootroot00000000000000rsrc-0.10.2/binutil/plain.go000066400000000000000000000006001402267676100156520ustar00rootroot00000000000000package binutil import ( "reflect" ) func Plain(kind reflect.Kind) bool { switch kind { case reflect.Bool, reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr, reflect.Float32, reflect.Float64, reflect.Complex64, reflect.Complex128: return true } return false } rsrc-0.10.2/binutil/sizedfile.go000066400000000000000000000012441402267676100165320ustar00rootroot00000000000000package binutil import ( "io" "os" ) type SizedReader interface { io.Reader Size() int64 } type SizedFile struct { f *os.File s *io.SectionReader // helper, for Size() } func (r *SizedFile) Read(p []byte) (n int, err error) { return r.s.Read(p) } func (r *SizedFile) Size() int64 { return r.s.Size() } func (r *SizedFile) Close() error { return r.f.Close() } func SizedOpen(filename string) (*SizedFile, error) { f, err := os.Open(filename) if err != nil { return nil, err } info, err := f.Stat() if err != nil { return nil, err } return &SizedFile{ f: f, s: io.NewSectionReader(f, 0, info.Size()), }, nil } rsrc-0.10.2/binutil/walk.go000066400000000000000000000022511402267676100155110ustar00rootroot00000000000000package binutil import ( "errors" "fmt" "path" "reflect" ) var ( WALK_SKIP = errors.New("") ) type Walker func(v reflect.Value, path string) error func Walk(value interface{}, walker Walker) error { err := walk(reflect.ValueOf(value), "/", walker) if err == WALK_SKIP { err = nil } return err } func stopping(err error) bool { return err != nil && err != WALK_SKIP } func walk(v reflect.Value, spath string, walker Walker) error { err := walker(v, spath) if err != nil { return err } v = reflect.Indirect(v) switch v.Kind() { case reflect.Slice, reflect.Array: for i := 0; i < v.Len(); i++ { err = walk(v.Index(i), spath+fmt.Sprintf("[%d]", i), walker) if stopping(err) { return err } } case reflect.Interface: err = walk(v.Elem(), spath, walker) if stopping(err) { return err } case reflect.Struct: //t := v.Type() for i := 0; i < v.NumField(); i++ { //f := t.Field(i) //TODO: handle unexported fields vv := v.Field(i) err = walk(vv, path.Join(spath, v.Type().Field(i).Name), walker) if stopping(err) { return err } } default: // FIXME: handle other special cases too // String return nil } return nil } rsrc-0.10.2/binutil/writer.go000066400000000000000000000010011402267676100160570ustar00rootroot00000000000000package binutil import ( "encoding/binary" "io" "reflect" ) type Writer struct { W io.Writer Offset uint32 //FIXME: int64? Err error } func (w *Writer) WriteLE(v interface{}) { if w.Err != nil { return } w.Err = binary.Write(w.W, binary.LittleEndian, v) if w.Err != nil { return } w.Offset += uint32(reflect.TypeOf(v).Size()) } func (w *Writer) WriteFromSized(r SizedReader) { if w.Err != nil { return } var n int64 n, w.Err = io.CopyN(w.W, r, r.Size()) w.Offset += uint32(n) } rsrc-0.10.2/buildcross.bat000066400000000000000000000012541402267676100154210ustar00rootroot00000000000000@echo off rem NOTE: see also: rem https://github.com/golang/go/wiki/WindowsCrossCompiling rem https://github.com/golang/go/wiki/InstallFromSource#install-c-tools call :build rsrc windows_386 call :build rsrc windows_amd64 call :build rsrc linux_amd64 call :build rsrc darwin_amd64 set GOOS= set GOARCH= goto :eof :build set APP=%1 set PLATFORM=%2 :: Split param into GOOS & GOARCH (see: http://ss64.com/nt/syntax-substring.html) set GOARCH=%PLATFORM:*_=% call set GOOS=%%PLATFORM:_%GOARCH%=%% :: Build filename set FNAME=%APP%_%PLATFORM% if "%GOOS%"=="windows" set FNAME=%FNAME%.exe :: Do the build echo == %FNAME% == go build -i -v -o %FNAME% . goto :eof rsrc-0.10.2/coff/000077500000000000000000000000001402267676100134735ustar00rootroot00000000000000rsrc-0.10.2/coff/coff.go000066400000000000000000000233501402267676100147420ustar00rootroot00000000000000package coff import ( "debug/pe" "encoding/binary" "errors" "io" "reflect" "regexp" "sort" "strconv" "strings" "github.com/akavel/rsrc/binutil" ) type Dir struct { // struct IMAGE_RESOURCE_DIRECTORY Characteristics uint32 TimeDateStamp uint32 MajorVersion uint16 MinorVersion uint16 NumberOfNamedEntries uint16 NumberOfIdEntries uint16 DirEntries Dirs } type DirEntries []DirEntry type Dirs []Dir type DirEntry struct { // struct IMAGE_RESOURCE_DIRECTORY_ENTRY NameOrId uint32 OffsetToData uint32 } type DataEntry struct { // struct IMAGE_RESOURCE_DATA_ENTRY OffsetToData uint32 Size1 uint32 CodePage uint32 //FIXME: what value here? for now just using 0 Reserved uint32 } type RelocationEntry struct { RVA uint32 // "offset within the Section's raw data where the address starts." SymbolIndex uint32 // "(zero based) index in the Symbol table to which the reference refers." Type uint16 } // Values reverse-engineered from windres output; names from teh Internets. // Teh googlies Internets don't seem to have much to say about the AMD64 one, // unfortunately :/ but it works... const ( _IMAGE_REL_AMD64_ADDR32NB = 0x03 _IMAGE_REL_I386_DIR32NB = 0x07 _IMAGE_REL_ARM64_ADDR32NB = 0x02 _IMAGE_REL_ARM_ADDR32NB = 0x02 ) type Auxiliary [18]byte type Symbol struct { Name [8]byte Value uint32 SectionNumber uint16 Type uint16 StorageClass uint8 AuxiliaryCount uint8 Auxiliaries []Auxiliary } type StringsHeader struct { Length uint32 } const ( MASK_SUBDIRECTORY = 1 << 31 RT_ICON = 3 RT_GROUP_ICON = 3 + 11 RT_MANIFEST = 24 ) // http://www.delorie.com/djgpp/doc/coff/symtab.html const ( DT_PTR = 1 T_UCHAR = 12 ) var ( STRING_RSRC = [8]byte{'.', 'r', 's', 'r', 'c', 0, 0, 0} LANG_ENTRY = DirEntry{NameOrId: 0x0409} //FIXME: language; what value should be here? ) type PaddedData struct { Data Sizer Padding []byte } type Sizer interface { Size() int64 //NOTE: must not exceed limits of uint32, or behavior is undefined } type Coff struct { pe.FileHeader pe.SectionHeader32 *Dir DataEntries []DataEntry Data []PaddedData Relocations []RelocationEntry Symbols []Symbol StringsHeader Strings []Sizer } // NOTE: must be called immediately after NewRSRC, before any other // functions. func (coff *Coff) Arch(arch string) error { switch arch { case "386": coff.Machine = pe.IMAGE_FILE_MACHINE_I386 case "amd64": // Sources: // https://github.com/golang/go/blob/0e23ca41d99c82d301badf1b762888e2c69e6c57/src/debug/pe/pe.go#L116 // https://github.com/yasm/yasm/blob/7160679eee91323db98b0974596c7221eeff772c/modules/objfmts/coff/coff-objfmt.c#L38 // FIXME: currently experimental -- not sure if something more doesn't need to be changed coff.Machine = pe.IMAGE_FILE_MACHINE_AMD64 case "arm": // see // https://github.com/golang/go/blob/f3424ceff2fa48615ed98580f337ab044925c940/src/cmd/link/internal/ld/pe.go#L736 coff.Machine = pe.IMAGE_FILE_MACHINE_ARMNT case "arm64": // Waiting https://github.com/golang/go/issues/36439 coff.Machine = pe.IMAGE_FILE_MACHINE_ARM64 default: return errors.New("coff: unknown architecture: " + arch) } return nil } // addSymbol appends a symbol to Coff.Symbols and to Coff.Strings. //NOTE: symbol s must be probably >8 characters long //NOTE: symbol s should not contain embedded zeroes func (coff *Coff) addSymbol(s string) { coff.FileHeader.NumberOfSymbols++ buf := strings.NewReader(s + "\000") // ASCIIZ r := io.NewSectionReader(buf, 0, int64(len(s)+1)) coff.Strings = append(coff.Strings, r) coff.StringsHeader.Length += uint32(r.Size()) coff.Symbols = append(coff.Symbols, Symbol{ //Name: // will be filled in Freeze //Value: // as above SectionNumber: 1, Type: 0, // why 0??? // DT_PTR<<4 | T_UCHAR, // unsigned char* // (?) or use void* ? T_VOID=1 StorageClass: 2, // 2=C_EXT, or 5=C_EXTDEF ? AuxiliaryCount: 0, }) } func NewRSRC() *Coff { return &Coff{ pe.FileHeader{ Machine: pe.IMAGE_FILE_MACHINE_I386, NumberOfSections: 1, // .rsrc TimeDateStamp: 0, // was also 0 in sample data from MinGW's windres.exe NumberOfSymbols: 1, SizeOfOptionalHeader: 0, Characteristics: 0x0104, //FIXME: copied from windres.exe output, find out what should be here and why }, pe.SectionHeader32{ Name: STRING_RSRC, Characteristics: 0x40000040, // "INITIALIZED_DATA MEM_READ" ? }, // "directory hierarchy" of .rsrc section: top level goes resource type, then id/name, then language &Dir{}, []DataEntry{}, []PaddedData{}, []RelocationEntry{}, []Symbol{Symbol{ Name: STRING_RSRC, Value: 0, SectionNumber: 1, Type: 0, // FIXME: wtf? StorageClass: 3, // FIXME: is it ok? and uint8? and what does the value mean? AuxiliaryCount: 0, // FIXME: wtf? }}, StringsHeader{ Length: uint32(binary.Size(StringsHeader{})), // empty strings table -- but we must still show size of the table's header... }, []Sizer{}, } } //NOTE: function assumes that 'id' is increasing on each entry //NOTE: only usable for Coff created using NewRSRC func (coff *Coff) AddResource(kind uint32, id uint16, data Sizer) { re := RelocationEntry{ // "(zero based) index in the Symbol table to which the // reference refers. Once you have loaded the COFF file into // memory and know where each symbol is, you find the new // updated address for the given symbol and update the // reference accordingly." SymbolIndex: 0, } switch coff.Machine { case pe.IMAGE_FILE_MACHINE_I386: re.Type = _IMAGE_REL_I386_DIR32NB case pe.IMAGE_FILE_MACHINE_AMD64: re.Type = _IMAGE_REL_AMD64_ADDR32NB case pe.IMAGE_FILE_MACHINE_ARMNT: re.Type = _IMAGE_REL_ARM_ADDR32NB case pe.IMAGE_FILE_MACHINE_ARM64: re.Type = _IMAGE_REL_ARM64_ADDR32NB } coff.Relocations = append(coff.Relocations, re) coff.SectionHeader32.NumberOfRelocations++ // find top level entry, inserting new if necessary at correct sorted position entries0 := coff.Dir.DirEntries dirs0 := coff.Dir.Dirs i0 := sort.Search(len(entries0), func(i int) bool { return entries0[i].NameOrId >= kind }) if i0 >= len(entries0) || entries0[i0].NameOrId != kind { // inserting new entry & dir entries0 = append(entries0[:i0], append([]DirEntry{{NameOrId: kind}}, entries0[i0:]...)...) dirs0 = append(dirs0[:i0], append([]Dir{{}}, dirs0[i0:]...)...) coff.Dir.NumberOfIdEntries++ } coff.Dir.DirEntries = entries0 coff.Dir.Dirs = dirs0 // for second level, assume ID is always increasing, so we don't have to sort dirs0[i0].DirEntries = append(dirs0[i0].DirEntries, DirEntry{NameOrId: uint32(id)}) dirs0[i0].Dirs = append(dirs0[i0].Dirs, Dir{ NumberOfIdEntries: 1, DirEntries: DirEntries{LANG_ENTRY}, }) dirs0[i0].NumberOfIdEntries++ // calculate preceding DirEntry leaves, to find new index in Data & DataEntries n := 0 for _, dir0 := range dirs0[:i0+1] { n += len(dir0.DirEntries) //NOTE: assuming 1 language here; TODO: dwell deeper if more langs added } n-- // insert new data in correct place coff.DataEntries = append(coff.DataEntries[:n], append([]DataEntry{{Size1: uint32(data.Size())}}, coff.DataEntries[n:]...)...) coff.Data = append(coff.Data[:n], append([]PaddedData{pad(data)}, coff.Data[n:]...)...) } func pad(data Sizer) PaddedData { return PaddedData{ Data: data, Padding: make([]byte, -data.Size()&7), } } // Freeze fills in some important offsets in resulting file. func (coff *Coff) Freeze() { switch coff.SectionHeader32.Name { case STRING_RSRC: coff.freezeRSRC() } } func (coff *Coff) freezeCommon1(path string, offset, diroff uint32) (newdiroff uint32) { switch path { case "/Dir": coff.SectionHeader32.PointerToRawData = offset diroff = offset case "/Relocations": coff.SectionHeader32.PointerToRelocations = offset coff.SectionHeader32.SizeOfRawData = offset - diroff case "/Symbols": coff.FileHeader.PointerToSymbolTable = offset } return diroff } func freezeCommon2(v reflect.Value, offset *uint32) error { if binutil.Plain(v.Kind()) { *offset += uint32(binary.Size(v.Interface())) // TODO: change to v.Type().Size() ? return nil } vv, ok := v.Interface().(Sizer) if ok { *offset += uint32(vv.Size()) return binutil.WALK_SKIP } return nil } func (coff *Coff) freezeRSRC() { leafwalker := make(chan *DirEntry) go func() { for _, dir1 := range coff.Dir.Dirs { // resource type for _, dir2 := range dir1.Dirs { // resource ID for i := range dir2.DirEntries { // resource lang leafwalker <- &dir2.DirEntries[i] } } } }() var offset, diroff uint32 binutil.Walk(coff, func(v reflect.Value, path string) error { diroff = coff.freezeCommon1(path, offset, diroff) RE := regexp.MustCompile const N = `\[(\d+)\]` m := matcher{} switch { case m.Find(path, RE("^/Dir/Dirs"+N+"$")): coff.Dir.DirEntries[m[0]].OffsetToData = MASK_SUBDIRECTORY | (offset - diroff) case m.Find(path, RE("^/Dir/Dirs"+N+"/Dirs"+N+"$")): coff.Dir.Dirs[m[0]].DirEntries[m[1]].OffsetToData = MASK_SUBDIRECTORY | (offset - diroff) case m.Find(path, RE("^/DataEntries"+N+"$")): direntry := <-leafwalker direntry.OffsetToData = offset - diroff case m.Find(path, RE("^/DataEntries"+N+"/OffsetToData$")): coff.Relocations[m[0]].RVA = offset - diroff case m.Find(path, RE("^/Data"+N+"$")): coff.DataEntries[m[0]].OffsetToData = offset - diroff } return freezeCommon2(v, &offset) }) } func mustAtoi(s string) int { i, err := strconv.Atoi(s) if err != nil { panic(err) } return i } type matcher []int func (m *matcher) Find(s string, re *regexp.Regexp) bool { subs := re.FindStringSubmatch(s) if subs == nil { return false } *m = (*m)[:0] for i := 1; i < len(subs); i++ { *m = append(*m, mustAtoi(subs[i])) } return true } rsrc-0.10.2/go.mod000066400000000000000000000000471402267676100136650ustar00rootroot00000000000000module github.com/akavel/rsrc go 1.12 rsrc-0.10.2/ico/000077500000000000000000000000001402267676100133305ustar00rootroot00000000000000rsrc-0.10.2/ico/ico.go000066400000000000000000000117411402267676100144350ustar00rootroot00000000000000// Package ico describes Windows ICO file format. package ico // ICO: http://msdn.microsoft.com/en-us/library/ms997538.aspx // BMP/DIB: http://msdn.microsoft.com/en-us/library/windows/desktop/dd183562%28v=vs.85%29.aspx import ( "bytes" "encoding/binary" "fmt" "image" "image/color" "io" "io/ioutil" "sort" ) const ( BI_RGB = 0 ) type ICONDIR struct { Reserved uint16 // must be 0 Type uint16 // Resource Type (1 for icons) Count uint16 // How many images? } type IconDirEntryCommon struct { Width byte // Width, in pixels, of the image Height byte // Height, in pixels, of the image ColorCount byte // Number of colors in image (0 if >=8bpp) Reserved byte // Reserved (must be 0) Planes uint16 // Color Planes BitCount uint16 // Bits per pixel BytesInRes uint32 // How many bytes in this resource? } type ICONDIRENTRY struct { IconDirEntryCommon ImageOffset uint32 // Where in the file is this image? [from beginning of file] } type BITMAPINFOHEADER struct { Size uint32 Width int32 Height int32 // NOTE: "represents the combined height of the XOR and AND masks. Remember to divide this number by two before using it to perform calculations for either of the XOR or AND masks." Planes uint16 // [BMP/DIB]: "is always 1" BitCount uint16 Compression uint32 // for ico = 0 SizeImage uint32 XPelsPerMeter int32 // for ico = 0 YPelsPerMeter int32 // for ico = 0 ClrUsed uint32 // for ico = 0 ClrImportant uint32 // for ico = 0 } type RGBQUAD struct { Blue byte Green byte Red byte Reserved byte // must be 0 } func skip(r io.Reader, n int64) error { _, err := io.CopyN(ioutil.Discard, r, n) return err } type icoOffset struct { n int offset uint32 } type rawico struct { icoinfo ICONDIRENTRY bmpinfo *BITMAPINFOHEADER idx int data []byte } type byOffsets []rawico func (o byOffsets) Len() int { return len(o) } func (o byOffsets) Less(i, j int) bool { return o[i].icoinfo.ImageOffset < o[j].icoinfo.ImageOffset } func (o byOffsets) Swap(i, j int) { tmp := o[i] o[i] = o[j] o[j] = tmp } type ICO struct { image.Image } func DecodeHeaders(r io.Reader) ([]ICONDIRENTRY, error) { var hdr ICONDIR err := binary.Read(r, binary.LittleEndian, &hdr) if err != nil { return nil, err } if hdr.Reserved != 0 || hdr.Type != 1 { return nil, fmt.Errorf("bad magic number") } entries := make([]ICONDIRENTRY, hdr.Count) for i := 0; i < len(entries); i++ { err = binary.Read(r, binary.LittleEndian, &entries[i]) if err != nil { return nil, err } } return entries, nil } // NOTE: won't succeed on files with overlapping offsets func unused_decodeAll(r io.Reader) ([]*ICO, error) { var hdr ICONDIR err := binary.Read(r, binary.LittleEndian, &hdr) if err != nil { return nil, err } if hdr.Reserved != 0 || hdr.Type != 1 { return nil, fmt.Errorf("bad magic number") } raws := make([]rawico, hdr.Count) for i := 0; i < len(raws); i++ { err = binary.Read(r, binary.LittleEndian, &raws[i].icoinfo) if err != nil { return nil, err } raws[i].idx = i } sort.Sort(byOffsets(raws)) offset := uint32(binary.Size(&hdr) + len(raws)*binary.Size(ICONDIRENTRY{})) for i := 0; i < len(raws); i++ { err = skip(r, int64(raws[i].icoinfo.ImageOffset-offset)) if err != nil { return nil, err } offset = raws[i].icoinfo.ImageOffset raws[i].bmpinfo = &BITMAPINFOHEADER{} err = binary.Read(r, binary.LittleEndian, raws[i].bmpinfo) if err != nil { return nil, err } err = skip(r, int64(raws[i].bmpinfo.Size-uint32(binary.Size(BITMAPINFOHEADER{})))) if err != nil { return nil, err } raws[i].data = make([]byte, raws[i].icoinfo.BytesInRes-raws[i].bmpinfo.Size) _, err = io.ReadFull(r, raws[i].data) if err != nil { return nil, err } } icos := make([]*ICO, len(raws)) for i := 0; i < len(raws); i++ { fmt.Println(i) icos[raws[i].idx], err = decode(raws[i].bmpinfo, &raws[i].icoinfo, raws[i].data) if err != nil { return nil, err } } return icos, nil } func decode(info *BITMAPINFOHEADER, icoinfo *ICONDIRENTRY, data []byte) (*ICO, error) { if info.Compression != BI_RGB { return nil, fmt.Errorf("ICO compression not supported (got %d)", info.Compression) } //if info.ClrUsed!=0 { // panic(info.ClrUsed) //} r := bytes.NewBuffer(data) bottomup := info.Height > 0 if !bottomup { info.Height = -info.Height } switch info.BitCount { case 8: ncol := int(icoinfo.ColorCount) if ncol == 0 { ncol = 256 } pal := make(color.Palette, ncol) for i := 0; i < ncol; i++ { var rgb RGBQUAD err := binary.Read(r, binary.LittleEndian, &rgb) if err != nil { return nil, err } pal[i] = color.NRGBA{R: rgb.Red, G: rgb.Green, B: rgb.Blue, A: 0xff} //FIXME: is Alpha ok 0xff? } fmt.Println(pal) fmt.Println(info.SizeImage, len(data)-binary.Size(RGBQUAD{})*len(pal), info.Width, info.Height) default: return nil, fmt.Errorf("unsupported ICO bit depth (BitCount) %d", info.BitCount) } return nil, nil } rsrc-0.10.2/internal/000077500000000000000000000000001402267676100143725ustar00rootroot00000000000000rsrc-0.10.2/internal/write.go000066400000000000000000000014111402267676100160500ustar00rootroot00000000000000package internal import ( "fmt" "os" "reflect" "github.com/akavel/rsrc/binutil" "github.com/akavel/rsrc/coff" ) // TODO(akavel): maybe promote this to coff.Coff.WriteTo(io.Writer) (int64, error) func Write(coff *coff.Coff, fnameout string) error { out, err := os.Create(fnameout) if err != nil { return err } defer out.Close() w := binutil.Writer{W: out} // write the resulting file to disk binutil.Walk(coff, func(v reflect.Value, path string) error { if binutil.Plain(v.Kind()) { w.WriteLE(v.Interface()) return nil } vv, ok := v.Interface().(binutil.SizedReader) if ok { w.WriteFromSized(vv) return binutil.WALK_SKIP } return nil }) if w.Err != nil { return fmt.Errorf("Error writing output file: %s", w.Err) } return nil } rsrc-0.10.2/rsrc.go000066400000000000000000000031241402267676100140560ustar00rootroot00000000000000package main import ( "flag" "fmt" "os" "github.com/akavel/rsrc/rsrc" ) var usage = `USAGE: %s [-manifest FILE.exe.manifest] [-ico FILE.ico[,FILE2.ico...]] [OPTIONS...] Generates a .syso file with specified resources embedded in .rsrc section, aimed for consumption by Go linker when building Win32 excecutables. The generated *.syso files should get automatically recognized by 'go build' command and linked into an executable/library, as long as there are any *.go files in the same directory. OPTIONS: ` func main() { //TODO: allow in options advanced specification of multiple resources, as a tree (json?) //FIXME: verify that data file size doesn't exceed uint32 max value var fnamein, fnameico, fnameout, arch string flags := flag.NewFlagSet("", flag.ExitOnError) flags.StringVar(&fnamein, "manifest", "", "path to a Windows manifest file to embed") flags.StringVar(&fnameico, "ico", "", "comma-separated list of paths to .ico files to embed") flags.StringVar(&fnameout, "o", "", "name of output COFF (.res or .syso) file; if set to empty, will default to 'rsrc_windows_{arch}.syso'") flags.StringVar(&arch, "arch", "amd64", "architecture of output file - one of: 386, amd64, [EXPERIMENTAL: arm, arm64]") flags.Usage = func() { fmt.Fprintf(os.Stderr, usage, os.Args[0]) flags.PrintDefaults() } _ = flags.Parse(os.Args[1:]) if fnamein == "" && fnameico == "" { flags.Usage() os.Exit(1) } if fnameout == "" { fnameout = "rsrc_windows_" + arch + ".syso" } err := rsrc.Embed(fnameout, arch, fnamein, fnameico) if err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } } rsrc-0.10.2/rsrc/000077500000000000000000000000001402267676100135275ustar00rootroot00000000000000rsrc-0.10.2/rsrc/rsrc.go000066400000000000000000000044221402267676100150310ustar00rootroot00000000000000package rsrc import ( "encoding/binary" "fmt" "io" "os" "strings" "github.com/akavel/rsrc/binutil" "github.com/akavel/rsrc/coff" "github.com/akavel/rsrc/ico" "github.com/akavel/rsrc/internal" ) // on storing icons, see: http://blogs.msdn.com/b/oldnewthing/archive/2012/07/20/10331787.aspx type _GRPICONDIR struct { ico.ICONDIR Entries []_GRPICONDIRENTRY } func (group _GRPICONDIR) Size() int64 { return int64(binary.Size(group.ICONDIR) + len(group.Entries)*binary.Size(group.Entries[0])) } type _GRPICONDIRENTRY struct { ico.IconDirEntryCommon Id uint16 } func Embed(fnameout, arch, fnamein, fnameico string) error { lastid := uint16(0) newid := func() uint16 { lastid++ return lastid } out := coff.NewRSRC() err := out.Arch(arch) if err != nil { return err } if fnamein != "" { manifest, err := binutil.SizedOpen(fnamein) if err != nil { return fmt.Errorf("rsrc: error opening manifest file '%s': %s", fnamein, err) } defer manifest.Close() id := newid() out.AddResource(coff.RT_MANIFEST, id, manifest) // TODO(akavel): reintroduce the Printlns in package main after Embed returns // fmt.Println("Manifest ID: ", id) } if fnameico != "" { for _, fnameicosingle := range strings.Split(fnameico, ",") { f, err := addIcon(out, fnameicosingle, newid) if err != nil { return err } defer f.Close() } } out.Freeze() return internal.Write(out, fnameout) } func addIcon(out *coff.Coff, fname string, newid func() uint16) (io.Closer, error) { f, err := os.Open(fname) if err != nil { return nil, err } icons, err := ico.DecodeHeaders(f) if err != nil { f.Close() return nil, err } if len(icons) > 0 { // RT_ICONs group := _GRPICONDIR{ICONDIR: ico.ICONDIR{ Reserved: 0, // magic num. Type: 1, // magic num. Count: uint16(len(icons)), }} gid := newid() for _, icon := range icons { id := newid() r := io.NewSectionReader(f, int64(icon.ImageOffset), int64(icon.BytesInRes)) out.AddResource(coff.RT_ICON, id, r) group.Entries = append(group.Entries, _GRPICONDIRENTRY{icon.IconDirEntryCommon, id}) } out.AddResource(coff.RT_GROUP_ICON, gid, group) // TODO(akavel): reintroduce the Printlns in package main after Embed returns // fmt.Println("Icon ", fname, " ID: ", id) } return f, nil } rsrc-0.10.2/rsrc_test.go000066400000000000000000000053161402267676100151220ustar00rootroot00000000000000package main import ( "os" "os/exec" "path/filepath" "runtime" "testing" ) const name = "rsrc_windows_amd64.syso" func TestBuildSucceeds(t *testing.T) { tests := []struct { comment string args []string }{{ comment: "icon", args: []string{"-ico", "akavel.ico"}, }, { comment: "unaligned icon (?) - issue #26", args: []string{"-ico", "syncthing.ico"}, }, { comment: "manifest", args: []string{"-manifest", "manifest.xml"}, }, { comment: "manifest & icon", args: []string{"-manifest", "manifest.xml", "-ico", "akavel.ico"}, }} for _, tt := range tests { t.Run(tt.comment, func(t *testing.T) { dir, err := os.Getwd() if err != nil { t.Fatal(err) } dir = filepath.Join(dir, "testdata") // Compile icon/manifest in testdata/ dir os.Stdout.Write([]byte("-- compiling resource(s)...\n")) defer os.Remove(filepath.Join(dir, name)) cmd := exec.Command("go", "run", "../rsrc.go", "-arch", "amd64") cmd.Args = append(cmd.Args, tt.args...) cmd.Dir = dir cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr err = cmd.Run() if err != nil { t.Fatal(err) } // Verify if a .syso file with default name was created _, err = os.Stat(filepath.Join(dir, name)) if err != nil { t.Fatal(err) } defer os.Setenv("GOOS", os.Getenv("GOOS")) defer os.Setenv("GOARCH", os.Getenv("GOARCH")) os.Setenv("GOOS", "windows") os.Setenv("GOARCH", "amd64") // Compile sample app in testdata/ dir, trying to link the icon // compiled above os.Stdout.Write([]byte("-- compiling app...\n")) cmd = exec.Command("go", "build") cmd.Dir = dir cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr err = cmd.Run() if err != nil { t.Fatal(err) } // Try running UPX on the executable, if the tool is found in PATH cmd = exec.Command("upx", "testdata.exe") if cmd.Path != "upx" { os.Stdout.Write([]byte("-- running upx...\n")) cmd.Dir = dir cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr err = cmd.Run() if err != nil { t.Fatal(err) } } else { os.Stdout.Write([]byte("-- (upx not found)\n")) } // If on Windows, check that the compiled app can exec if runtime.GOOS == "windows" && runtime.GOARCH == "amd64" { os.Stdout.Write([]byte("-- running app...\n")) cmd = &exec.Cmd{ Path: "testdata.exe", Dir: dir, } out, err := cmd.CombinedOutput() if err != nil { os.Stderr.Write(out) os.Stderr.Write([]byte("\n")) t.Fatal(err) } if string(out) != "hello world\n" { t.Fatalf("got unexpected output:\n%s", string(out)) } } // TODO: test that we can extract icon/manifest from compiled app, // and that it is our icon/manifest }) } } rsrc-0.10.2/testdata/000077500000000000000000000000001402267676100143675ustar00rootroot00000000000000rsrc-0.10.2/testdata/akavel.ico000066400000000000000000000070661402267676100163370ustar00rootroot00000000000000 &h( @J(0N L #*M  N  M      $   "#!# ??( @N MNM    ??rsrc-0.10.2/testdata/manifest.xml000066400000000000000000000022741402267676100167240ustar00rootroot00000000000000 True rsrc-0.10.2/testdata/syncthing.ico000066400000000000000000005006131402267676100170760ustar00rootroot00000000000000<(L=@@(ډ00 Rh y/ (@@ (B#00 %K=  b s h#}PNG  IHDR\rf IDATxy|?#ɖ-ے%;!vI'Hs ln[v)grݖv9J =(@w!(I 4s.mmWS5Cy4枑4˯ǚgf>Y=Om OpPȌ,? pk)51 )QS蚘mJC łL<SS Q3tT8lXcA )tM >'/#/yueٷLAStPmb6%ƞ9i_;;/0@LPGK֛D /)*a h,LW3PS+˩Cz'#-˰Um pf3ERNL S,o('f\}S +0=,z'\{e9Uyq56 \Nԁ ,Mji!ujbniFZ =R&"3Im(.+5a Yyq5ʅn0pd`S (J;gShf@leV3Lτ٨]cʺʴz1ixvSgQO)H)ʺJjW(F82Q`l7YsҔ>r+ӊ¬HX@(g<|OMo$8䊛$)/.L#৖Ϣ:xH  9fX^@.,te!fA{feNo$g{ p;<tKpkKSJ`i!5BRQ&` ׾ZuY(ϲayC1K$Zd8OFh12aۍ>+mH*AR CCt-45*촯(eY2vТpxp D.aOOO=iFVV:p~<;Qicd%b֖byQR_ Fp;]#C1oԉf|y_m鳤+gSLj]v\[epdh?~w#P힤RS=6#]TN;ۛ<2I*HfweZq]_o}vucxͧwR$L"4P )-Ŭl\[u.T!oۼIOd4qQo;)IϮa fo2 "`h`wW*qz'E0F 7dyѴ&?ꓕI꣟g?*Ÿڂ,!0  ( ߳QG)c} G pgo$OPPV4D5B#%;80Vǧ24OF&qB/ Td۰8 ]2Dç/N7'%!D÷H |Kf!'AŁ#M H6+f9ЕsQү w><֡ YDs9C!] }GzxxW7Uh.O\2WirIKRbV6svvf"kTo@OM>PJMWvK5ɐFQZF \U\PI1~ vj?Xeu߳,,Rt+@X ,/un=-@wύz=}W%%%BxXc92-4 Y?Lyd$^.qfZp˼BS[x1tftK ˨;3-ay!2KxkCW$O-+5OI\DUQUX^B0əiT+j@mM]oLgZ&qY<۪..%2Ԩ& P_ncXiJRJbxzfTDa;ڇ?𘥾Aig[9qڅ^\XSM*3~_ c$0y|Jȍy?Hⶦ.|hdEڥ{@*Ukjq}LVok=!}-dlc~3c#J 7ny 6_ $+m4FhT*Y_S9ʼ7}ظ!\~8o{AA[&P/D@骀vE"Q[h}G@j)Tmd  o yjY8[k|?vbJс@%9uk\xSuߑvƫJi'$Gyj#4n6%X_ ?:l_̫+FH2 k9<0yM1(YӤyj#4nw _WG/.M7/މb!pYA6$ 6O모7=~]ߝW/w˾Z#cfì2QeIʹrӡu{3݋0h)/J.YRHHyZ_81w:1ۙb>T>YPpy@^C\.5/d6V D @H0|RER*te:$8mC.w.)fl+ `rEyDU⩑ߪ%kϷv.P[jn- g4` w:-&iW)-20&+c4HdD5Kx4E@=A]g rJ||KbiP$ȲgQy3D1u @zfy몤O]&\gf~iJo"U:~dz!vgV4S0/.~s>Ү?;-BӪarzOτ&aQiEiDEb•%XY0\tMGS"f<6 83崘_( `hBj/o.^<|(^N=/i3*uÃBd(\ n5 ̅P_bz`^;5^iqq[H?~>T dNQȶ&̾K+?jl ?nbG9_aUf9 .ea9K~6tU9ܿd`\3ݕt9 )U곿o{G"q1K0ib/Pdzd ,gDX;fXtP\Y3̗ XS)ZAPt AF {tGn`@rJ1J?kQU'!CfKS#'ܫ|y ~TlA΄WޝB2rJ~̄Kmg}1L# !d>;))- !,I!=_w+"fkgHc}&RzhMt)tL/0CfCZhLP7cA6H3 fgLEss#AGJJAǷk~#FTENu_p1I]Jsí 95a.cF?.tWJ:qG7^TAOg!]ucj ̌(WbG)K)}@.ÕN%kZJϴ4~?_aA(iMgSa(MgMYÕm WT KVHi΋VBȅ"+gKkt(VԀ",/m Gb5.&_YI=^'룈"J+Sҋhbi*ļl݆BX &:uh/BdL` M?n;jAc#Ncj(Ta!LZE:Mg+AbX,efJ@DEPV:G'1=Yt$'.(9:oJ[mFep<1ˡ2'Cw;#i`kIR_Rep׿{) be`]e |ye ")~{Qf¥9M#x4~9*E^|+j14a!ādi*'S+s21F 7G ,DrfK1)&.u4CƾG7ym")4]knl(ζո88 M=} xBD{m>;BT ]]qd$>vڀb 4VZQ/·tE $+Ȋ.L!`$.vg6qĎX7Fn싇/HV򳴙 . *@hIjRW7_`ƾHb 4us֫Fc_uYxsEЦOZ#13bHqubb V+C K{lZg5M%V`UYȳYPW1`ep-Cl7\XJc+g" @4a)2QL{I >v-i7i@S(^;OF3ZcRB`Ue9+ \]Jr\jwbLuH9]{!p$~^܄#v0~)f&pkmUN4 s[**]qfXکw2bKkoxڨZpfXU5뫝hc2Y_c<2327_+&`EqsٸVw7~y|{HG ^6|5W3Sţ(;LfZc)yVH(ZAkJ^l$:P Z?,ۙuҍ]vT92@X d9WM83-h4ꋳ3Ƀ1RCע;3ղUK`B D̰jj4y`?9u ?ˆ,VUtdbj ?G#ҫM]AzFDZk@~Z6}O6b"Dh0~gT-C(+@(gP5<*7v3W1%?˚WMC5Jh3~vzb<cYn8х]Rj%xIDATIyJzRٙ9Sv;3EބPJqFW@rZ'x X!Th@Q_[ۙ[kԇ̤;9zuƴW^:XfPy,ҥi"S|W/$k0/S$` @bxl#J"1`^)𾥥qg?=1jӎp]lq#tW'$cxǕWvZ/c1۸Z3f"&FdT E< MR5aʰ*\\v+ܰ@dȤslf4۸U¢M!_K*;Ggц͌;asd`>d7zB7ibxUBpIc1= me ̬sCfaqJao0v·\=lN'0%8|Tfg2wN&g,B 2fp}m `b~xK=fH+X> ;7YO`Kxl4|1=^\j0A.g%,EgSsMOf DgdJt%Yr!=wFu&[1n`u5z%+WXvo,@3-s`D@e:D4$᝘B@}qxKqEyo~3=f3j>$,ᏧJ{ .c}L/<}Dy:G'#A-gH~y F;5.s=u7S%AnW1vܷ<*gLe/|1ᷱ;lS$ůI?[Y[⟋KC-{"ȁX1 hoZiO< t |R<ԭni,.z_0(;Ί?`]Chv;ǂh ^ |/mlmggTR^4 H& <ȝ%'nE6:՝hJ=1:~vn~rEGRdijYBEB7qȾ.XBU(v3%މ)|'ت ܶxe+w4\6ɗt6_컐7@7@QT$Q[F'˃ŒyM7;.>!qȾ.|ݶZa 7/P})t:΋qÆTʯL;g @vfĝm~)g}NLŦ6!(`؆I0HxUgxo" Zت T2+- /~3RZD R.WR"<ӝ$A3\ Bx9,}_ߣYn>]ɵzi%QBDղǣ L8lo n[2SHyZ7ϝQ-1>@ xxoe<0nWru닲ت S9Llx0A*\_;WkS@_~$<.|Y= -Uy H_^&qIml;FSh*@éTM?¿CV?ɐ;Kx%_ Hqܵ$?Kl-'9&ʰW9;g_xZr%BxČ?ɣy mAH$RÇtK;Ψ:7BsHKc ㇉%$)e|yż#9<)bG$!\JjUUhK3d?`3LN>[;>@U:]%63=Oy>yΡ^N&{7rlyy+47O:@MoYuuJNҹF?T8E r +ykw;( |djrE_'28<~[tU"g+[@ລ(-*QU?KEM}q6>G_ _#E/v.txo|x^&VpPr[ۙ\6[Msc./o`F6!am?ۗH ~VWFn^wMԇ85ǎ΋}†\ܾDz]gč Q!jP$=#Z8#%3;L_ZP z]W},4rw3Ê2Ѿ4Db%Kv(9 +x@~MpB!Mҟ}2?n_2 /nX Og|b`1?–g$wxy\83Wz9 !GC1'݂`}+rx ( sdpUM4K2)4fߓ3" [%Xt5Vr{ '3bsePP۝`x9m4 Cko|YwnY`w9Iቃ=' \W$^#_ v̐ JpoEԢk\~қ80V5v6Xqև s쯪M{PMK;JqoDU^&]vTf!4X8Z)/cSӉW%Yy9'Caa ߳‰=wqs 24| FJ5o 7p+}lҌ]l߹l6qbqևXR#{Ҧ7؞y ' @ eQ%8ƻ1Kv_@/oJG&%W(<~4l9.q,?%ΘT%ٸ[1x骘"WH(ٝA(WpQ݊W>7wf|+}1)E9WFl;#γHOŶ,4;lw=I΋}s>g @-]닲}Dȵ-3JJ \1$c_|P+xS=YX!?xVH./ Sةbn-ϯNGbNs;{#q>wD@w2huO<`'qf?S)?$y78vl>̵ gDT[-gL~6lgw0ePiCW<|ƹX<fc?kvRJfԢ2Hp6r+2jnǽؓ+=H6Crݲi*w 0tL?zy/u,*q^ǯҴ1(h; qiT[BTStyw0WlQ;?/:Ne+rץ;/QIJpt0"e_Xe\v+;nx] H (<5`5J{æO\l|~' F=Vf` ,_?Z‚wEgkL!Hce.޾~>oȰm,j䟛괛({E =>VrUu4ps}1n+2-K1Y\~ͪ̚ d 72[??Of_~^'udaӅJ=gBhֈp#!yަWOnKݹTs>^jLQ_!UgKKT|87Dx?G焏|dz;KpfZaӒ_|؇0I/O 9(LfPBJ~}sd sRM6`,WT< nq-{2 Z|I֌pHj6>;#{?]K]'SF/iFanUL :etaVJnJs?x]'ScgeQ{ŐTTRhRʋ1|xiWrŠ2g@{;C(^i/O]y fzﺬ?ד$\uT`ۉd,Cq= ?aGsD^az3~ !H8PoBu]ޅ=a! Qx'RgD$CK<^pQ6:̒l,\Y ;Y6g٢Z+v`/ޙgJ @z_I8yH }45FR: &_} ; 6/#BA2~Yo(* 71~ f?I,NspCNC sRa"gY Rɾ"$tO(EB*kï$)+4g't2F1!a% Ưi ]7eH1,<ϸ劇拗{[KRIZ Fe'$a Ɵ<1J{br_ )%v E/-H3>"BA|KqWY2:f|ҡKPb8縍Fylj@VTA("0@Z04:ElYRwRLTƕeC8?ֆOc 2S80 u0 ?>řiL-w gBRQlە 2Dq` ~Od".as , :d")i d"}Yo=qfZqR;Oi?HIj ;)OQ H%h峩sxdTq0O8;FgHaz*s'6nl i&`ώK{fn2Dd"LWБ-Kh b%"Յt :ƉܲZݵQ޹H޼?ܲe޽@ݵ\߼JߺTݵf޸]UK޶hL߽UU߸hiNatkYlZvn\e\pfyozpghzÅ|riņt~uɈ̀wˊ̊π˔Όт͖эՄјՏ֐֐ԚҤ՚ؑӤեٝا٨ܞ۴ޫ޵xW.CxhCh"hW55|5|5\"`5 ``%% 9m9 m5m'``9%|'`'9m99%`9d '''t>'P''d P` t PPm  >>0 ' d> t0dt>de>ee>eSee0E00ie   0  0e 60                      Y                       6      v      t                          EYv66                                 6  ve            #              v           E6 & Y &   vv YJ Y  &#  v i 6 & i v 6k N k &6 N & ;]J] {  *k   ;  * ]{}    ;   * NkNN]}}]NN;**NN;*]nn];{n@QQTQgTQn@1QT}1}nn$nT1TTFFTTnnTTgTT$r$rTTFr3FF$3r[I)T[g)Ku88$KKggT޸HݶRݴ[޸Sݶ\߼J޴gUK߷hV`Li`WkXuclZv[xo\oexoqh„{i}tƆuɈwˊ΀̊Όт͖ӄэԏә֐ԚҤؑӤ֛לٜצاڨܩ۴ުܴ޵77dWK(g[--KlglgK-K}[ ->-- -v  l0 0]0v ] CNn 0v]] vnCGRR]&& R9U9& vnvG&bzUI=n   YU  U9 U I  ?Y !=?q Y,  q nn qqhA?! ? I? qqYq  Y!4!AsAtq|YAAPtttstPtt|4tjFPFtF^tH*`HXc#/HSH;;x;x;Se3#x#3X'e3Lyyo#  5   e e O               O' B r y O +T E{ 5 TE " +yu: r rT""""""""""""""""""""""" """ J O+"""""""u""""""""""""""""""""""""""a""""""""""""""""1$$$$""$$$$$$$$$$$$$""%11"""""""yu$$$$$$$$u~$%%%%$$%%%%%%%%%%%%%k$$$$$$$$TV%%%%%%%%f{@%%%%%%%%%%%%%%1mu)%%%%%%%JJ%%)%)%)%6uZ%%%%%%%%MuM%%%%)%)%1J%%%%%%%%%Zm%)%)%%%%%6M))))))))))Zm))))))))))6Z)))))))))))DwwD)))))))))))Mw))).......)).)QZ~~~~~~ZQ......).))).))f8.........2222222222.2.............8w...22222222222222222222222222222fp....2222222222222222222.2...Zp<22222222222222222222222ii222222222222222222\~i_22222222Q_~????(0`ȃ Ʌ ʉ ̍̌͑͐ϔΒϖЗΒ'ϕКїЕ(јљ ќҘ*Ҟҝ"ӠԢҚ7ӝ-ԡ%եդ&ԟ9բ0Ԡ:֦(֩դ1ר)׫ ׬ ֥<ح!ר4פG٭,ץHٰ#ث5ة?اIح6ٰ-ڳ$ةJڴ%ڱ9٩V۵0ڭLڰCܸ2۰N۳Eܶ<ܱOܰYݹ>ݴP޹Hܱeݴ[ݵ\޸S߾A޴g߽J߻U߶h߹^M`V`kkYvcmZmd\xeypz{h|ņ}ttɉ̀wˊ̊πΌт̕эјՏאאҤӤْզڝاڨܩ۴߫ݵC 6)`)++THHv~K+w~/KdK/wpdK?ddK?K ?~3d3?3[ w[338d&&&D&]h&&8&y]88DQEk8.kRE _     ;E. { k r> ra >a E; {kkL>> r " V rLLll|l l XAAXncNA(|9AAnNAAn9eP}eNF}e}q -P F} <}0qU^#0^#}#J^5U!i!!!!!!!!!!!!!!!iq!O!!!!1B!!!!!!!!!!!!!!!!!!!!!!!!5*!5!!!!!YI!$!!!!!!!!!!!!!!!!!!!!*m!!!Y$$$$$zB$$$$$$$$$$$$$$$$$$$$B$$$$$O1$$$%%o$%$$$%$$$$$$%%'$%$\%%$$$$%'''''zI%%%%%%%%'''%'%='%%%%%s''''''g\'','''''''bo''''''fg''''''@uoSWoxI'''','Ig,,,,,,,SW,,,,,,,St,,,,,,,,7jo@,,,,,,,,g7,,2,,,,2,22GWWM22,2,2,,2,,7b222222444444444222222222WW44444444444444444444Mj:44444444444444:jxZG444444:Zx??( @~ɀƂǃɆȄ ˈ̉ɅΊϋʆʍˎ̏͐ΑɋϔВʌ˔ѕҖˍ!ѓ ̕ ̎$Ҕ͖ЛӕќΗӝԞϘ՟Й֠סѢњңӤӛԥИ2֦ت֟&ק ѡ$נ(Ң&بӣ(٩դ*ڪխ֮ݵׯ٨2ٰئA۪5ڱ!ܫ7۲#ح5ܳ%׵"׫Dگ8جE޵*޴>ݰX߳O߲[۴Y\ݸOܵZEH߸^߷iUb޼jenwhqi{r}~Ņ}~Əyˊ̓̋|τΎӄϔԅҍіО׉֑֛֠٣ۜתث٬ۮݯ ZkkZ RR`BxBBwh  Pg  S/ 2    m5  ///-TP//oh/ -e\EE// xb\V:- -&/!wB-}$$!@e$$etGYit!$&!4V-!&! 44--$' $4&-4-B-}L-'--- } '4'4''''' -&L\4-{4 44n;'4 ' ') ) )4) 40|On44'.''Gv4'8484'8'8'''8'' ^''80 (08.8.8888808808 4088)nc880...0...08.08. 83.,48..)))))8))),8),.l)3G.W)7GG1GG0GGGG.GG v,9G9,n3090G9171799<9l)0G;=11nc)G97G<<?FFFHH>HIU?UIU>UHI>>>>>>>??(0|}}ɀʁƂǃɆʇȄ ˈ̉ɅΊϋɌʆʍˎ̏͐ΑɋϔВʌ˔ѕˍ!ѓ ҔϚ͖ЛӕќΗӝԖԞϘ՟Й֠ѢњңӤӛԥИ2֦Р"ѡ$٫ڬҢ&بӣ(џ8٩ԫҠ:ڪ֥,խצ.բ=֮ا0ݵׯԪ/߷ک3ٰի1۪5֬3ڱ!۲#ٮ6ܳ%׫Dگ8ض$ڮHۯI۷>ݰX۶M߲[ڲc޷]߷ia޾`dnY߼uoxqs}Ɉˊ̓{ʔ̕ΓЌӄϔלգ٣ثۥݞ٬ް޶߲  2^nnb2\[jY  o> 2w\ 0 2f  " 2b0  2$;_ zw  ^E p g{iaWJ:0ep*ME$_{s0(k!0T5:CMS(4t0t4!0B|s#(z #:q +:#5:+:4E<l:0ZZ#:+:++5++:4+X!::/4l*:::3:3/:3+#0!1+gH43/1:1::1:/,|*31++H9999H9<,#|Q/:NG/9HALH9,GG+1?G1PqX/,,1XqR1DDPA?mm?AGGPG69cyycAAGPGXGAHHAGPPRFUUIIUUR??( txy{|}ƀǀƁłƃǃȄȇɇȈʈʈɉʉɊʊɇ ˋˇʌˌʋː͓͔͐͒ΔΔΒ ͕Ζ͒ΓϙКИϔΕћ ћ џѝ ќќҟҡҡӡҟқ(ӥњ.ӣԣԢӡӡӢӛ5ԤԣӞ3ԥ֩Ԡ-եզ֧׬׫֨ ת%׬#ذث,ٯ%ٯ&ٯ,ث<ٳ&٬C٩Nڮ?٬N۶,ܶ,۳:ۯSۯTܳMݶJܳXݷN޶h߸rojn[fpxslă|~ʅʈ́̋̌˖͐ώϒѕј֒؍Ӥ՞ؗٚףܭCggCZyyf q< ha ()- n`\I F:.~wjdY% Wbmtxu}roz,#!{ |s$3e'@ABE4"/c02S9JDDGK?&vP5l*>LOOL=+_Q8V6776V1T;pp;UXHNkkNH^RMMR]PNG  IHDR\rf IDATxy|TadHH&*da5hAZ 5Է{!^-Rwokվo%ԲeQ Y$2L f&!LfB,3{ν3\$s3{~ysQ5vg0obn<C;~"Xa;ML$[j&*p²C m1lG @(|7䢠0f؎ #XC¶k<` Qn0;HѝCXHpˣ=2A<s@Ve@=FycsL!^ |03kc .`6A |0H$ ^ bkI`&)5,) HFEy,1X {Gn/˂g36s%`Y,+.^/@U<<.=0 UJۍe'~>,!J @ y>O>3\Ő phce@>?V , ˆr!AN ̀ 0 \VY‚!-0ǃ  ,jyɃ  Z `1k[8 u~7 g -Ցu~ Q# +Xx6Ro;c}i,/iՓsV6~!g "@}cá #!Wt:R9Ԋ3?, ͰPjsHn_'g;$P ; zFC` o9ԊvJmuY40sru]SjY-Q(mFAM?{ V9'g_1R7Ї`|l80z >׈&>{%&f=_Q )MaZ|$ÃYCR[+}џ…\9TP x%Tj ?B1uj`ЇN{aQaF>׈;kSP`9OB:jva|lkԱ6EU[/aņܓVzV=Ԝ φ ;\ Gc>)gF>Y$+E`Ї߫jO /:@AMZj6朚3Pfmd=>_bs`ivWEM5C07Yi t@xbBS+gv({axLKr3M]Ո'wńkaZB5U7PX1wH7f"~o77L@]Ո-adt0-! DS4g8S[1wB7e%_Bay,E#bdh-`n3-KY%Vr*(u0m)U\.Xc1]Fz Oz[]_H ƢX̓YV`eB9y#BBUL[J!G# ;4hgUx9%~獠2=HML[Jc,r AՁQRXVAd"-B!KcxY~D=V/)P@#G q.X7qCbm[/UXUR%7v9S#֝" ]9X" ԺOh\6|V7ᾯQ_Bn-mx9bI`E7fAp `.:bqȣ d 1"`04Px`k$ad 쭗0l8pqK¾C(\lEjBPP@U/K8clDS XSv.4|#mhKJ!Ș0|liŬdm[k6B*`vlwbD06L%sd潲:{b=E"_']Fr;?[|a+Y%)P`חd +'-7z(`ٷ/]v w/` 6hD@%&_/#Ca}|5{ b|KWq} Ng5ɉjؿԗ{$I닳_RPf6KQ$yRHƟNjNZ_l~zK}y{]I?;&E^ & nJZZukHZ_E?:F4I˾Eg~M ѱG{ {n,T*$Tt>zvt^ p#ۛx%IM|WbD0N+%̗=]xP_:זԷ`1>Ĉ`D+cE44%+釼lVab\7G /R79.ͮ=@ln?'VFqw91=QڄN[g'-6;x#"/b+8?;b9I2VdIHeřNqF??_I /v$(ܜ%: J@ Tzhøw8z :p^9$E7 +<pӋ"EOüyZxwD[0_k3&=8Q`E]F_\ߢX樏'YC;沮Bg![`Z–pVLj_}*v T*cE_Ln y9)Jkv uLt7Qڞ?L=&^!~<ͤR`%sEp?2@q5؛OZy# x3sk3!¶%&5_\s$"s;q} NӀ^\)bt(Z x߃½,鿉>$:- RCy2}N}fFeg@3 Ƈ3&{YIcgfɺ}F8q*D=l < ;]5 U[;*p_Y1)Q5$2@-(V6`&G ly &7]؊ge-?;0$ rER<>X>{Z0ﳊ zLqKeA & k:@b$G,#N9\?\ā."힙"'z8@HZ;[@q?yKƊIdJ_tvE8wtQL5|~BMP_] l|NC9v 鱦 .:c$`2;B\CotZ z@L&bV$^6 f–pLf7pJIuZ D`' He@ZpɄ}{HAsJ+5_}ZOq<,Cod_w %RPޠ4q#|G`F~ec+~iY;];]>*-zAkxo`'[o!d_O^O.G`-v'1l˖{n=QhwKCrr"6xh=!FhR{{Ƞr/2KrJ" &֞¢gh^AQS:ǁ{M7%O[qTNꛒ%xRMuPV-@ʁ>D|߀!O(>u_\ׂm XiBP VߔL4D=%['bQSs68H NAZ噛f׶`ޥ;`H4VN!+S+i%Rc|6=DRKFd]Ǎ(l*[9% ʐ;ݣey O%#?KF^}f뎢$>g~xld"]r)j=4Vz'S}^ꟑXdxy'Vf 99] >?ԒQ}~^*۝.,RX8}Ex3!5Fߓ+MbPz'S} k˝@Lg_ߥƲ6K6c*YAjɒkHب~M?ߋT#M ƂѨlt@Q2#>ӅE{*WO(G~ߥs\#kߥ)lt"{iQ镆q4:8TVwZ,Rf|>9LHw2z&Xq vbl!^A4,:dG`ўJ[q&wz 3d8,-& $j+pos4Ii1a&%J mefRdb0HX @HRJAXht01IQZD\C\Xt~sCk[<^nm۝RbTb1aOo{dhQӒq}jU{@̉4%V ߥONjibGՄkl6hwz,6յgSYTBd FZ G5k5HA[jDRV܉w/)sF ܫ VFnkg*uO 1)o0 (P!⫪F'Dlp|߅*bygY;*wپbQyfgtWWʮUiaj;KU$um־;XW @>m+6jv#V+Ě[L3R$>ۨʙ((,;<t[T" 6K7<,=66Ǐ^4]ߗZ 25 2$nenjsWTH+DN2+]۠b<,~IցzLKXw y{ 4UaCx?' PJIQZQ Nڡ?7dz/ wV>es0jm BM!F#%6\YamkWo ~FؗeUԂuXNXI Їhlc5xi I xbL~RoC6 > Ƽ2Ĵ?:Em ?@)ruY+z}D N|DdeC#s7QZwlrgX}-8SDPPh cE0x QJB<м]_N~6 ;+lXy4Bӏp0{uZ?ۈ M@۝.9DزyiJ"E=iڥuzo\S ؑ>C$D,F&Uk- N\SL"ܤņaEp!kPGP͌ӜGF=d0K,v\1J'#7E53_шvDѯ}9xM= @k9 }NZvZl51H/:oaipb})GFfP(+$AD4IDAT/@Kū3~Zt˾MKIw:} 'f c qra;z Y/oo{dTnw?ռ]se02G={cLquhM2;7C}?UFM/|~DSD;NQMTNˮw?_Ex9.QjK Ʉ !gɢ_l#YcVrA9hs$UKݟї*p;NIjt(xIg#~C:+=d Mo,y(wm;_[FL3oy{_2+.Đ>D~ |Az9$Z ޟ)p ?\Q^ V^M*5k$w$,pؐ7 {V%Na5:-:5KU7Xuvr+H`a|,_0HF{.ɝw6Oyʆu%H&6[ Z5V*g@rF^" Å֗Hdϝ#ޗnӾ&5YVhkr2aۅ$ ޟ9 _>^qRU{=VpǪlRcu. }On,&__+gpWJE#.<;O*(3N.8\nܔ,Mnƽ*X5џr,:IXNɼRbִdBqh<@.$ "'$ݕRbYġů+;Xe]ONP'D [sFJi@XsF[*VE"V wL&;dܙü_^I ֟K@t[I%݉Y[ʈߦ'Jc`jRyMz0%+mB. r󸱐Ќl8mz2a_ha4<1=::p|J֕OD])1Їb~u9GM] 9@`!&`]I-^=Hfzp7]qN?K1`{t0UIJ jG=(y[7ʶ_=FyS3)W0+X-eGǘI6H\ń`:>ɉU &'FR0 Q!ؖ7>%+Fo&&0or) -Sh-dLl%|jߐ]xŻ#kbs}`X ԑ+)B}ñax5+dD d^g_B.5 }++HpqWJU #hdf<&1p#y v+K,Mq0$$|YlNA>m 쏍Y ؅&Tc=9) ;úK:Os%YVʶAI1k{sĢ{`pWC4xf|]q-^G IQxzbB9\ccQнq$BZtf(ZuŵX[\+n+5w(VܵMtWQ`1y]Tto}{brR&߾ q š<8jBH HcLuu凟ŽCC<kjVYnI ǃaRU6`㤛|ҍvWfux:3Og&PV8azfIbԇ`NAzrWu¤ %٠7|@+#=.bw/+ϓlrec%o%f(_@GU6` +V62e)7S0sST=-dmx|,%LV@G$YiÅ &2?Bqᘜ)IQ؅&Lg & ;d\ uܝWoTN M8z, 8mwRI(Dž#YEz\8p܋e{ XA@="I xpt?֦tɱ M9\8msb)l< !TpňMyjKWWmUl-.<=)@YlNd&4i2myب(P&WwчhpwZ,N>>l/b +Ր2#fs+_P@kbB 6 ˭xy3!\/aԇy!ObuYgU Lm|R9# D`g!xftw4б؄鷎Wkab;?p-@;F2lcrPtT !U)(ܝYCr:',6[aT[D C&Beޢ`hjѬacmQq8Mr,oP@k p+{퀯C1Y3{- ^^Ҭl|j=bPx|bKe1 S:ji Kl/^KYpT daSrY |b7r`Q>u}?uZlmZ;*s_Q@īfCPur7!¨af^KlqB3Z86@sqfֆAʀ ~qЇjݾ<oI6 G_v=mXlNV^*r.>Lw^ C~( \|jzi!Cpc0U/xu"^9dbֶp+OkR5> &ł qA016ǟ(D@ͬH  b B HN/\( @Xķ+<{5?7 ^8hn &0@~ ΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑyϗΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑڭMݳ[ȈȈȈyצ>Αצ>ΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒљ ΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒљ צ>ΒΒΒΒΒΒΒΒyjΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒ`Β`ΒΒΒΒΒΒΒΒΒΒΒΒΒΒ֦Ԡ/ΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒϗyΒΒΒΒΒΒΒΒΒΒљ ΒΒΒΒΒΒΒΒΒΒΒΒΒΒΓΓΓΓΓΓΓΓΓΓΓΓΓΓԡ0ɉΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓݵ\ΓΓΓΓΓΓΓΓΓΓΓԡ0ɉΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓ Γ0ΓΓΓΓΓΓΓΓΓΓΓΓΓΓצΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓњ!њ!ΓΓΓΓΓΓΓΓΓΓΓΓɉњ!ΓΓΓΓΓΓΓΓΓΓΓΓΓΓΔΔΔΔΔΔΔΔΔΔΔΔݵ\ɉɉڮMΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔݵݵ\ΔΔΔΔΔΔΔΔΔΔΔΔΔњ!ɉΔΔΔΔΔΔΔΔΔΔΔΔΔΔϔϔϔϔϔϔϔϔϔқ!ʉϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔz޵ϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔkϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔ0ϔ0ϔϔϔϔϔϔϔϔب?ʉϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔա0қ!ϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔkϔϔϔϔϔϔϔϔϔϔϔϔϔϔϕϕϕϕϕϕϕϕة?lϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕ۰NϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕlϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕҜ"۰Nϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕʉјϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕբ1ϕϕϕϕϕϕϕϕϕϕϕϕϕϕ ϖϖϖϖϖϖϖϖקϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖة?޶]ʉʉ۰N޶]ϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖјzϖϖϖϖϖϖϖϖϖϖϖϖϖϖpϖPϖϖϖϖϖϖգ1lϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖҝ"ˉت@ϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖգ1ϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖ{޶ϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖت@ˊϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖգ1ϖϖϖϖϖϖϖϖϖϖϖϖϖЗЗЗЗЗЗЗˊˊlܱOܱOӞ#ЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗ߸]ЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗ{{ЗЗЗЗЗЗЗЗЗЗЗЗЗЗ ЗЗЗЗЗЗЗ߶ˊˊ߸]ܱOܱOЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗ٫@֤1ЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗ֤1߶ЗЗЗЗЗЗЗЗЗЗЗЗЗЗPИ0ИИИИИИИاˊˊܱOܱO٫@ИИИИИИˊИИИИИИИИИИИИИИИИИИИИИИИИИИИИИИИИИИИИИИИPИИИИИИИاӞ$ИИИИИИИИИИИИИИИИИИИИИИИا֥2ИИИИИИИИИИИИИИИИИИИИИ߶mИИИИИИИИИИИИИИИИИИИИИИИm߸^ИИИИИИИИИИИИИЙЙЙЙЙЙЙЙm٧ЙЙЙЙЙЙЙЙЙЙЙЙЙЙЙЙЙЙЙЙЙЙЙ٬ÅЙЙЙЙЙЙЙЙЙЙЙЙЙЙЙЙЙЙЙЙЙӟ$ҙҙЙЙЙЙЙЙЙЙЙЙЙЙЙЙЙЙЙЙЙЙЙЙЙЙ߶ЙЙЙЙЙЙЙЙЙЙЙЙЙљљљљљљљљљ̊љљљљљљљݳPݳP߹_̋̋٨љљљљљљљљљљљљљљљљљљљљљљљљљљљљљљљљљљљљљњњњњњњњњњњԠ%њњњњњњњњњњњњњњњњњԠ%ݳPݳPm͋͋߶њњњњњњњњњњњњњњњњњњњњњњњњ߶њњњњњњњњњњњњњњњњњњњњњњњԠ%ڭBњњњњњњњњњњњњњњњњњњњњњњњњњњњњњק3ݳPݳP|͋͋߶њњњњњњњњњњњњњњњњњњњњњњњњ͋њњњњњњњњњњњњњћћћћћћћћћћћԡ%ק3ћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћ|ћћћћћћћћћћћћћћћћћћћћћћћћ͋ћћћћћћћћћћћћћћћћћћћћћћћћћћnћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћnԡ%ћћћћћћћћћћћћћћћћћћћћћћћnݴPћћћћћћћћћћћћћћћћћћћћћћћћћԢ&ћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћר4ћћћћћћћћћћћћћћћћћћћћћћݴQݴQћћћћћћћћћћћћќќќќќќќќќќќќќќќќќќќќќќќќќќќќќќќќќќќќќќќќќќќќќќќќќќќќќќќќќќگCگCќќќќќќќќќќќќќќќќќќќќќݵQݵQќќќќќќќќќќќќҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜnnҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜҜݵQݵQҜҜҜҜҜҜҜҜҜҜҜҜҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝ`ԚҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝݶQݶQҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝգ&ԚoԚգ&ҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝoݶRҝҝҝҝҝҝҝҝҝҝҝҝҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞݶRόόό}ڰCҞҞҞoت5ҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞΌҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞڰCڰCҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞόҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞόҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞت5oҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞӟӟӟӟӟӟӟӟӟӟӟӟӟό۱Dӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟ֥'՚ӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟ޷Saӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟ՚֥'ӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӠӠӠӠӠӠӠӠӠӠӠӠӠ۲DόӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠo٬6ӠӠӠӠӠӠӠӠӠ٬6όӠӠӠӠӠӠӠӠӠӠӠӠӠӠpӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠ۲D۲DӠӠӠӠӠӠӠӠaaӠӠӠӠӠӠӠӠӠӠӠӠӠӠ@ӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠ٬7pӠӠӠӠӠӠӠ֛۲EӠӠӠӠӠӠӠӠӠӠӠӠӠӡӡӡӡӡӡӡӡӡӡӡӡӡӡ֛۳Eӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡ֧(֛ӡ٭7~ӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡb~ӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡ֛ӡӡӡӡӡӡӡӡӡӡӡӡӡӡ@ԢԢԢԢԢԢԢԢԢԢԢԢԢר(ԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢp֛ԢԢԢԢԢԢԢԢԢԢԢԢԢӡԢԢԢԢԢԢԢԢԢԢԢԢԢԢٮ7ԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢܳEpԢԢԢԢԢԢԢԢԢԢԢԢԢ@ԢԢԢԢԢԢԢԢԢԢԢԢԢэԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢٮ8ܴFԢԢԢԢԢԢԢԢԢԢԢԣԣԣԣԣԣԣԣԣԣԣԣԣܴFԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣש)ԣԣԣԣԣԣԣԣԣԣԣPԣԣԣԣԣԣԣԣԣԣԣԣԣԣߺTԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣܴFԣԣԣԣԣԣԣԣԣԣԤ`ԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤэԤԤԤԤԤԤԤԤԤԤ ԤԤԤԤԤԤԤԤԤԤԤԤԤת*߻UԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤת*ԤԤԤԤԤԤԤԤԤpդդդդդդդդդդդդդդݪդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդUդդդդդդդդդ ե`եեեեեեեեեեեեեڰ8UեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեUեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեث*եեեեեեեե`զզզզզզզզզզզզզզÙզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզ̀զզզզզզզեզ@զզզզզզզզզզզզզզުڱ9զզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզ؜ڱ9զզզզզզզէէէէէէէէէէէէէէڲ9էէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէڲ9էէէէէէէէ0է`էէէէէէէէէէէէէէӎ΀էէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէٜڲ9էէէէէէէ֧֧֧֧֧֧֧֧֧֧֧֧֧֧٭,޸H֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧٭,r֧֧֧֧֧֧֧֧@֨p֨֨֨֨֨֨֨֨֨֨֨֨֨֨V۳:֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨ޫr֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨ٝ٭,֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨ٝ޸H֨֨֨֨֨֨֨֨֨@֨`֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩ٮ,֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩rٝV֩֩֩֩֩֩֩֩֩֨֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩۴:ٮ,֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩rπ֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩@֩@֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩Wٮ-֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩s֪߫֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩תתתתתתתתתתתתתתתsٯ-תתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתת߫תתתתתתתתתתתתתתת֪֪תתתתתתתתתתתתתתתתתڝߺIתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתתگ-گ-תתתתתתתתתתתתתתתתpתp׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫߫s׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫ߺIڰ-׫׫׫׫׫׫׫׫׫׫׫׫׫׫׫ת׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ڰ.׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ Ђڰ.׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ f׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ܶ<ڰ.׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ `׬ @׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ tܶ<׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ڱ.֐ڱ.׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ fܶ<׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ t׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!߼Jܷ<ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ڲ.ttح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!׬ ׬ ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ڲ/fح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!߼K۞߼Kح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!0ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ffڲ/ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!߼K֐۞ڲ/ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!`خ!0خ!خ!خ!خ!خ!خ!خ!خ!خ!خ!خ!خ!خ!خ!خ!خ!خ!خ!خ!ڳ/ܞאfݸ=خ!خ!خ!خ!خ!خ!خ!خ!خ!خ!خ!خ!خ!خ!خ!YтYخ!خ!خ!خ!خ!خ!خ!خ!خ!خ!خ!خ!خ!خ!خ!خ!خ!خ!خ!خ!`خ!0خ!خ"خ"خ"خ"خ"خ"خ"خ"خ"خ"خ"خ"خ"خ"خ"خ"خ"خ"خ"Yܞאאאאאאאuخ"خ"خ"خ"خ"خ"خ"خ"خ"خ"خ"خ"خ"خ"خ"خ"خ"خ"خ"خ"خ!خ"0خ"د"د"د"د"د"د"د"د"د"د"د"د"د"د"د"د"د"د"د"د"Yבڴ0د"د"د"د"د"د"د"د"د"د"د"د"د"د"د"د"د"د"د"د"خ"د"0د"د"د"د"د"د"د"د"د"د"د"د"د"د"د"د"د"د"د"د"د"د"Yבڴ0د"د"د"د"د"د"د"د"د"د"د"د"د"د"د"د"د"د"د"د"د"د"pٯ"0ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"Kuٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"`ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"gӃ޺>ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"ٰ"`ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#Zؑv۵1ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#0ٰ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#LvؑؑӃZ۵1ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٰ#ٰ#ٱ#@ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٲ#ٱ#ٱ#@ٲ$pٲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ٲ$ٲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$ڲ$@ڳ$@ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$`ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڳ$ڳ$ ڴ%`ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ% ڴ%@ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%`ڴ%ڵ%ڵ%`ڵ%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%ڵ%ڵ%ڵ%0۵% ۵%`۵%۵%۵&۵&۵&۵&۵&۵&۵&۵&۵&۵&۵&۵&۵&۵&۵&۵&۵&۵&۵&۵&۵&۵&۵&۵&۵&۵&۵&۵&۵&۵&۵&۵&۵&۵%۵%۵%0۵&@۵&۵&۵&۶&۶&۶&۶&۶&۶&۶&۶&۶&۶&۶&۶&۶&۶&۶&۶&۶&۶&۶&۶&۶&۶&۶&۶&۶&۵&۵&۵&P۵&۶&۶&@۶&p۶&۶&۶&۶&۶&۶&۶&۶&۶&۶&۶&۶&۶&۶&۶&۶&۶&۶&۶&۶&P۶&0????????????(@ ȃ 0ȃ pȃȃȃȃȃȃȃȃȃȃȃȃȃȃȃ ȃ 0Ʉ 0Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ @Ʌ `Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʌ pɅ Ʌ `Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ pʆ 0Ɇ Ɇ Ɇ Ɇ Ɇ Ɇ Ɇ Ɇ Ɇ Ɇ Ɇ Ɇ Ɇ Ɇ Ɇ Ɇ Ɇ Ɇ Ɇ Ɇ Ɇ Ɇ Ɇ Ɇ Ɇ Ɇ Ɇ Ɇ Ɇ Ɇ Ɇ Ɇ Ɇ Ɇ ʆ @ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʈ ʈ ʈ ʈ ʈ ʈ ʈ ʈ ʈ ʈ ʈ ʈ ʈ ʈ ʈ ʈ ͏צH޴gÅÅÅÅ޴gצHї*ʈ ʈ ʈ ʈ ʈ ʈ ʈ ʈ ʈ ʈ ʈ ʈ ʈ ʈ ʈ ʈ 0ʉ 0ʉ ʉ ʉ ʉ ʉ ʉ ʉ ʉ ʉ ʉ ʉ ʉ ͐޵gҤڳvї*ʉ ʉ ʉ ʉ ʉ ʉ ʉ ʉ ʉ ʉ ʉ ʉ ʉ 0ˉ 0ˉ ˉ ˉ ˉ ˉ ˉ ˉ ˉ ˉ ˉ ˉ اIӤڳۮXˉ ˉ ˉ اIاIј*ˉ ˉ ˉ ˉ ˉ ˉ `ˊ 0ˊ ˊ ˊ ˊ ˊ ˊ ˊ ˊ ˊ ˊ اI̕ՠ:ˊ ˊ ˊ ˊ ˊ `ˋ 0ˋ ˋ ˋ ˋ ˋ ˋ ˋ ˋ ˋ ΒӤņبJΒˋ ˋ ˋ ˋ ˋ ˋ ˋ بJwա:ˋ ˋ ˋ ˋ ˋ 0̌̌̌̌̌̌̌̌̌̌بJ͖Қ,̌̌̌̌̌̌̌̌̌̌̌̌̌̌ϓw̌̌̌̌̌̌0̌̌̌̌̌̌̌̌̌߷hƇϓ̌̌̌̌̌̌̌̌̌̌̌̌̌̌̌̌̌̌̌۴٩J̌̌̌̌̌̍̍p͖̍̍̍̍̍̍̍̍қ,̍̍̍̍̍̍̍̍̍̍̍̍̍̍̍̍̍̍̍̍̍x̍̍̍̍̍̍̎ ̎̎̎̎̎̎̎̎ΖLJܴܱ̎̎̎̎̎̎̎̎̎̎̎̎̎̎̎̎̎̎̎̎̎̎̎Z̎̎̎̎̎̎̎@͏͏͏͏͏͏͏͏ii͏͏͏͏͏͏͏͏͏͏͏͏͏͏͏͏͏͏͏͏͏͏͏͏xӝ-͏͏͏͏͏͏͏͐@֤͐͐͐͐͐͐͐=֥=͐͐͐͐͐͐͐͐͐͐͐͐͐͐͐͐͐͐͐͐͐͐͐͐͐Зj͐͐͐͐͐͐͐͐p͐͐͐͐͐͐͐Зj͐͐͐͐͐͐͐͐͐͐͐͐͐͐͐͐͐͐͐͐͐͐͐͐͐͐ڬL֥=͐͐͐͐͐͐͐͑Α@ΑΑΑΑΑΑΑϗȈΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑј ϗΑΑΑΑΑΑΑΑ`ΒΒΒΒΒΒΒצ>ΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒݵyΒΒΒΒϗjΒΒΒΒΒΒΒΓ ΓΓΓΓΓΓΓԡ0ΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓݵ\ΓΓΓΓΓњ!ΓΓΓΓΓΓΓΓ@ΔpΔΔΔΔگMצɉΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔԡ0ћ!ΔΔΔΔΔΔkkΔΔΔΔΔΔΔϕϕϕϕkצϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕ޶]ϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϖϕϕϕ۰Nlϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕբ1۰N۰Nʉקϕϕϕϕϕϕϕϕϕlة?ϕϕϕϕϕϕϕ0ϖPϖϖϖ޵ϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖϖҝ"ҝ#ϖϖϖϖϖϖϖϖϖҝ#ˉϖϖϖϖϖϖϖЗЗЗЗˊˊ{ܱOܱO֤1ЗЗЗЗЗЗЗЗӞ#ܱOЗЗЗЗЗЗЗЗЗЗЗاЗЗЗЗЗЗЗИИИИ߶ˊˊl߶ˊИИИИИИИИИИИmИИИИИИИЙЙЙЙЙЙЙЙЙЙЙЙЙЙЙ֥2ܲPЙЙЙЙЙЙљљљљ̊٨ܳP̋̋әљљљљљљљљљљљљmљљљљљљњњњњњԠ%њњњњњњњњњݳPݳPߺ_͋͋٨њњњњњњњњњњњњ͋њњњњњњћћћћћԡ%ڨԡ%ћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћћ͋ћћћћћћќќќќќќ͋Ԣ&ќќќќќќќќќќќќќќќќќќќќќ`Ԣ&ќќќќќќќќќќ͋ќќќќќќҝҝҝҝҝҝ΋ҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝԚگCҝҝҝҝҝҝҝҝҝ΋ҝҝҝҝҝҝҞҞҞҞҞҞ}ҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞݶRۨۨ`ݶRҞҞҞҞҞҞҞҞΌҞҞҞҞҞҞҞҞҞҞҞҞݶRҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞդ&oҞҞҞҞҞҞҞόҞҞҞҞҞҞӟӟӟӟӟӟ޷S٫6ӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟ۩۩ӟӟӟӟӟӟoӟӟӟӟӟӟӠӠӠӠӠӠӠaӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠo֦'ӠӠӠ٬6޸SӠӠӠӠӠӠӡӡӡӡӡӡӡ֛ӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡ޸S۲E۲EЍܩӡӡӡӡӡӡӡԢԢԢԢԢԢԢܩԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢܳEԢԢԢԢԢԢӡԢ@ԢԢԢԢԢԢpٮ7ԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢר)эԢԢԢԢԢԢpԣԣԣԣԣԣש)כԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣٯ8ԣԣԣԣԣ0ԤԤԤԤԤԤԤݪת*ԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤלqԤԤԤԤե`եեեեեեUҎեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեեҎեեեեեեզզզզզզڱ9զզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզզ؜rզզզե0զէէէէէէVէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէէVج+էէզէ ֧֧֧֧֧֧֧ު΀֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧ӎ֧֧֧է`֨֨֨֨֨֨֨٭,V֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨޸Hԏ֨֨֨֨֩ ֩֩֩֩֩֩֩V޹H֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩ٮ,߫ԏπ۴:֩֩֩֩֩`֪֪֪֪֪֪֪֩ρW֪֪֪֪֪֪֪֪֪֪֪֪֪֪֪֪֪֪֪֪֪֪֪֪֪֪֪֪޹I֪֪֪֪֪֪֪߫֩תתתתתתתתת߫ρתתתתתתתתתתתתתתתתתתתתתתתתתתeתתתתתתתתת0׫ P׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ڰ.׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ڰ.ڝڰ.׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ Ђ֐׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ t׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ح!ح!ح!ح!ح!ح!ح!ح!ح!f֐ݷ=ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ح!ڲ/tтح!ح!ح!ح!ح!ح!ح!ح!ح!׬ ح!ح!خ!خ!خ!خ!خ!خ!خ!خ!ڳ/тYخ!خ!خ!خ!خ!خ!خ!خ!߽Kт߽Kخ!خ!خ!خ!خ!خ!خ!خ!ح!ح!0خ!خ"خ"خ"خ"خ"خ"خ"خ"خ"خ"Yuخ"خ"خ"خ"خ"خ"خ"خ"خ"خ"خ!0د"د"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"Yuٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"د"د"0ٰ"ٰ"ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#޺>ӃӃ޺>ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ"ٰ"0ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#LZؑؑؑؑؑؑZLٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٰ#ٱ#@ٲ#ٲ$ٲ$ٲ$ٲ$ٲ$ٲ$ٲ$ٲ$ٲ$ٲ$ٲ$ٲ$ٲ$ٲ$ٲ$ٲ$ٲ$ٲ$ٲ$ٲ$ٲ$ٲ$ٲ$ٲ$ٲ$ٲ$ٲ$ٲ$ٲ$ٲ$ٲ$ٲ$ٲ$ٲ$ٲ#ٱ#pڲ$ڲ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڲ$ڲ$ ڳ$ ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$@ڴ% ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%@ڵ%ڵ%`۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%۵%ڵ%pڵ% ۵&@۶&۶&۶&۶&۶&۶&۶&۶&۶&۶&۶&۶&۶&۶&۵&P۵&?????(0` ȃ ȃ `ȃ ȃ ȃ ȃ ȃ ȃ ȃ ȃ ȃ ȃ ȃ ȃ ȃ pȃ Ʉ `Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ `Ʌ `Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ Ʌ ʆ 0ʆ ʆ ʆ ʆ ʆ ʆ ʆ ʆ ʆ ʆ ʆ ʆ ʆ ʆ ʆ ʆ ʆ ʆ ʆ ʆ ʆ ʆ ʆ ʆ ʆ ʆ ʆ @ʈ pʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ץHץHʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʇ ʈ ʈ ʈ ʈ ʈ ʈ ʈ ʈ ʈ ͐޵gҤڳ޵g͐ʈ ʈ ʈ ʈ ʈ ʈ ʈ ʈ ʈ ʉ ˊ ˉ ˉ ˉ ˉ ˉ ˉ ˉ ˉ Ҙ*ӤڳاIΑߵgĆߵgΑˉ ˉ ˉ ˊ ˋ ˋ ˋ ˋ ˋ ˋ ˋ ΒӤ̕ņ߶hۯYņņՠ:ˋ ˋ ˋ ˋ ̌̌̌̌̌̌̌ۯY߷hϓ̌̌̌̌̌̌̌̌̌ܰY۴̌̌̌̌̍p̍̍̍̍̍̍Ƈ٩J̍̍̍̍̍̍̍̍̍̍̍̍̍̍ܰY٩J̍̍̍̍̎ ̎̎̎̎̎̎ԥx̎̎̎̎̎̎̎̎̎̎̎̎̎̎̎̎٪K٪K̎̎̎̎̎@͏͏͏͏͏͏LJ֤<͏͏͏͏͏͏͏͏͏͏͏͏͏͏͏͏͏֤<֤<͏͏͏͏͏͐P͐͐͐͐͐ݲ[֥=͐͐͐͐͐͐͐͐͐͐͐͐͐͐͐͐͐͐͐y͐͐͐͐͐͐ΑΑΑΑΑјצ=ΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑڬLץ=ΑΑΑΑΑΒ@ΒΒΒΒΒ֦yΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒΒљ ڭMڭMљ ݴ[ΒΒΒΒΒΒ`ΓΓΓΓΓݵ\ΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓΓݵɉΓΓΓΓݵڮMΓΓΓΓΓϔϔϔʉkϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔϔ޶\ϔϔϔϔϔբ0ϔϔϔϔϔϕ ϕPϕϕzҜ"ϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕҜ"۰N޶]ة?ϕϕϕϕϕϕקբ1ϕϕϕϕϕpϖϖϖј۰Oҝ"ϖϖϖϖϖϖϖϖϖϖϖϖј{ϖϖϖϖϖϖϖ۱O{ϖϖϖϖϖЗЗЗاˊˊ߸]ܱOܱOЗҘӞ#ЗЗЗЗЗЗЗЗЗЗЗЗЗЙЙЙmЙЙЙЙЙЙЙЙ߶ЙЙЙЙЙњњњә߹_߹_͋͋٨̊њњњњњњњњ̊Ԡ$њњњњћћћԡ%mћћћћћћћћћћݴPݴPm͋|ћћћћћћћћߺ_ݴPћћћћќќќќќר4ќќќќќќќќќќќќќќќڨڮCќќќќќќќݴQݴQќќќќҝҝҝҝҝ΋ҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝҝգ&`ҝҝҝҝҝҝݵQݵQҝҝҝҝҞҞҞҞҞΌҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞҞڰC}`դ&ۨ}ҞҞҞҞҞ`ݶRҞҞҞҞӟӟӟӟӟ۩ӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟӟ~۩ӟӟӟӟό֥'ӟӟӟӟӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠӠa֦(ӠӠӠӠӠӠӠӡӡӡӡӡܩ֧(ӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡ۳EܩӡӡӡӡӡԢԢԢԢԢbpԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢԢר)ٮ7ԢԢԢԢԣ@ԣԣԣԣש)ԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣԣݪԣԣԣԣ`դդդդդݪ߻Uդդդդդդդդդդդդդդդդդդդդդդդդդդդդդդ եեեեեڱ9եեեեեեեեեեեեեեեեեեեեեեեեեեեեեզ0էէէէէު̀էէէէէէէէէէէէէէէէէէէէէէէէէ̀ӎէէզ`֧֨֨֨֨٭,޸H֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨֨۲:٭,֧֨֩@֩֩֩֩֩d޹H֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩֩ٮ,π֩֩֩֩`֪תתתתתڝ޺Iתתתתתתתתתתתתתתתתתתתת޺I߫תתתתת֪ת׫׫ ׫ ׫ ׫ ׫ Ё׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ ׫ e׫ ׫ ׫ ׫ ׫ ׫ ת0׬ P׬ ׬ ׬ ׬ ׬ ׬ ۝߻J׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ׬ ܶ<׬ ׬ ׬ ׬ ׬ ׬ ׬ pح!ح!ح!ح!ح!ح!ح!tfح!ح!ح!ح!ح!ح!ح!ح!ح!ح!fтح!ح!ح!ح!ح!ح!ح!خ!خ"خ"خ"خ"خ"خ"ݸ=אтYYтא߽Kخ"خ"خ"خ"خ"خ"خ!د"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"YYٯ"ٯ"ٯ"ٯ"ٯ"ٯ"ٯ"د"د"ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#۵1vӃ޺>ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٰ#ٱ#Pٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#޻?ZZMٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#ٱ#pڲ$ڲ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڳ$ڲ$ڲ$ ڳ$@ڳ$ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڴ%ڳ$ڳ$Pڴ%0ڴ%ڴ%ڵ%ڵ%ڵ%ڵ%ڵ%ڵ%ڵ%ڵ%ڵ%ڵ%ڵ%ڵ%ڵ%ڵ%ڴ%ڴ%ڴ%@۵&@۵&۵&۵&۶&۶&۶&۶&۶&۶&۵&۵&۵&۵&P?????( @ ˃ ǀȂ Ȃ ȂȂ Ȃ ȂȂ Ȃ ǀ˃ ʇ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ Ʌ Ʌ Ʉ Ʉ Ʉ Ʉ Ʉ Ʉ ʇ Ɇ ̍Ɇ dɆ Ɇ ʆ ʆ Ʌ ȄȃǁǁȃȄɅ ʆ ʆ Ɇ Ɇ Ɇ d̍Ɇ ̋ Ɉ ʇ ʇ ʈ Ʌ̍߷lnj֬֬nj߷l̍Ʌʇ ɅɆɈ ̋ Ɇ Ւˉ ˉ ˊ ˉ ޳cݲ`Е#zץDȃˊ ՒɆ Қˋ ˋ ˋ ɇљ+Н֥C͐ǃǃ֥͐CНŇɇˋ ҚΑ̍̌̍ʇܰYăȅʈˋ ̌ ̌̌̌ ˋ ʈǁȄ̌̍Αː ̏d̏͏ˋܳ\ϕˋ̏͏̏̏̏̏̏̏͏ʈȄ͏̏̏dː ͏͏͎Ӟ0ʊ͏͏͏͏͏͏͏͏͏͏͏ˋʍԟ1͎͏͏͑Β͑ɇЗ͑Β͒͒͒͒͒͒͒͒Β͑қ'޵^تEɈΒΒ͑Β͑͑ ̐y̐ ΓΓΓΓΓΓΓΓΓΓΓʋҚ#͐ ̏~k͑ΓΒѓϓ٪CڬF͑ Γϓϔϔϔϔϔϕϔ̎ɇњw͑ ϕϔ̍ˋϕϕѓϖ͐fܳTר:Ҝ ͐̎̐͑͑Ҝ!ˍЗϗЗΓ їԠ)ϖЗϖИ͐ܮ٩Δ ИИИЗت>ϖИИЙϗȁϑث<߸\vΏک͒њЙЙЙЗ՟ϖљЙћќ͒ݷVΕЛККЙϘϖ Ε͔ʍҝКќќќ͓ϗ ќћҜҜИ ͒ҝҜҜҜҜҜҜҜҜҜҜݮ٬;ЙҝҜΔИ ҜҜҟӟћأћҞҟҟҟҟҟҟҟҟӟҞКϗЙ گ?iИ ҞћأћӟҟӠӠҞΈ٭8ӟӠӠӠӠӠӠӠӠӠӠӠӠӠҞԣ מΕܳHͅҞӠӠӢԡӡگ;юҟԡӡӡӡӡӡӡӡӡӡӡӡӡԢӡќhӠԡӢդԤԤЛМԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤԤϚМԤդդեԣ΃pԣեեեեեեեեեեեեեեեҟӟդէ֦զӠ եզ֦զզզզզզզզզզզզ֦դ~Ӣէ֩֩է߼Pҡ ֨֩֩֩֩֩֩֩֩֩֩֩֩֨ӡ ֕ե֩ت!֩dששեς֩֨שש֩֩֩֩֩֩שש֨֩ЂӢ է֩֩dت!ڥ$׫ ׬ ׬ Ԧ҆gӤ ֪׫׫ ׬ ׬ ׫ ׫֪Ӥ g҆Ԧ׬ ׬ ׫ ڥ$ܬ"ح!ح!ح!֩Uԉܵ6զէէզܵ6ԉU֩ح!ح!ح!ܬ"ר"&خ"د"د"׭թאאթ׭د"د"خ"&ר"ٯ"ٱ"ٱ#ٱ#ٰ"خ֩KۙۙK֩خٰ"ٱ#ٱ#ٱ"ٯ"׮"(ز#dڲ$ڲ$ٲ$ڲ$ٱ!ذد׮׮دذٱ!ڲ$ٲ$ڲ$ڲ$ز#d(׮"ܰ(ڳ$ڳ$ڴ%ڴ%ڴ%ڴ%ڳ%ڳ%ڴ%ڴ%ڴ%ڴ%ڳ$ڳ$ܰ(ر!۵%ڵ%۵%۵%۵%۵%۵%۵%ڵ%۵%ر!??(0 ɇ Ƀ (ȂNɃ Ʉ Ʌ Ʌ Ʉ Ƀ ȂNɃ (ɇ Ւˉ ă DŽ Ɇ Ʌ Ƀǁ}{{}ǁɃɅ Ȅ}yˊ Ւˋ Ɉ Gʈ Ȅ~~ј-w˕˕wј-~ǀŀGˋ ͒ˊ aˊɆɄܯ]ݲ`ȍܰ\ʇˋa͒̎̌ǦɅˋ ̕բ<ʉ~~ʉԠ9Ԩܲ_ǁ͎G̎ˍ ̏ˊ̎љ&ǃɆ̏͑͑̏ΐz~͐ˍ ͐̎ ʉʊɆ͐͑͐͐͐͐ˋϕˋ̍ ͐Γ(͐ Ɓpњ!ɉΓ͓͓͓Γ͒͐ Dž޷їӠ/޷bʊΒ͐(ΐ Nϕة٪ˌʋˌˋˋˌ̎̏ɇ߸fة@ʊɈΓˌΓϓNDŽuݳǀiۯKة=֥2њqΐɈњ͑ة=ة=Γ Зʌb޴ϑʌћЙΓˈ͑њќ͓ߵگD͔ЙҞԡ%֥/ت9ثAˎϘҟˎؤ͒Ҝӟ͑֟ɉҞњЙϗ ϖΔ̏ק0АќЙ ͒ڧΔӞӡИЎϘӡӠӠӠӠӠӠќ͓֦̐(ש0ʍ͆ЙӡԢҝݶKٯ;ќӡӡӡӡӡӡӡԣ ԣ!ҝҞ^ќ ԢԣNԣѝ ыЛԤԤԤԤԤԤԤԤԤեў Ϛϙث-Nե(եҞ sת'Ҟ ֦եեեեեեեեեҞ К۲<(֩ԥեҠ ӡ ֩֨֨֨֨֨֨֩ӡ Ӡ ٯ/Ӥի ׫!զ٭)خ(ӡզ׫$׬%׬%׫$զӡخ(ٰ.Ӣ ԥܵ;ת׬!Gخ#Ԧٰ,ܷ҇=Ԥ ҢҢԤ ܷ=҇ٱ,ԥح!׬!Gת Ҥح aٯ$֫֫}}֫֫ٯ$ح aӤح!ٱ"Gٲ%خ֪׫YݞݞY׫֪خٲ%ٱ"Gح!&خ"ٷ"ִ#ڳ%ڲ$ٲ"د֪֭ ֪ ֭دٲ"ڲ$ڳ%ִ#ٷ"خ"&ٱ#ڳ#(ڴ$N۶'۶)ܶ*ܶ*۶)۶'ڴ$Nڳ#(ٱ#o@@o(  ʊ Ȉ ͋ʈ 3ˇyyˇˊ3˅zɈ ̋ ʉ||ӛ5߸r߸rӛ5|{tД͓̌}٩N˖˖Ӥ޶hȄʍ ͐ǀăњ.ƀƁƁxoɇ ʈј3ۯTǃʋ͒ΓϔƁxۯSɇΓ3ˋ٬NԠ-ƃʉȇɉɇӞ3ʈқ(ʊЖΕףј̋nܳXʌˌ٬CΒ ͒՞ث<ܳMpʅ̌ʈȈːѕ|͐Δs͐ɊИΔ͓ʌڮ?jώłϒ~ΔќݷNΖӡӡӢԣќ͔ћ ܭݶJћ ֧"ѝ ث,ҟեԤԤԥզԢ͕́ːת%3ҟfϙԣ֧֨ ֨ ֧ӣК۳:͕3׬#ӡٚٯ,ҡҡҡҡٯ,֒џҡث#ٯ%ӥlؗؗlӥٯ&ϙ֬!ٳ&֩׫[؍؍[׫֩ٳ&֬!׭ ٲ ۲+ܶ,3۶,ذ׬׬ذ۶,ܶ,3۲+ٲ ׭ @@ rsrc-0.10.2/testdata/tmp.go000066400000000000000000000001101402267676100155060ustar00rootroot00000000000000package main import "fmt" func main() { fmt.Println("hello world") }