Uơ*{qݍcb;hb'у[-?a:H!]י}DvRWɍŹx#8Czs#}2[atBo C~۶Z5̟to*xVo2"Ė@g'<Zmr< 47+H H}ϩjvψ50_ʡ'Ad%|݋Ґ^cg6F]Jq֊$  hX/shGYꥥnlN[q]|zL 3MzscX&!|P, ?r6e:~y_:JF4h^.9.J X xa(w/Q@}$ -k U=!kI8vcVOC`4ay|Zci(&(^z[MPx. ێF q.H"yҹ\LP9P^[7R;{ʨ<ȏ+|m.PhZtX #ٝW>ȩW-G/3W3lO\w)ָH폄6˨qM!`_e j_fz8c (7m2̞莛":F /XU?d͑,O4RRR)R`[:z9Cus0f_b{#j㶭V8a~2s{8r`ũ>f'˙+ZW~L]0XRGщ VS%*YwW8 \M2zd#[QvYK[Lđ,_Wg)o+S7)}8 }}+`#SM} R/i$ldAQ$-NbX??H!x-Xq7оebF8}&T uTsR'K)qu(߶5uG],:c)˛F7! LzH#y[&qBWi$6puSrj]R^c^-SqM4'bqYSM&ݴH96tx0"ٷh&Mѷ3`=/Iʬ,Y@ܢؑt%3-|kE:Hߵ1,I9l[DvaeyWRXg vߝel ߵIBj 9e1K?a r{[l(v⤟\\DN1EΟM'Av+!얩dDcv:/vX|RtGl7 T$gW!htQUGX~dԶ^B{V=`6Ž0+h'+p^a$AbC-KW#Фx\'A'@&Gv+r~gi`~A;[ځؽœ+-^7JJl4",睇6 ᔤHjzL(D[] kp4wMrMb!E2؞P+;~EO}WEHZ#5e_S$4#`>ЮvB1VU6NgSG=ٽbVDM] X9Udx)^y mI5,j3>Ix90Ǔ˜ p%f?WwzRkR&w`*^/f3`'.!kBIHg0o]:kS-F1E ^+JRG")=|?Qvu _gVb,}\ӕ&T;gQ|;ucEυ,߲r1 Z~fG9OYJ]dzZ͜Mzzv78 xDg 70wgfw*:T7%Pa²C1S' fJ\jCzpWfy3#X<4n<=X;9|~#]Z!B JF=4v\:U#6kA =ϏW*_s6Ѩö&ߑq{8)!^x?a!{rFo`p%}ŧ݄h B ,`S5JH:J*2D?LE)4/B[[Ԕk? p)_^FpR%ny{4I}诧-NH,7jiҏ'~lnpN$i)d9Sެcck;h:%YbfÑA-h1Z0אe=EC[䠛ף,X,Զ9ueMdppu0aJF1xl2*[cdCҡ*zb(Lm\618K:PB!!`e@#B9HO j)0 p+fFsW#XLo|JY|4Mcw ^ϢzKڒʕwR bt3VN-rt1 YN·p<>p3Cy @ j8(F^)9nOavb$tEG>̀I #(<]Pv[^T/^ I{‹Ȋ_kxqmDcg vߝel ߵIfq9z#+ BsvkJm5uc ^T[3u&ԛHv|@n El% H՗_>]7s?EqS *W\T^LC+-wM."k"# &%dOS;.|m!DZvuܨ",lŪp,"lU98[zsI`e;?Hx"GK݂jA` <~ \ !c|כ Pt.6A\ګtrShx90Ǔ˜ p%fCAV9 5Jx7t%5^IlU&Lqgm{'G$:6H'2!)̙Y5UO^Bc_x"xOB%/)ecB Fm٣߶] ؙwkYPpBRV!m!+,3{pk MZ&Ҡԣ}cÁe path, e.g. * the front controller, this difference becomes significant. It's the task * of the user to handle both "" and "/". * * The value returned MUST be percent-encoded, but MUST NOT double-encode * any characters. To determine what characters to encode, please refer to * RFC 3986, Sections 2 and 3.3. * * As an example, if the value should include a slash ("/") not intended as * delimiter between path segments, that value MUST be passed in encoded * form (e.g., "%2F") to the instance. * * @see https://tools.ietf.org/html/rfc3986#section-2 * @see https://tools.ietf.org/html/rfc3986#section-3.3 * @return string The URI path. */ public function getPath(); /** * Retrieve the query string of the URI. * * If no query string is present, this method MUST return an empty string. * * The leading "?" character is not part of the query and MUST NOT be * added. * * The value returned MUST be percent-encoded, but MUST NOT double-encode * any characters. To determine what characters to encode, please refer to * RFC 3986, Sections 2 and 3.4. * * As an example, if a value in a key/value pair of the query string should * include an ampersand ("&") not intended as a delimiter between values, * that value MUST be passed in encoded form (e.g., "%26") to the instance. * * @see https://tools.ietf.org/html/rfc3986#section-2 * @see https://tools.ietf.org/html/rfc3986#section-3.4 * @return string The URI query string. */ public function getQuery(); /** * Retrieve the fragment component of the URI. * * If no fragment is present, this method MUST return an empty string. * * The leading "#" character is not part of the fragment and MUST NOT be * added. * * The value returned MUST be percent-encoded, but MUST NOT double-encode * any characters. To determine what characters to encode, please refer to * RFC 3986, Sections 2 and 3.5. * * @see https://tools.ietf.org/html/rfc3986#section-2 * @see https://tools.ietf.org/html/rfc3986#section-3.5 * @return string The URI fragment. */ public function getFragment(); /** * Return an instance with the specified scheme. * * This method MUST retain the state of the current instance, and return * an instance that contains the specified scheme. * * Implementations MUST support the schemes "http" and "https" case * insensitively, and MAY accommodate other schemes if required. * * An empty scheme is equivalent to removing the scheme. * * @param string $scheme The scheme to use with the new instance. * @return static A new instance with the specified scheme. * @throws \InvalidArgumentException for invalid or unsupported schemes. */ public function withScheme($scheme); /** * Return an instance with the specified user information. * * This method MUST retain the state of the current instance, and return * an instance that contains the specified user information. * * Password is optional, but the user information MUST include the * user; an empty string for the user is equivalent to removing user * information. * * @param string $user The user name to use for authority. * @param null|string $password The password associated with $user. * @return static A new instance with the specified user information. */ public function withUserInfo($user, $password = null); /** * Return an instance with the specified host. * * This method MUST retain the state of the current instance, and return * an instance that contains the specified host. * * An empty host value is equivalent to removing the host. * * @param string $host The hostname to use with the new instance. * @return static A new instance with the specified host. * @throws \InvalidArgumentException for invalid hostnames. */ public function withHost($host); /** * Return an instance with the specified port. * * This method MUST retain the state of the current instance, and return * an instance that contains the specified port. * * Implementations MUST raise an exception for ports outside the * established TCP and UDP port ranges. * * A null value provided for the port is equivalent to removing the port * information. * * @param null|int $port The port to use with the new instance; a null value * removes the port information. * @return static A new instance with the specified port. * @throws \InvalidArgumentException for invalid ports. */ public function withPort($port); /** * Return an instance with the specified path. * * This method MUST retain the state of the current instance, and return * an instance that contains the specified path. * * The path can either be empty or absolute (starting with a slash) or * rootless (not starting with a slash). Implementations MUST support all * three syntaxes. * * If the path is intended to be domain-relative rather than path relative then * it must begin with a slash ("/"). Paths not starting with a slash ("/") * are assumed to be relative to some base path known to the application or * consumer. * * Users can provide both encoded and decoded path characters. * Implementations ensure the correct encoding as outlined in getPath(). * * @param string $path The path to use with the new instance. * @return static A new instance with the specified path. * @throws \InvalidArgumentException for invalid paths. */ public function withPath($path); /** * Return an instance with the specified query string. * * This method MUST retain the state of the current instance, and return * an instance that contains the specified query string. * * Users can provide both encoded and decoded query characters. * Implementations ensure the correct encoding as outlined in getQuery(). * * An empty query string value is equivalent to removing the query string. * * @param string $query The query string to use with the new instance. * @return static A new instance with the specified query string. * @throws \InvalidArgumentException for invalid query strings. */ public function withQuery($query); /** * Return an instance with the specified URI fragment. * * This method MUST retain the state of the current instance, and return * an instance that contains the specified URI fragment. * * Users can provide both encoded and decoded fragment characters. * Implementations ensure the correct encoding as outlined in getFragment(). * * An empty fragment value is equivalent to removing the fragment. * * @param string $fragment The fragment to use with the new instance. * @return static A new instance with the specified fragment. */ public function withFragment($fragment); /** * Return the string representation as a URI reference. * * Depending on which components of the URI are present, the resulting * string is either a full URI or relative reference according to RFC 3986, * Section 4.1. The method concatenates the various components of the URI, * using the appropriate delimiters: * * - If a scheme is present, it MUST be suffixed by ":". * - If an authority is present, it MUST be prefixed by "//". * - The path can be concatenated without delimiters. But there are two * cases where the path has to be adjusted to make the URI reference * valid as PHP does not allow to throw an exception in __toString(): * - If the path is rootless and an authority is present, the path MUST * be prefixed by "/". * - If the path is starting with more than one "/" and no authority is * present, the starting slashes MUST be reduced to one. * - If a query is present, it MUST be prefixed by "?". * - If a fragment is present, it MUST be prefixed by "#". * * @see http://tools.ietf.org/html/rfc3986#section-4.1 * @return string */ public function __toString(); }