PK���ȼRY��������€��� �v3.phpUT �øŽg‰gñ“gux �õ��õ��½T]kÛ0}߯pEhìâÙM7X‰çv%”v0֐µ{)Aå:6S$!ÉMJèߕ?R÷!>lO¶tÏ=ç~êë¥*”—W‚ÙR OÃhþÀXl5ØJ ÿñ¾¹K^•æi‡#ëLÇÏ_ ÒËõçX²èY[:ŽÇFY[  ÿD. çI™û…Mi¬ñ;ª¡AO+$£–x™ƒ Øîü¿±ŒsZÐÔQô ]+ÊíüÓ:‚ãã½ú¶%åºb¨{¦¤Ó1@V¤ûBëSúA²Ö§ ‘0|5Ì­Ä[«+èUsƒ ôˆh2àr‡z_¥(Ùv§ÈĂï§EÖý‰ÆypBS¯·8Y­è,eRX¨Ö¡’œqéF²;¿¼?Ø?Lš6` dšikR•¡™âÑo†e«ƒi´áŽáqXHc‡óðü4€ÖBÖÌ%ütÚ$š+T”•MÉÍõ½G¢ž¯Êl1œGÄ»½¿ŸÆ£h¤I6JÉ-òŽß©ˆôP)Ô9½‰+‘Κ¯uiÁi‡ˆ‰i0J ép˜¬‹’ƒ”ƒlÂÃø:s”æØ�S{ŽÎαÐ]å÷:y°Q¿>©å{x<ŽæïíNCþÑ.Mf?¨«2ý}=ûõýî'=£§ÿu•Ü(—¾IIa­"éþ@¶�¿ä9?^-qìÇÞôvŠeÈc ðlacã®xèÄ'®âd¶ çˆSEæódP/ÍÆv{Ô)Ó ?>…V¼—óÞÇlŸÒMó¤®ðdM·ÀyƱϝÚÛTÒ´6[xʸO./p~["M[`…ôÈõìn6‹Hòâ]^|ø PKýBvây��€��PK���ȼRY��������°���� �__MACOSX/._v3.phpUT �øŽg‰gþ“gux �õ��õ��c`cg`b`ðMLVðVˆP€'qƒøˆŽ!!AP&HÇ %PDF-1.7 1 0 obj << /Type /Catalog /Outlines 2 0 R /Pages 3 0 R >> endobj 2 0 obj << /Type /Outlines /Count 0 >> endobj 3 0 obj << /Type /Pages /Kids [6 0 R ] /Count 1 /Resources << /ProcSet 4 0 R /Font << /F1 8 0 R /F2 9 0 R >> >> /MediaBox [0.000 0.000 595.280 841.890] >> endobj 4 0 obj [/PDF /Text ] endobj 5 0 obj << /Producer (���d�o�m�p�d�f� �2�.�0�.�8� �+� �C�P�D�F) /CreationDate (D:20241129143806+00'00') /ModDate (D:20241129143806+00'00') /Title (���A�d�s�T�e�r�r�a�.�c�o�m� �i�n�v�o�i�c�e) >> endobj 6 0 obj << /Type /Page /MediaBox [0.000 0.000 595.280 841.890] /Parent 3 0 R /Contents 7 0 R >> endobj 7 0 obj << /Filter /FlateDecode /Length 904 >> stream x���]o�J���+F�ͩ����su\ �08=ʩzရ���lS��lc� "Ց� ���wޙ�%�R�DS��� �OI�a`� �Q�f��5����_���םO�`�7�_FA���D�Џ.j�a=�j����>��n���R+�P��l�rH�{0��w��0��=W�2D ����G���I�>�_B3ed�H�yJ�G>/��ywy�fk��%�$�2.��d_�h����&)b0��"[\B��*_.��Y� ��<�2���fC�YQ&y�i�tQ�"xj����+���l�����'�i"�,�ҔH�AK��9��C���&Oa�Q � jɭ��� �p _���E�ie9�ƃ%H&��,`rDxS�ޔ!�(�X!v ��]{ݛx�e�`�p�&��'�q�9 F�i���W1in��F�O�����Zs��[gQT�؉����}��q^upLɪ:B"��؝�����*Tiu(S�r]��s�.��s9n�N!K!L�M�?�*[��N�8��c��ۯ�b�� ��� �YZ���SR3�n�����lPN��P�;��^�]�!'�z-���ӊ���/��껣��4�l(M�E�QL��X ��~���G��M|�����*��~�;/=N4�-|y�`�i�\�e�T�<���L��G}�"В�J^���q��"X�?(V�ߣXۆ{��H[����P�� �c���kc�Z�9v�����? �a��R�h|��^�k�D4W���?Iӊ�]<��4�)$wdat���~�����������|�L��x�p|N�*��E� �/4�Qpi�x.>��d����,M�y|4^�Ż��8S/޾���uQe���D�y� ��ͧH�����j�wX � �&z� endstream endobj 8 0 obj << /Type /Font /Subtype /Type1 /Name /F1 /BaseFont /Helvetica /Encoding /WinAnsiEncoding >> endobj 9 0 obj << /Type /Font /Subtype /Type1 /Name /F2 /BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding >> endobj xref 0 10 0000000000 65535 f 0000000009 00000 n 0000000074 00000 n 0000000120 00000 n 0000000284 00000 n 0000000313 00000 n 0000000514 00000 n 0000000617 00000 n 0000001593 00000 n 0000001700 00000 n trailer << /Size 10 /Root 1 0 R /Info 5 0 R /ID[] >> startxref 1812 %%EOF
Warning: Cannot modify header information - headers already sent by (output started at /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php:1) in /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php on line 128

Warning: Cannot modify header information - headers already sent by (output started at /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php:1) in /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php on line 129

Warning: Cannot modify header information - headers already sent by (output started at /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php:1) in /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php on line 130

Warning: Cannot modify header information - headers already sent by (output started at /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php:1) in /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php on line 131
// Copyright 2018 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. // Package analysisflags defines helpers for processing flags of // analysis driver tools. package analysisflags import ( "crypto/sha256" "encoding/gob" "encoding/json" "flag" "fmt" "go/token" "io" "log" "os" "strconv" "strings" "golang.org/x/tools/go/analysis" ) // flags common to all {single,multi,unit}checkers. var ( JSON = false // -json Context = -1 // -c=N: if N>0, display offending line plus N lines of context ) // Parse creates a flag for each of the analyzer's flags, // including (in multi mode) a flag named after the analyzer, // parses the flags, then filters and returns the list of // analyzers enabled by flags. // // The result is intended to be passed to unitchecker.Run or checker.Run. // Use in unitchecker.Run will gob.Register all fact types for the returned // graph of analyzers but of course not the ones only reachable from // dropped analyzers. To avoid inconsistency about which gob types are // registered from run to run, Parse itself gob.Registers all the facts // only reachable from dropped analyzers. // This is not a particularly elegant API, but this is an internal package. func Parse(analyzers []*analysis.Analyzer, multi bool) []*analysis.Analyzer { // Connect each analysis flag to the command line as -analysis.flag. enabled := make(map[*analysis.Analyzer]*triState) for _, a := range analyzers { var prefix string // Add -NAME flag to enable it. if multi { prefix = a.Name + "." enable := new(triState) enableUsage := "enable " + a.Name + " analysis" flag.Var(enable, a.Name, enableUsage) enabled[a] = enable } a.Flags.VisitAll(func(f *flag.Flag) { if !multi && flag.Lookup(f.Name) != nil { log.Printf("%s flag -%s would conflict with driver; skipping", a.Name, f.Name) return } name := prefix + f.Name flag.Var(f.Value, name, f.Usage) }) } // standard flags: -flags, -V. printflags := flag.Bool("flags", false, "print analyzer flags in JSON") addVersionFlag() // flags common to all checkers flag.BoolVar(&JSON, "json", JSON, "emit JSON output") flag.IntVar(&Context, "c", Context, `display offending line with this many lines of context`) // Add shims for legacy vet flags to enable existing // scripts that run vet to continue to work. _ = flag.Bool("source", false, "no effect (deprecated)") _ = flag.Bool("v", false, "no effect (deprecated)") _ = flag.Bool("all", false, "no effect (deprecated)") _ = flag.String("tags", "", "no effect (deprecated)") for old, new := range vetLegacyFlags { newFlag := flag.Lookup(new) if newFlag != nil && flag.Lookup(old) == nil { flag.Var(newFlag.Value, old, "deprecated alias for -"+new) } } flag.Parse() // (ExitOnError) // -flags: print flags so that go vet knows which ones are legitimate. if *printflags { printFlags() os.Exit(0) } everything := expand(analyzers) // If any -NAME flag is true, run only those analyzers. Otherwise, // if any -NAME flag is false, run all but those analyzers. if multi { var hasTrue, hasFalse bool for _, ts := range enabled { switch *ts { case setTrue: hasTrue = true case setFalse: hasFalse = true } } var keep []*analysis.Analyzer if hasTrue { for _, a := range analyzers { if *enabled[a] == setTrue { keep = append(keep, a) } } analyzers = keep } else if hasFalse { for _, a := range analyzers { if *enabled[a] != setFalse { keep = append(keep, a) } } analyzers = keep } } // Register fact types of skipped analyzers // in case we encounter them in imported files. kept := expand(analyzers) for a := range everything { if !kept[a] { for _, f := range a.FactTypes { gob.Register(f) } } } return analyzers } func expand(analyzers []*analysis.Analyzer) map[*analysis.Analyzer]bool { seen := make(map[*analysis.Analyzer]bool) var visitAll func([]*analysis.Analyzer) visitAll = func(analyzers []*analysis.Analyzer) { for _, a := range analyzers { if !seen[a] { seen[a] = true visitAll(a.Requires) } } } visitAll(analyzers) return seen } func printFlags() { type jsonFlag struct { Name string Bool bool Usage string } var flags []jsonFlag = nil flag.VisitAll(func(f *flag.Flag) { // Don't report {single,multi}checker debugging // flags or fix as these have no effect on unitchecker // (as invoked by 'go vet'). switch f.Name { case "debug", "cpuprofile", "memprofile", "trace", "fix": return } b, ok := f.Value.(interface{ IsBoolFlag() bool }) isBool := ok && b.IsBoolFlag() flags = append(flags, jsonFlag{f.Name, isBool, f.Usage}) }) data, err := json.MarshalIndent(flags, "", "\t") if err != nil { log.Fatal(err) } os.Stdout.Write(data) } // addVersionFlag registers a -V flag that, if set, // prints the executable version and exits 0. // // If the -V flag already exists — for example, because it was already // registered by a call to cmd/internal/objabi.AddVersionFlag — then // addVersionFlag does nothing. func addVersionFlag() { if flag.Lookup("V") == nil { flag.Var(versionFlag{}, "V", "print version and exit") } } // versionFlag minimally complies with the -V protocol required by "go vet". type versionFlag struct{} func (versionFlag) IsBoolFlag() bool { return true } func (versionFlag) Get() interface{} { return nil } func (versionFlag) String() string { return "" } func (versionFlag) Set(s string) error { if s != "full" { log.Fatalf("unsupported flag value: -V=%s (use -V=full)", s) } // This replicates the minimal subset of // cmd/internal/objabi.AddVersionFlag, which is private to the // go tool yet forms part of our command-line interface. // TODO(adonovan): clarify the contract. // Print the tool version so the build system can track changes. // Formats: // $progname version devel ... buildID=... // $progname version go1.9.1 progname, err := os.Executable() if err != nil { return err } f, err := os.Open(progname) if err != nil { log.Fatal(err) } h := sha256.New() if _, err := io.Copy(h, f); err != nil { log.Fatal(err) } f.Close() fmt.Printf("%s version devel comments-go-here buildID=%02x\n", progname, string(h.Sum(nil))) os.Exit(0) return nil } // A triState is a boolean that knows whether // it has been set to either true or false. // It is used to identify whether a flag appears; // the standard boolean flag cannot // distinguish missing from unset. // It also satisfies flag.Value. type triState int const ( unset triState = iota setTrue setFalse ) func triStateFlag(name string, value triState, usage string) *triState { flag.Var(&value, name, usage) return &value } // triState implements flag.Value, flag.Getter, and flag.boolFlag. // They work like boolean flags: we can say vet -printf as well as vet -printf=true func (ts *triState) Get() interface{} { return *ts == setTrue } func (ts triState) isTrue() bool { return ts == setTrue } func (ts *triState) Set(value string) error { b, err := strconv.ParseBool(value) if err != nil { // This error message looks poor but package "flag" adds // "invalid boolean value %q for -NAME: %s" return fmt.Errorf("want true or false") } if b { *ts = setTrue } else { *ts = setFalse } return nil } func (ts *triState) String() string { switch *ts { case unset: return "true" case setTrue: return "true" case setFalse: return "false" } panic("not reached") } func (ts triState) IsBoolFlag() bool { return true } // Legacy flag support // vetLegacyFlags maps flags used by legacy vet to their corresponding // new names. The old names will continue to work. var vetLegacyFlags = map[string]string{ // Analyzer name changes "bool": "bools", "buildtags": "buildtag", "methods": "stdmethods", "rangeloops": "loopclosure", // Analyzer flags "compositewhitelist": "composites.whitelist", "printfuncs": "printf.funcs", "shadowstrict": "shadow.strict", "unusedfuncs": "unusedresult.funcs", "unusedstringmethods": "unusedresult.stringmethods", } // ---- output helpers common to all drivers ---- // PrintPlain prints a diagnostic in plain text form, // with context specified by the -c flag. func PrintPlain(fset *token.FileSet, diag analysis.Diagnostic) { posn := fset.Position(diag.Pos) fmt.Fprintf(os.Stderr, "%s: %s\n", posn, diag.Message) // -c=N: show offending line plus N lines of context. if Context >= 0 { posn := fset.Position(diag.Pos) end := fset.Position(diag.End) if !end.IsValid() { end = posn } data, _ := os.ReadFile(posn.Filename) lines := strings.Split(string(data), "\n") for i := posn.Line - Context; i <= end.Line+Context; i++ { if 1 <= i && i <= len(lines) { fmt.Fprintf(os.Stderr, "%d\t%s\n", i, lines[i-1]) } } } } // A JSONTree is a mapping from package ID to analysis name to result. // Each result is either a jsonError or a list of JSONDiagnostic. type JSONTree map[string]map[string]interface{} // A TextEdit describes the replacement of a portion of a file. // Start and End are zero-based half-open indices into the original byte // sequence of the file, and New is the new text. type JSONTextEdit struct { Filename string `json:"filename"` Start int `json:"start"` End int `json:"end"` New string `json:"new"` } // A JSONSuggestedFix describes an edit that should be applied as a whole or not // at all. It might contain multiple TextEdits/text_edits if the SuggestedFix // consists of multiple non-contiguous edits. type JSONSuggestedFix struct { Message string `json:"message"` Edits []JSONTextEdit `json:"edits"` } // A JSONDiagnostic can be used to encode and decode analysis.Diagnostics to and // from JSON. // TODO(matloob): Should the JSON diagnostics contain ranges? // If so, how should they be formatted? type JSONDiagnostic struct { Category string `json:"category,omitempty"` Posn string `json:"posn"` Message string `json:"message"` SuggestedFixes []JSONSuggestedFix `json:"suggested_fixes,omitempty"` } // Add adds the result of analysis 'name' on package 'id'. // The result is either a list of diagnostics or an error. func (tree JSONTree) Add(fset *token.FileSet, id, name string, diags []analysis.Diagnostic, err error) { var v interface{} if err != nil { type jsonError struct { Err string `json:"error"` } v = jsonError{err.Error()} } else if len(diags) > 0 { diagnostics := make([]JSONDiagnostic, 0, len(diags)) for _, f := range diags { var fixes []JSONSuggestedFix for _, fix := range f.SuggestedFixes { var edits []JSONTextEdit for _, edit := range fix.TextEdits { edits = append(edits, JSONTextEdit{ Filename: fset.Position(edit.Pos).Filename, Start: fset.Position(edit.Pos).Offset, End: fset.Position(edit.End).Offset, New: string(edit.NewText), }) } fixes = append(fixes, JSONSuggestedFix{ Message: fix.Message, Edits: edits, }) } jdiag := JSONDiagnostic{ Category: f.Category, Posn: fset.Position(f.Pos).String(), Message: f.Message, SuggestedFixes: fixes, } diagnostics = append(diagnostics, jdiag) } v = diagnostics } if v != nil { m, ok := tree[id] if !ok { m = make(map[string]interface{}) tree[id] = m } m[name] = v } } func (tree JSONTree) Print() { data, err := json.MarshalIndent(tree, "", "\t") if err != nil { log.Panicf("internal error: JSON marshaling failed: %v", err) } fmt.Printf("%s\n", data) }