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 (C) MongoDB, Inc. 2017-present. // // Licensed under the Apache License, Version 2.0 (the "License"); you may // not use this file except in compliance with the License. You may obtain // a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 package bsonrw import ( "bytes" "errors" "fmt" "io" "math" "strconv" "unicode" "unicode/utf16" ) type jsonTokenType byte const ( jttBeginObject jsonTokenType = iota jttEndObject jttBeginArray jttEndArray jttColon jttComma jttInt32 jttInt64 jttDouble jttString jttBool jttNull jttEOF ) type jsonToken struct { t jsonTokenType v interface{} p int } type jsonScanner struct { r io.Reader buf []byte pos int lastReadErr error } // nextToken returns the next JSON token if one exists. A token is a character // of the JSON grammar, a number, a string, or a literal. func (js *jsonScanner) nextToken() (*jsonToken, error) { c, err := js.readNextByte() // keep reading until a non-space is encountered (break on read error or EOF) for isWhiteSpace(c) && err == nil { c, err = js.readNextByte() } if err == io.EOF { return &jsonToken{t: jttEOF}, nil } else if err != nil { return nil, err } // switch on the character switch c { case '{': return &jsonToken{t: jttBeginObject, v: byte('{'), p: js.pos - 1}, nil case '}': return &jsonToken{t: jttEndObject, v: byte('}'), p: js.pos - 1}, nil case '[': return &jsonToken{t: jttBeginArray, v: byte('['), p: js.pos - 1}, nil case ']': return &jsonToken{t: jttEndArray, v: byte(']'), p: js.pos - 1}, nil case ':': return &jsonToken{t: jttColon, v: byte(':'), p: js.pos - 1}, nil case ',': return &jsonToken{t: jttComma, v: byte(','), p: js.pos - 1}, nil case '"': // RFC-8259 only allows for double quotes (") not single (') return js.scanString() default: // check if it's a number if c == '-' || isDigit(c) { return js.scanNumber(c) } else if c == 't' || c == 'f' || c == 'n' { // maybe a literal return js.scanLiteral(c) } else { return nil, fmt.Errorf("invalid JSON input. Position: %d. Character: %c", js.pos-1, c) } } } // readNextByte attempts to read the next byte from the buffer. If the buffer // has been exhausted, this function calls readIntoBuf, thus refilling the // buffer and resetting the read position to 0 func (js *jsonScanner) readNextByte() (byte, error) { if js.pos >= len(js.buf) { err := js.readIntoBuf() if err != nil { return 0, err } } b := js.buf[js.pos] js.pos++ return b, nil } // readNNextBytes reads n bytes into dst, starting at offset func (js *jsonScanner) readNNextBytes(dst []byte, n, offset int) error { var err error for i := 0; i < n; i++ { dst[i+offset], err = js.readNextByte() if err != nil { return err } } return nil } // readIntoBuf reads up to 512 bytes from the scanner's io.Reader into the buffer func (js *jsonScanner) readIntoBuf() error { if js.lastReadErr != nil { js.buf = js.buf[:0] js.pos = 0 return js.lastReadErr } if cap(js.buf) == 0 { js.buf = make([]byte, 0, 512) } n, err := js.r.Read(js.buf[:cap(js.buf)]) if err != nil { js.lastReadErr = err if n > 0 { err = nil } } js.buf = js.buf[:n] js.pos = 0 return err } func isWhiteSpace(c byte) bool { return c == ' ' || c == '\t' || c == '\r' || c == '\n' } func isDigit(c byte) bool { return unicode.IsDigit(rune(c)) } func isValueTerminator(c byte) bool { return c == ',' || c == '}' || c == ']' || isWhiteSpace(c) } // getu4 decodes the 4-byte hex sequence from the beginning of s, returning the hex value as a rune, // or it returns -1. Note that the "\u" from the unicode escape sequence should not be present. // It is copied and lightly modified from the Go JSON decode function at // https://github.com/golang/go/blob/1b0a0316802b8048d69da49dc23c5a5ab08e8ae8/src/encoding/json/decode.go#L1169-L1188 func getu4(s []byte) rune { if len(s) < 4 { return -1 } var r rune for _, c := range s[:4] { switch { case '0' <= c && c <= '9': c = c - '0' case 'a' <= c && c <= 'f': c = c - 'a' + 10 case 'A' <= c && c <= 'F': c = c - 'A' + 10 default: return -1 } r = r*16 + rune(c) } return r } // scanString reads from an opening '"' to a closing '"' and handles escaped characters func (js *jsonScanner) scanString() (*jsonToken, error) { var b bytes.Buffer var c byte var err error p := js.pos - 1 for { c, err = js.readNextByte() if err != nil { if err == io.EOF { return nil, errors.New("end of input in JSON string") } return nil, err } evalNextChar: switch c { case '\\': c, err = js.readNextByte() if err != nil { if err == io.EOF { return nil, errors.New("end of input in JSON string") } return nil, err } evalNextEscapeChar: switch c { case '"', '\\', '/': b.WriteByte(c) case 'b': b.WriteByte('\b') case 'f': b.WriteByte('\f') case 'n': b.WriteByte('\n') case 'r': b.WriteByte('\r') case 't': b.WriteByte('\t') case 'u': us := make([]byte, 4) err = js.readNNextBytes(us, 4, 0) if err != nil { return nil, fmt.Errorf("invalid unicode sequence in JSON string: %s", us) } rn := getu4(us) // If the rune we just decoded is the high or low value of a possible surrogate pair, // try to decode the next sequence as the low value of a surrogate pair. We're // expecting the next sequence to be another Unicode escape sequence (e.g. "\uDD1E"), // but need to handle cases where the input is not a valid surrogate pair. // For more context on unicode surrogate pairs, see: // https://www.christianfscott.com/rust-chars-vs-go-runes/ // https://www.unicode.org/glossary/#high_surrogate_code_point if utf16.IsSurrogate(rn) { c, err = js.readNextByte() if err != nil { if err == io.EOF { return nil, errors.New("end of input in JSON string") } return nil, err } // If the next value isn't the beginning of a backslash escape sequence, write // the Unicode replacement character for the surrogate value and goto the // beginning of the next char eval block. if c != '\\' { b.WriteRune(unicode.ReplacementChar) goto evalNextChar } c, err = js.readNextByte() if err != nil { if err == io.EOF { return nil, errors.New("end of input in JSON string") } return nil, err } // If the next value isn't the beginning of a unicode escape sequence, write the // Unicode replacement character for the surrogate value and goto the beginning // of the next escape char eval block. if c != 'u' { b.WriteRune(unicode.ReplacementChar) goto evalNextEscapeChar } err = js.readNNextBytes(us, 4, 0) if err != nil { return nil, fmt.Errorf("invalid unicode sequence in JSON string: %s", us) } rn2 := getu4(us) // Try to decode the pair of runes as a utf16 surrogate pair. If that fails, write // the Unicode replacement character for the surrogate value and the 2nd decoded rune. if rnPair := utf16.DecodeRune(rn, rn2); rnPair != unicode.ReplacementChar { b.WriteRune(rnPair) } else { b.WriteRune(unicode.ReplacementChar) b.WriteRune(rn2) } break } b.WriteRune(rn) default: return nil, fmt.Errorf("invalid escape sequence in JSON string '\\%c'", c) } case '"': return &jsonToken{t: jttString, v: b.String(), p: p}, nil default: b.WriteByte(c) } } } // scanLiteral reads an unquoted sequence of characters and determines if it is one of // three valid JSON literals (true, false, null); if so, it returns the appropriate // jsonToken; otherwise, it returns an error func (js *jsonScanner) scanLiteral(first byte) (*jsonToken, error) { p := js.pos - 1 lit := make([]byte, 4) lit[0] = first err := js.readNNextBytes(lit, 3, 1) if err != nil { return nil, err } c5, err := js.readNextByte() if bytes.Equal([]byte("true"), lit) && (isValueTerminator(c5) || err == io.EOF) { js.pos = int(math.Max(0, float64(js.pos-1))) return &jsonToken{t: jttBool, v: true, p: p}, nil } else if bytes.Equal([]byte("null"), lit) && (isValueTerminator(c5) || err == io.EOF) { js.pos = int(math.Max(0, float64(js.pos-1))) return &jsonToken{t: jttNull, v: nil, p: p}, nil } else if bytes.Equal([]byte("fals"), lit) { if c5 == 'e' { c5, err = js.readNextByte() if isValueTerminator(c5) || err == io.EOF { js.pos = int(math.Max(0, float64(js.pos-1))) return &jsonToken{t: jttBool, v: false, p: p}, nil } } } return nil, fmt.Errorf("invalid JSON literal. Position: %d, literal: %s", p, lit) } type numberScanState byte const ( nssSawLeadingMinus numberScanState = iota nssSawLeadingZero nssSawIntegerDigits nssSawDecimalPoint nssSawFractionDigits nssSawExponentLetter nssSawExponentSign nssSawExponentDigits nssDone nssInvalid ) // scanNumber reads a JSON number (according to RFC-8259) func (js *jsonScanner) scanNumber(first byte) (*jsonToken, error) { var b bytes.Buffer var s numberScanState var c byte var err error t := jttInt64 // assume it's an int64 until the type can be determined start := js.pos - 1 b.WriteByte(first) switch first { case '-': s = nssSawLeadingMinus case '0': s = nssSawLeadingZero default: s = nssSawIntegerDigits } for { c, err = js.readNextByte() if err != nil && err != io.EOF { return nil, err } switch s { case nssSawLeadingMinus: switch c { case '0': s = nssSawLeadingZero b.WriteByte(c) default: if isDigit(c) { s = nssSawIntegerDigits b.WriteByte(c) } else { s = nssInvalid } } case nssSawLeadingZero: switch c { case '.': s = nssSawDecimalPoint b.WriteByte(c) case 'e', 'E': s = nssSawExponentLetter b.WriteByte(c) case '}', ']', ',': s = nssDone default: if isWhiteSpace(c) || err == io.EOF { s = nssDone } else { s = nssInvalid } } case nssSawIntegerDigits: switch c { case '.': s = nssSawDecimalPoint b.WriteByte(c) case 'e', 'E': s = nssSawExponentLetter b.WriteByte(c) case '}', ']', ',': s = nssDone default: if isWhiteSpace(c) || err == io.EOF { s = nssDone } else if isDigit(c) { s = nssSawIntegerDigits b.WriteByte(c) } else { s = nssInvalid } } case nssSawDecimalPoint: t = jttDouble if isDigit(c) { s = nssSawFractionDigits b.WriteByte(c) } else { s = nssInvalid } case nssSawFractionDigits: switch c { case 'e', 'E': s = nssSawExponentLetter b.WriteByte(c) case '}', ']', ',': s = nssDone default: if isWhiteSpace(c) || err == io.EOF { s = nssDone } else if isDigit(c) { s = nssSawFractionDigits b.WriteByte(c) } else { s = nssInvalid } } case nssSawExponentLetter: t = jttDouble switch c { case '+', '-': s = nssSawExponentSign b.WriteByte(c) default: if isDigit(c) { s = nssSawExponentDigits b.WriteByte(c) } else { s = nssInvalid } } case nssSawExponentSign: if isDigit(c) { s = nssSawExponentDigits b.WriteByte(c) } else { s = nssInvalid } case nssSawExponentDigits: switch c { case '}', ']', ',': s = nssDone default: if isWhiteSpace(c) || err == io.EOF { s = nssDone } else if isDigit(c) { s = nssSawExponentDigits b.WriteByte(c) } else { s = nssInvalid } } } switch s { case nssInvalid: return nil, fmt.Errorf("invalid JSON number. Position: %d", start) case nssDone: js.pos = int(math.Max(0, float64(js.pos-1))) if t != jttDouble { v, err := strconv.ParseInt(b.String(), 10, 64) if err == nil { if v < math.MinInt32 || v > math.MaxInt32 { return &jsonToken{t: jttInt64, v: v, p: start}, nil } return &jsonToken{t: jttInt32, v: int32(v), p: start}, nil } } v, err := strconv.ParseFloat(b.String(), 64) if err != nil { return nil, err } return &jsonToken{t: jttDouble, v: v, p: start}, nil } } }