Generating Dynamic Adaptive Streaming over HTTP Traffic...
Transcript of Generating Dynamic Adaptive Streaming over HTTP Traffic...
-
Generating Dynamic Adaptive Streaming overHTTP Traffic Flows with TEACUP Testbed
Jonathan Kua, Grenville ArmitageCentre for Advanced Internet Architectures, Technical Report 161216A
Swinburne University of TechnologyMelbourne, Australia
[email protected], [email protected]
AbstractβHTTP-based video streaming has becomepopular in recent years, with Dynamic Adaptive Streamingover HTTP (DASH) emerging as an ISO/IEC standardfor live and on-demand video streaming services. Netflixand YouTube employ DASH-like streaming strategies andaccount for more than 50% of North American traffic in2015, representing a significant source of Internet traffic.Consumer video streams are most likely to be bottleneckedby last-mile ISP links and impacted by emerging ActiveQueue Management (AQM) schemes for counteractingbufferbloat. However, the interactions between differentTCP algorithms, DASH traffic (within a mix of other typ-ical traffic) and the underlying AQMs are not well under-stood. Experiments in a controlled testbed allow sheddingmore light on this issue. We extended βTCP ExperimentAutomation Controlled Using Pythonβ (TEACUP) to usedash.js and VLC clients for running repeatable DASHexperiment trials with different TCP algorithms over arange of emulated network conditions, bottleneck ratelimits and AQMs.
Index Termsβvideo streaming, DASH, HTTP, TCP,TEACUP
I. INTRODUCTION
Transmission Control Protocol (TCP) has been thedominant transport layer protocol that carries the bulk ofall traffic across the Internet for many decades. SeveralTCP congestion control algorithms were developed forperformance optimisation over the last few decades.Although TCP was traditionally used for reliable bulktransfers, recently it is also becoming the protocol ofchoice for multimedia streaming applications β Dy-namic Adaptive Streaming over HTTP (DASH) hasrecently emerged as an International Organisation forStandardisation/International Electrotechnical Commis-sion (ISO/IEC) standard for live and on-demand stream-ing [1]. Netflix and YouTube employ DASH-like videostreaming strategies [2], [3] and account for more than50% of North American traffic in 2015 [4], representing
a significant source of Internet traffic. Consumer videostreams are most likely to be bottlenecked by last-mileISP links and impacted by emerging Active Queue Man-agement (AQM) schemes such as Proportional Integralcontroller Enhanced (PIE) [5], Controlled Delay (CoDel)[6] and FlowQueue-Controlled Delay (FQ-CoDel) [7]for counteracting bufferbloat. However, the interactionsbetween different TCP algorithms, DASH traffic (withina mix of other typical traffic) and the underlying AQMsare not well understood. Experiments in a controlledtestbed allow shedding more light on this issue. Hence,we enhanced βTCP Experiment Automation ControlledUsing Pythonβ (TEACUP)1to run repeatable DASH ex-periments with industry-grade clients.
Based on a configuration file and utilising PythonFabric [8], these enhancements allow TEACUP to per-form a series of DASH experiments with different traf-fic mixes, different bottlenecks (bandwidths, queuingschemes, buffer size), different emulated network paths(path delays, packet loss rates), and different host set-tings (TCP congestion control algorithm and systemsettings). For each experiment permutation, TEACUPautomatically collects relevant information for post-analysis , such as tcpdump files, SIFTR and Web10Glogs. More details on the design and implementation ofTEACUP-specific testbed can be found in [9]. TEACUPalso provides a number of native data analysis tasks [10]and data visualisation functions with TEAPLOT [11].
This technical report describes the enhancementsmade to TEACUP for generating DASH traffic flows.The rest of the report is organised as follows. Section IIpresents an overview of DASH architecture and industrystandardisation. Section III describes the enhancements
1The TEACUP project originated at CAIA (http://caia.swin.edu.au/tools/teacup), and from version 1.0 the source code is freely availableon SourceForge at http://sourceforge.net/projects/teacup
CAIA Technical Report 161216A December 2016 page 1 of 12
mailto:[email protected]:[email protected]://caia.swin.edu.au/tools/teacuphttp://caia.swin.edu.au/tools/teacuphttp://sourceforge.net/projects/teacup
-
made to TEACUP for DASH support and provides patch-ing/usage instructions. Section III presents the testbedsetup and test conditions for an experiment trial. SectionIV presents illustrative DASH experiment results. Sec-tion V provides concluding remarks and outlines futurework.
II. BACKGROUND
This section presents the overall DASH architectureand its applications, the benefits of using HTTP and thegeneral principles driving the rate adaptation algorithms.
A. DASH Architecture Overview
In DASH systems [1] (summarised in Figure 1), videocontent is encoded into multiple versions at differentdiscrete bitrates. Each encoded video is then fragmentedinto small video segments or chunks, each containinga few seconds of video. Chunks from one bitrate arealigned in the video time line to chunks from otherbitrates so that the client can smoothly switch bitrates,if necessary, at the chunk boundary. Content informationsuch as video profiles, metadata, mimeType [12], [13],codecs, byte-ranges, server IP addresses, and downloadURLs is described in the associated Media PresentationDescription (MPD) files. The MPD describes a piece ofvideo content within a specific duration as a Period. Ina Period, there are multiple versions of the content, eachknown as a Representation. In a Representation, thereare multiple video segments or chunks. URLs pointing tothe video chunks in an MPD can either be explicitly de-scribed or be constructed via a template (client derivinga valid URL for each chunk at a certain Representation)[1]. Video chunks are 3GPP-formatted [12], [13] andin each Representation, there is a single initialisationsegment which contains the configuration data and manymedia segments. Concatenating the initialisation segmentand a series of media segments results in a continuousstream of video. Video chunks and MPDs are then servedto clients by using standard HTTP servers.
Media Presentation Description (MPD)
DASH Client
Chunks
Chunks
Chunks
Representation
Chunks
HTTP Server
Representation
Representation
Representation MPD Parser
DASH Adaptive BitrateAlgorithms
Video player
HTTP Client
HTTP GET Requests
Figure 1: DASH client-server architecture
Unlike traditional streaming strategies, DASH doesnot control the video transmission rate directly. It de-pends on the underlying TCP algorithm to regulate thevideo transmission rate, which is determined by thecongestion feedback from the client-server network path.When a streaming session starts, the client requeststhe MPD file from the HTTP server and then startsrequesting video chunks (typically in sequential order)as fast as possible to fill the playout buffer. Once thisbuffer is full, the player enters a steady state phase whereit periodically downloads new chunks. In the steady state,the player is in the ON state when it is downloading achunk, and in the OFF state otherwise (resulting in analternating ON-OFF traffic pattern illustrated in Figure2). The time between the start of two consecutive ONperiods is termed cycle time (typically the chunk size βthe amount of multimedia content within each chunk βin seconds). The client typically keeps a few chunks inthe buffer to maintain adequate playback.
Buffer pre-filling phase Steady state ON-OFF phase
OFF
Cycle time
Download Rate
Time
ON ON ONOFF
Figure 2: DASHβs bursty ON-OFF behaviour
The video player uses various feedback signals ob-served for each chunk (such as recently achieved
CAIA Technical Report 161216A December 2016 page 2 of 12
-
throughput2 and/or playout buffer occupancy) to select asuitable video rate for the next chunk to be downloaded.Consider an example when using achieved throughputas a criteria for its Adaptive Bitrate (ABR) algorithm.If the throughput is high, ABR should select a highervideo rate to provide better Quality of Experience (QoE)for the user. On the other hand, if the throughput islow, ABR should dynamically switch to a lower videorate to avoid playout buffer under-run. A good ABRalgorithm is responsive to fluctuating network conditionsand adapts smoothly to provide better QoE [14].
The presented video bitrate (or quality) is limited bythe video rates provided by the server, the informationcontained in the MPD and the network bandwidth. TheDASH clients cannot match the network throughputperfectly; they can only achieve the (discrete) videorates described by the MPD. It will select a rate be-low the estimated throughput to sustain video playbackand in the case where the network bandwidth exceedsthe maximum video bitrate, the video rate is cappedto the maximum video bitrate. Hence, in some ABRapproaches, the server can artificially limit the video rateby only providing specific rates in the MPD to protect thenetwork. The βsmoothnessβ between video bitrate tran-sitions depend on the encoding granularity (the numberof video representations) of the video content providedat the server.
Detects lower bandwidth: Switch-down quality
Representation: 0.1Mbps
Chunks
Representation: 0.5Mbps
Chunks
Representation: 1.0Mbps
Chunks
Representation: 1.5Mbps
Chunks
Video chunks in HTTP Server
Server ClientGET MPD
MPD
GET chunks @ 0.1Mbps
GET chunks @ 0.5Mbps
GET chunks @ 1.0Mbps
GET chunks @ 0.1Mbps
GET chunks @ 1.0Mbps
Improves quality
Improves quality
Start-up
Retrieve MPD
Restore quality
... ...
Video chunks flow across network
Video quality switches
Figure 3: Timeline illustration of DASH adaptive be-haviour
As illustrated in Figure 3, the client quickly rampsup its video bitrate request during start-up to pre-fillits playout buffer. When the client detects a reductionin bandwidth capacity (by utilising feedback signalsfrom previous chunks), it βbacks offβ by requesting a
2Estimated from the size of previous chunks and the time to retrievethem.
lower video bitrate. When the network capacity increasesagain, it then restores its video quality. As a result, theclient is able to stream the video seamlessly withouthaving to over-provision the network or keep an oversizeplayout buffer.
B. Standardisation
MPEG-DASH has been standardised by 3GPP (firstopen as Work Item in January 2009 and finalised inMarch 2010) and became an ISO/IECstandard for adap-tive streaming [15]. The standard defines guidelines formedia presentation, segmentation, and a collection ofstandard XML formats for the manifest file (MPD).However, specific client implementation and rate adap-tation techniques are not part of the standard [1]. Hence,commercial streaming services that use DASH imple-ment their own proprietary techniques both for mediarepresentation and for client adaptation.
The DASH Industry Forum [16] (a group containingleading streaming companies) drives the adoption andresearch in modern adaptive streaming technologies. Thecommunity has developed an open-source dash.js [17]reference player, which employs Media Source Exten-sions (MSEs) in a web/HTML5-based video player forresearch and testing purposes.
III. TEACUP ENHANCEMENTS FOR DASH SUPPORT
In this section, we describe our extensions to TEACUPfor running and analysing DASH experiments.
The TEACUP DASH traffic generator starts dash.jsv2.0.0 [17] in Chromium [18] or Firefox [19] webbrowser with Xorg [20], and starts requesting videochunks from the lighttpd [21] server (with persistentHTTP connections) that hosts the DASH dataset. Theadaptation heuristics are implemented on the client side,and are dependent on the network conditions.
A. DASH server and dataset
DASH dataset is hosted on a regular lighttpd HTTPserver in the testbed hosts. We utilise the dataset madeavailable by ITEC-DASH [22]. The dataset3 comprise offull-length sequences at different representations in termsof bitrates, resolutions and quality (representation rates).It is encoded and multiplexed using different chunk sizes(1, 2, 4, 10, 15 seconds) and are made available with
3The BigBuckBunny video content is an open-source animationvideo, with source quality of 1080p, 9mins 46secs long by theBlender Institute. It can be downloaded from http://www-itec.uni-klu.ac.at/ftp/datasets/DASHDataset2014/BigBuckBunny
CAIA Technical Report 161216A December 2016 page 3 of 12
http://www-itec.uni-klu.ac.at/ftp/datasets/DASHDataset2014/BigBuckBunnyhttp://www-itec.uni-klu.ac.at/ftp/datasets/DASHDataset2014/BigBuckBunny
-
corresponding Media Presentation Description (MPD)files for chunk-by-chunk video request. There is also anunsegmented version of the videos and the correspondingMPD, which allows for byte-range requests.
For example, Table I shows 20 levels of representationrates for the 10-sec dataset.
Resolution Encoding Level Representation Rates320x240 1 - 3 45, 88, 127kbps480x360 4 - 8 177, 217, 253, 317, 369kbps854x480 9 - 10 503, 569kbps
1280x720 11 - 14 0.8, 1.0, 1.2, 1.4Mbps1920x1080 15 - 20 2.1, 2.4, 2.9, 3.2, 3.5, 3.8Mbps
Table I: Representation rates available for 10-sec dataset
B. DASH clients
1) dash.js HTML5 player: We integrated the BSD-3licensed dash.js DASH client into our testbed to serveas our DASH client retrieving content from the lighttpdserver. dash.js is an initiative of the DASH IndustryForum [17] to establish a production quality frameworkfor building multimedia players for MPEG-DASH con-tent playback using client-side open source JavaScriptlibraries leveraging the Media Source Extensions APIset as defined by the the World Wide Web Consortium(W3C). All source codes are covered by the BSD-3license.
Figure 4: dash.js Web User Interface
To install Xorg, Chromium or Firefox on FreeBSD:> pkg install xorg> pkg install chrome
AND/OR
> pkg install firefox
To install Xorg, Chromium or Firefox on Linux Open-SUSE:
> zypper install xorg-x11> zypper install xorg-x11-server> zypper install chromium
AND/OR
> zypper install firefox
2) VLC media player : Although dash.js is our mainDASH streaming client, we also explore VLC as ouralternative streaming client. The VLC-DASH plugin [23]has been integrated into the official release of VLCwith continued improvements. We use the developmentbranch of VLC to keep up to date with the adaptivestreaming mechanisms implemented in VLC.
Appendix A and B describes the necessary steps tobuild VLC development code for DASH support withminimum Xorg environment and library packages. Theseinstructions are tested against the TEACUP host imagebased on [9].
C. TEACUP DASH Traffic Generator
The start_dash_streaming_dashjs andstart_dash_streaming_vlc traffic generatorstarts a video streaming client (dash.js or VLC) thatrequest video chunks from the lighttpd server thatstores the DASH dataset.Table II and III describes theconfigurable parameters for both traffic generators.
Parameters Default Descriptionclient ββ IP address of DASH clientserv ββ IP address of DASH server
duration ββ Duration in secondswait ββ Time to wait before process is started
serv_port ββ Port number of DASH server servingthe dataset
browser βchromeβ Browser type (chrome or firefox)chunk_size ββ Video chunk size (depending on
dataset)mpd ββ File name of Media Presentation
Description (depending on dataset)
Table II: Configurable parameters forstart_dash_streaming_dashjs traffic generator
CAIA Technical Report 161216A December 2016 page 4 of 12
-
Parameters Default Descriptionclient ββ IP address of DASH clientserv ββ IP address of DASH server
duration ββ Duration in secondswait ββ Time to wait before process is started
serv_port ββ Port number of DASH server servingthe dataset
chunk_size ββ Video chunk size (depending ondataset)
verbosity β2β Logging verbosity of VLC client(1-10)
mpd ββ File name of Media PresentationDescription (depending on dataset)
vlc_location ββ Location of VLC source codedirectory
base_url ββ Location of video files relative to thedocroot of the DASH server
Table III: Configurable parameters forstart_dash_streaming_vlc traffic generator
D. Patching TEACUP revision 71e6cf on the defaultbranch
We created a patch for TEACUP to support DASHtraffic generators natively. To apply the patch, first cloneTEACUP source code (revision 71e6cf)4 from the Mer-curial repository on SourceForge as follows:
hg clone -r 71e6cf http://hg.code.sf.net/p/teacup/code teacup-code
Then, download the patch5 and apply it as follows:1) Extract the patch file:
tar -xvf teacup-dash-patch-0.1.tgz -Cteacup-code
2) Apply the patch:
cd teacup-codepatch -p1 < teacup-dash-patch-0.1/
teacup-dash-0.1.patch
E. TEACUP Configuration
TEACUP configuration file, config.pyshould include an additional TPCONF variable,TPCONF_chunksize_mpd to setup DASH streamingexperiments. TPCONF_chunksize_mpd is a list ofvideo chunk sizes and corresponding Media PresentationDescription (MPD) file. Each entry is a tuple. The firstvalue is the video chunk size in seconds (as providedin the dataset) and the second value is the file name ofthe corresponding MPD.
4This is the latest revision at the time of writing.5The patch can be downloaded from http://caia.swin.edu.au/tools/
teacup/downloads/teacup-dash-patch-0.1.tgz
CAIA Technical Report 161216A December 2016 page 5 of 12
http://caia.swin.edu.au/tools/teacup/downloads/teacup-dash-patch-0.1.tgzhttp://caia.swin.edu.au/tools/teacup/downloads/teacup-dash-patch-0.1.tgz
-
# Generating DASH streaming traffic
traffic_dash_streaming = [
( β0.0β, β1β, " start_http_server, server=βnewtcp33β, port=β8000β,docroot=β/data/dash_datasetβ "),
( β0.1β, β2β, " start_dash_streaming_dashjs, client=βnewtcp20β,serv=βnewtcp33β, serv_port=β8000β, browser=βfirefoxβ,chunk_size=V_chunksize, mpd=V_mpd, duration=V_duration "),
]
# This is the traffic generator setup we will useTPCONF_traffic_gens = traffic_dash_streaming
Figure 5: DASH traffic generator definition example
# Video chunk size and MPD pairTPCONF_chunksize_mpd = [
(β10β,βBigBuckBunny_10s.mpdβ),]
Figure 6: TPCONF variable defining video chunk size and MPD
TPCONF_parameter_list = {# Vary name V_ variable file name values extra vars
[...omitted...]βchunksize_mpdβ : ([βV_chunksizeβ,βV_mpdβ], [βchunksizeβ,βmpdβ], TPCONF_chunksize_mpd, {}),
}
Figure 7: Parameter list definition example
TPCONF_variable_defaults = {# V_ variable value
[...omitted...]βV_chunksizeβ : TPCONF_chunksize_mpd[0][0],βV_mpdβ : TPCONF_chunksize_mpd[0][1],
}
Figure 8: Variable defaults definition example
TPCONF_vary_parameters = [βtcpalgosβ, βdelaysβ, βbandwidthsβ, βaqmsβ,βbsizesβ, βchunksize_mpdβ]
Figure 9: Varying parameters for experiment example
exp_20161114-134000_tcp_host0_del_20_down_12mbit_up_1mbit_aqm_pfifo_bs_180_chunksize_10_mpd_BigBuckBunny-10s.mpd
Figure 10: Example experiment directory name
CAIA Technical Report 161216A December 2016 page 6 of 12
-
IV. ILLUSTRATIVE DASH EXPERIMENTS
Here we describe the experiment testbed setup and testconditions for our illustrative DASH experiments.
A. Experiment testbed setup
We built a test environment emulating standard In-ternet connections from home with TEACUP testbed.For illustrative purposes, we run experiment trials in-volving dash.js client (on top of FreeBSD NewReno)retrieving 10-sec video chunks from FreeBSD NewReno[24] lighttpd server. The path has 40ms base RTT delay,12Mbps downstream / 1 Mbps upstream (12/1 Mbps)bottleneck bandwidth across FIFO, PIE and FQ-CoDelAQMs. We use the configuration file with the keyparameters illustrated in Section III-E. Figure 11 showsthe experimental setup of the testbed networks.
Figure 11: TEACUP testbed emulating DASH client(s)at home retrieving content from remote DASH server(s)
1) Hosts, router and bottleneck conditions: The routerprovides a configurable bottleneck between the clienton network 172.16.10.0/24 and the server on network172.16.11.0/24. Each host is a triple-boot machine thatcan run 64-bit Linux (openSUSE 12.3 with kernel 3.17.4and Web10G patch), 64-bit FreeBSD (FreeBSD 10.1-RELEASE) or 64-bit Windows 7 (with Cygwin 1.7.25for unix-like control of the host).
In our experiments, all end-hosts run FreeBSDNewReno and the bottleneck router runs 64-bit Linux(openSUSE 12.3 with kernel 3.10.18 patched to runat 10000Hz). The bottleneck router uses netem andtc [25] to concatenate an emulated path with specific oneway delay (OWD) and an emulated bottleneck whosethroughput is limited to a particular rate. Packets sit ina packet buffer while being delayed (to provide artificialOWD) and then sit in a separate βbottleneck bufferβ ofconfigurable size (in packets) while being rate-shaped tothe bottleneck bandwidth.
We use Linux 3.17.4 kernelβs implementations ofFIFO, PIE and FQ-CoDel6 for these experiments.
2) Traffic generators and logging: DASH flows weregenerated by the dash.js client requesting 10-sec videochunks from the DASH server. We use a standardlighttpd (version 1.4.35) [21] server with persistent HTTPconnections enabled as our data source, serving the testdataset as described in Section III-A. TCP connectionstatistics were logged using SIFTR [26] under FreeBSDand Web10G [27] under Linux. Packets captured at bothhosts with tcpdump were used to calculate non-smoothedend-to-end RTT estimates using CAIAβs passive RTTestimator, Synthetic Packet Pairs (SPP) [28].
3) Measuring throughput: βInstantaneousβ throughputis an approximation derived from the actual bytes trans-ferred during constant windows of time. Long windowssmooth out the effect of transient bursts or gaps inpacket arrivals. Short windows can result in calculatedthroughput that swings wildly from one measurementinterval to the next. For these experiments we use a 0.8sec wide window sliding forward in steps of 0.05 sec.
B. Experiment Results
There are no modifications to TEACUP data analysisfabric tasks. Default analysis functions [10] such asanalyse_throughput, analyse_rtt, analyse_ackseq, can beapplied to DASH experiments. TEAPLOT [11] can alsobe used to animate the playback of TCPβs behaviourduring DASH experiments.
Figures 12 and 13 show throughput, cwnd, RTTand ACK sequence number over time when a DASHstream is being bottlenecked by FIFO, PIE and FQ-CoDel AQM schemes across a 12/1Mbps, 40ms baseRTT path. While all FIFO, PIE and FQ-CoDel achievesimilar throughput (Figures 12a, 13a, 13b) and downloadrate (Figures 12d, 13g, 13h), PIE and FQ-CoDel inducesmuch less queuing delays (Figures 13e and 13f) thantraditional FIFO (Figure 12c). FQ-CoDel has a tighterburst tolerance and emulates a smaller buffer by inducingpacket losses more aggressively than PIE (as shownin the congestion window graphs in Figures 13d and13c) hence it induces lower queuing delays than PIE.In these scenarios where the path delay is relativelysmall, FQ-CoDel and PIE allows DASH to achievesimilar performance. The performance of DASH overFQ-CoDel degrades when the path delay increases, i.ewhen the ratio of the effective queue buffer to the pathβsBandwidth Delay Product (BDP) gets smaller [29].
6CoDel results are not shown because they are similar to those ofFQ-CoDel when there is only a single flow.
CAIA Technical Report 161216A December 2016 page 7 of 12
-
ββ
β
β
β
β
ββββ
ββββ
βββββββββββββ
ββββ
βββββββββββββββββ
ββββ
βββββββββββββββββ
ββββ
ββββββββββββ
β
β
β
β
β
β
β
βββββββββ
β
β
β
β
β
β
β
β
ββββββ
β
β
β
β
β
β
β
β
ββββββββββββββ
β
β
β
β
β
β
β
β
βββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
βββ
β
β
β
ββ
β
β
β
βββββββββ
β
β
β
β
β
β
β
β
βββββββ
β
β
β
ββ
β
β
β
βββββββ
β
β
β
β
β
β
β
β
βββββββ
β
β
β
β
ββββ
0 20 40 60 80 100 120
0
2000
4000
6000
8000
10000
12000
exp_20161114β134000_tcp_host0_del_20_down_12mbit_up_1mbit_aqm_pfifo_bs_180_chunksize_10_mpd_BigBuckBunnyβ10s.mpd
Time (s)
Thr
ough
put (
kbps
)
ββ
β
β
β
β
ββββ
ββββ
βββββββββββββ
ββββ
βββββββββββββββββ
ββββ
βββββββββββββββββ
ββββ
ββββββββββββ
β
β
β
β
β
β
β
βββββββββ
β
β
β
β
β
β
β
β
ββββββ
β
β
β
β
β
β
β
β
ββββββββββββββ
β
β
β
β
β
β
β
β
βββ
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
β
βββ
β
β
β
ββ
β
β
β
βββββββββ
β
β
β
β
β
β
β
β
βββββββ
β
β
β
ββ
β
β
β
βββββββ
β
β
β
β
β
β
β
β
βββββββ
β
β
β
β
ββββ
β 172.16.11.73_8000_172.16.10.60_50067
(a) Throughput vs time
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββοΏ½