3
__coverage__['build/gesture-simulate/gesture-simulate.js'] = {"path":"build/gesture-simulate/gesture-simulate.js","s":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0},"b":{"1":[0,0,0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0,0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0,0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0],"41":[0,0],"42":[0,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[0,0],"50":[0,0],"51":[0,0],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0],"58":[0,0],"59":[0,0],"60":[0,0,0,0],"61":[0,0],"62":[0,0],"63":[0,0],"64":[0,0],"65":[0,0],"66":[0,0],"67":[0,0],"68":[0,0],"69":[0,0],"70":[0,0],"71":[0,0],"72":[0,0],"73":[0,0],"74":[0,0],"75":[0,0],"76":[0,0],"77":[0,0],"78":[0,0],"79":[0,0],"80":[0,0,0,0,0,0],"81":[0,0],"82":[0,0],"83":[0,0],"84":[0,0],"85":[0,0,0,0,0,0,0],"86":[0,0],"87":[0,0],"88":[0,0]},"f":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0},"fnMap":{"1":{"name":"(anonymous_1)","line":1,"loc":{"start":{"line":1,"column":28},"end":{"line":1,"column":47}}},"2":{"name":"Simulations","line":83,"loc":{"start":{"line":83,"column":0},"end":{"line":83,"column":27}}},"3":{"name":"(anonymous_3)","line":107,"loc":{"start":{"line":107,"column":15},"end":{"line":107,"column":29}}},"4":{"name":"(anonymous_4)","line":120,"loc":{"start":{"line":120,"column":15},"end":{"line":120,"column":26}}},"5":{"name":"(anonymous_5)","line":160,"loc":{"start":{"line":160,"column":28},"end":{"line":160,"column":44}}},"6":{"name":"(anonymous_6)","line":202,"loc":{"start":{"line":202,"column":12},"end":{"line":202,"column":84}}},"7":{"name":"(anonymous_7)","line":249,"loc":{"start":{"line":249,"column":11},"end":{"line":249,"column":83}}},"8":{"name":"(anonymous_8)","line":324,"loc":{"start":{"line":324,"column":16},"end":{"line":324,"column":27}}},"9":{"name":"(anonymous_9)","line":383,"loc":{"start":{"line":383,"column":20},"end":{"line":383,"column":35}}},"10":{"name":"(anonymous_10)","line":446,"loc":{"start":{"line":446,"column":16},"end":{"line":446,"column":27}}},"11":{"name":"(anonymous_11)","line":528,"loc":{"start":{"line":528,"column":9},"end":{"line":528,"column":49}}},"12":{"name":"(anonymous_12)","line":560,"loc":{"start":{"line":560,"column":21},"end":{"line":560,"column":32}}},"13":{"name":"(anonymous_13)","line":568,"loc":{"start":{"line":568,"column":19},"end":{"line":568,"column":30}}},"14":{"name":"(anonymous_14)","line":592,"loc":{"start":{"line":592,"column":20},"end":{"line":592,"column":31}}},"15":{"name":"(anonymous_15)","line":633,"loc":{"start":{"line":633,"column":11},"end":{"line":633,"column":57}}},"16":{"name":"(anonymous_16)","line":698,"loc":{"start":{"line":698,"column":10},"end":{"line":698,"column":39}}},"17":{"name":"(anonymous_17)","line":753,"loc":{"start":{"line":753,"column":11},"end":{"line":753,"column":40}}},"18":{"name":"(anonymous_18)","line":800,"loc":{"start":{"line":800,"column":16},"end":{"line":800,"column":27}}},"19":{"name":"(anonymous_19)","line":826,"loc":{"start":{"line":826,"column":20},"end":{"line":826,"column":35}}},"20":{"name":"(anonymous_20)","line":856,"loc":{"start":{"line":856,"column":16},"end":{"line":856,"column":27}}},"21":{"name":"(anonymous_21)","line":879,"loc":{"start":{"line":879,"column":16},"end":{"line":879,"column":27}}},"22":{"name":"(anonymous_22)","line":923,"loc":{"start":{"line":923,"column":24},"end":{"line":923,"column":35}}},"23":{"name":"(anonymous_23)","line":942,"loc":{"start":{"line":942,"column":22},"end":{"line":942,"column":44}}},"24":{"name":"(anonymous_24)","line":955,"loc":{"start":{"line":955,"column":36},"end":{"line":955,"column":52}}},"25":{"name":"(anonymous_25)","line":981,"loc":{"start":{"line":981,"column":36},"end":{"line":981,"column":52}}},"26":{"name":"(anonymous_26)","line":1002,"loc":{"start":{"line":1002,"column":33},"end":{"line":1002,"column":45}}},"27":{"name":"(anonymous_27)","line":1022,"loc":{"start":{"line":1022,"column":20},"end":{"line":1022,"column":52}}},"28":{"name":"(anonymous_28)","line":1074,"loc":{"start":{"line":1074,"column":20},"end":{"line":1074,"column":69}}},"29":{"name":"(anonymous_29)","line":1262,"loc":{"start":{"line":1262,"column":26},"end":{"line":1262,"column":60}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1321,"column":80}},"2":{"start":{"line":10,"column":0},"end":{"line":80,"column":17}},"3":{"start":{"line":83,"column":0},"end":{"line":95,"column":1}},"4":{"start":{"line":84,"column":4},"end":{"line":86,"column":5}},"5":{"start":{"line":85,"column":8},"end":{"line":85,"column":46}},"6":{"start":{"line":87,"column":4},"end":{"line":87,"column":21}},"7":{"start":{"line":88,"column":4},"end":{"line":88,"column":42}},"8":{"start":{"line":90,"column":4},"end":{"line":91,"column":31}},"9":{"start":{"line":93,"column":4},"end":{"line":93,"column":43}},"10":{"start":{"line":94,"column":4},"end":{"line":94,"column":43}},"11":{"start":{"line":97,"column":0},"end":{"line":1079,"column":2}},"12":{"start":{"line":108,"column":8},"end":{"line":108,"column":35}},"13":{"start":{"line":121,"column":8},"end":{"line":123,"column":19}},"14":{"start":{"line":126,"column":8},"end":{"line":146,"column":9}},"15":{"start":{"line":127,"column":12},"end":{"line":127,"column":57}},"16":{"start":{"line":129,"column":12},"end":{"line":134,"column":13}},"17":{"start":{"line":130,"column":16},"end":{"line":130,"column":39}},"18":{"start":{"line":133,"column":16},"end":{"line":133,"column":62}},"19":{"start":{"line":136,"column":12},"end":{"line":141,"column":13}},"20":{"start":{"line":137,"column":16},"end":{"line":137,"column":37}},"21":{"start":{"line":140,"column":16},"end":{"line":140,"column":61}},"22":{"start":{"line":143,"column":12},"end":{"line":143,"column":45}},"23":{"start":{"line":144,"column":12},"end":{"line":144,"column":33}},"24":{"start":{"line":145,"column":12},"end":{"line":145,"column":35}},"25":{"start":{"line":148,"column":8},"end":{"line":148,"column":31}},"26":{"start":{"line":162,"column":8},"end":{"line":162,"column":19}},"27":{"start":{"line":164,"column":8},"end":{"line":174,"column":9}},"28":{"start":{"line":165,"column":12},"end":{"line":165,"column":47}},"29":{"start":{"line":167,"column":12},"end":{"line":170,"column":13}},"30":{"start":{"line":168,"column":16},"end":{"line":168,"column":42}},"31":{"start":{"line":169,"column":16},"end":{"line":169,"column":36}},"32":{"start":{"line":172,"column":12},"end":{"line":172,"column":51}},"33":{"start":{"line":173,"column":12},"end":{"line":173,"column":51}},"34":{"start":{"line":176,"column":8},"end":{"line":176,"column":21}},"35":{"start":{"line":203,"column":8},"end":{"line":205,"column":27}},"36":{"start":{"line":207,"column":8},"end":{"line":212,"column":9}},"37":{"start":{"line":208,"column":12},"end":{"line":209,"column":71}},"38":{"start":{"line":210,"column":12},"end":{"line":210,"column":24}},"39":{"start":{"line":211,"column":12},"end":{"line":211,"column":24}},"40":{"start":{"line":215,"column":8},"end":{"line":217,"column":9}},"41":{"start":{"line":216,"column":12},"end":{"line":216,"column":55}},"42":{"start":{"line":219,"column":8},"end":{"line":219,"column":66}},"43":{"start":{"line":250,"column":8},"end":{"line":264,"column":22}},"44":{"start":{"line":266,"column":8},"end":{"line":266,"column":53}},"45":{"start":{"line":268,"column":8},"end":{"line":270,"column":9}},"46":{"start":{"line":269,"column":12},"end":{"line":269,"column":72}},"47":{"start":{"line":272,"column":8},"end":{"line":274,"column":9}},"48":{"start":{"line":273,"column":12},"end":{"line":273,"column":47}},"49":{"start":{"line":276,"column":8},"end":{"line":283,"column":9}},"50":{"start":{"line":277,"column":12},"end":{"line":277,"column":24}},"51":{"start":{"line":279,"column":12},"end":{"line":279,"column":30}},"52":{"start":{"line":280,"column":12},"end":{"line":282,"column":13}},"53":{"start":{"line":281,"column":16},"end":{"line":281,"column":29}},"54":{"start":{"line":285,"column":8},"end":{"line":287,"column":9}},"55":{"start":{"line":286,"column":12},"end":{"line":286,"column":27}},"56":{"start":{"line":289,"column":8},"end":{"line":289,"column":49}},"57":{"start":{"line":290,"column":8},"end":{"line":290,"column":40}},"58":{"start":{"line":293,"column":8},"end":{"line":293,"column":28}},"59":{"start":{"line":294,"column":8},"end":{"line":294,"column":28}},"60":{"start":{"line":296,"column":8},"end":{"line":296,"column":25}},"61":{"start":{"line":297,"column":8},"end":{"line":297,"column":34}},"62":{"start":{"line":300,"column":8},"end":{"line":303,"column":10}},"63":{"start":{"line":304,"column":8},"end":{"line":307,"column":10}},"64":{"start":{"line":310,"column":8},"end":{"line":313,"column":10}},"65":{"start":{"line":314,"column":8},"end":{"line":317,"column":10}},"66":{"start":{"line":319,"column":8},"end":{"line":319,"column":25}},"67":{"start":{"line":320,"column":8},"end":{"line":320,"column":41}},"68":{"start":{"line":323,"column":8},"end":{"line":375,"column":11}},"69":{"start":{"line":325,"column":16},"end":{"line":325,"column":51}},"70":{"start":{"line":328,"column":16},"end":{"line":333,"column":18}},"71":{"start":{"line":334,"column":16},"end":{"line":339,"column":18}},"72":{"start":{"line":340,"column":16},"end":{"line":344,"column":29}},"73":{"start":{"line":347,"column":16},"end":{"line":352,"column":18}},"74":{"start":{"line":354,"column":16},"end":{"line":360,"column":27}},"75":{"start":{"line":362,"column":16},"end":{"line":371,"column":17}},"76":{"start":{"line":367,"column":20},"end":{"line":370,"column":31}},"77":{"start":{"line":378,"column":8},"end":{"line":378,"column":46}},"78":{"start":{"line":379,"column":8},"end":{"line":379,"column":40}},"79":{"start":{"line":380,"column":8},"end":{"line":380,"column":53}},"80":{"start":{"line":381,"column":8},"end":{"line":381,"column":47}},"81":{"start":{"line":383,"column":8},"end":{"line":434,"column":10}},"82":{"start":{"line":384,"column":12},"end":{"line":391,"column":47}},"83":{"start":{"line":394,"column":12},"end":{"line":399,"column":14}},"84":{"start":{"line":400,"column":12},"end":{"line":405,"column":14}},"85":{"start":{"line":406,"column":12},"end":{"line":410,"column":25}},"86":{"start":{"line":413,"column":12},"end":{"line":418,"column":14}},"87":{"start":{"line":420,"column":12},"end":{"line":426,"column":23}},"88":{"start":{"line":428,"column":12},"end":{"line":433,"column":13}},"89":{"start":{"line":429,"column":16},"end":{"line":432,"column":27}},"90":{"start":{"line":436,"column":8},"end":{"line":442,"column":9}},"91":{"start":{"line":437,"column":12},"end":{"line":441,"column":15}},"92":{"start":{"line":445,"column":8},"end":{"line":493,"column":11}},"93":{"start":{"line":447,"column":16},"end":{"line":448,"column":51}},"94":{"start":{"line":451,"column":16},"end":{"line":456,"column":18}},"95":{"start":{"line":457,"column":16},"end":{"line":462,"column":18}},"96":{"start":{"line":463,"column":16},"end":{"line":467,"column":29}},"97":{"start":{"line":470,"column":16},"end":{"line":475,"column":18}},"98":{"start":{"line":477,"column":16},"end":{"line":482,"column":17}},"99":{"start":{"line":478,"column":20},"end":{"line":481,"column":31}},"100":{"start":{"line":484,"column":16},"end":{"line":490,"column":27}},"101":{"start":{"line":495,"column":8},"end":{"line":506,"column":9}},"102":{"start":{"line":496,"column":12},"end":{"line":505,"column":15}},"103":{"start":{"line":508,"column":8},"end":{"line":508,"column":25}},"104":{"start":{"line":529,"column":8},"end":{"line":535,"column":21}},"105":{"start":{"line":537,"column":8},"end":{"line":537,"column":51}},"106":{"start":{"line":539,"column":8},"end":{"line":541,"column":9}},"107":{"start":{"line":540,"column":12},"end":{"line":540,"column":22}},"108":{"start":{"line":543,"column":8},"end":{"line":545,"column":9}},"109":{"start":{"line":544,"column":12},"end":{"line":544,"column":37}},"110":{"start":{"line":547,"column":8},"end":{"line":549,"column":9}},"111":{"start":{"line":548,"column":12},"end":{"line":548,"column":39}},"112":{"start":{"line":551,"column":8},"end":{"line":556,"column":10}},"113":{"start":{"line":558,"column":8},"end":{"line":558,"column":75}},"114":{"start":{"line":560,"column":8},"end":{"line":566,"column":10}},"115":{"start":{"line":561,"column":12},"end":{"line":565,"column":23}},"116":{"start":{"line":568,"column":8},"end":{"line":574,"column":10}},"117":{"start":{"line":569,"column":12},"end":{"line":573,"column":23}},"118":{"start":{"line":576,"column":8},"end":{"line":588,"column":9}},"119":{"start":{"line":577,"column":12},"end":{"line":581,"column":15}},"120":{"start":{"line":583,"column":12},"end":{"line":587,"column":15}},"121":{"start":{"line":590,"column":8},"end":{"line":597,"column":9}},"122":{"start":{"line":591,"column":12},"end":{"line":596,"column":15}},"123":{"start":{"line":593,"column":20},"end":{"line":593,"column":76}},"124":{"start":{"line":599,"column":8},"end":{"line":610,"column":9}},"125":{"start":{"line":600,"column":12},"end":{"line":609,"column":15}},"126":{"start":{"line":612,"column":8},"end":{"line":612,"column":25}},"127":{"start":{"line":634,"column":8},"end":{"line":634,"column":17}},"128":{"start":{"line":636,"column":8},"end":{"line":636,"column":51}},"129":{"start":{"line":638,"column":8},"end":{"line":645,"column":9}},"130":{"start":{"line":639,"column":12},"end":{"line":639,"column":26}},"131":{"start":{"line":641,"column":12},"end":{"line":641,"column":38}},"132":{"start":{"line":642,"column":12},"end":{"line":644,"column":13}},"133":{"start":{"line":643,"column":16},"end":{"line":643,"column":66}},"134":{"start":{"line":647,"column":8},"end":{"line":649,"column":9}},"135":{"start":{"line":648,"column":12},"end":{"line":648,"column":47}},"136":{"start":{"line":651,"column":8},"end":{"line":657,"column":9}},"137":{"start":{"line":652,"column":12},"end":{"line":652,"column":47}},"138":{"start":{"line":654,"column":12},"end":{"line":656,"column":13}},"139":{"start":{"line":655,"column":16},"end":{"line":655,"column":55}},"140":{"start":{"line":664,"column":8},"end":{"line":666,"column":9}},"141":{"start":{"line":665,"column":12},"end":{"line":665,"column":70}},"142":{"start":{"line":668,"column":8},"end":{"line":674,"column":10}},"143":{"start":{"line":676,"column":8},"end":{"line":676,"column":39}},"144":{"start":{"line":699,"column":8},"end":{"line":699,"column":26}},"145":{"start":{"line":701,"column":8},"end":{"line":722,"column":9}},"146":{"start":{"line":702,"column":12},"end":{"line":706,"column":14}},"147":{"start":{"line":709,"column":12},"end":{"line":713,"column":13}},"148":{"start":{"line":710,"column":16},"end":{"line":710,"column":61}},"149":{"start":{"line":712,"column":16},"end":{"line":712,"column":69}},"150":{"start":{"line":715,"column":12},"end":{"line":717,"column":13}},"151":{"start":{"line":716,"column":16},"end":{"line":716,"column":52}},"152":{"start":{"line":719,"column":12},"end":{"line":721,"column":13}},"153":{"start":{"line":720,"column":16},"end":{"line":720,"column":31}},"154":{"start":{"line":724,"column":8},"end":{"line":730,"column":9}},"155":{"start":{"line":725,"column":12},"end":{"line":725,"column":46}},"156":{"start":{"line":727,"column":12},"end":{"line":729,"column":13}},"157":{"start":{"line":728,"column":16},"end":{"line":728,"column":54}},"158":{"start":{"line":732,"column":8},"end":{"line":735,"column":10}},"159":{"start":{"line":737,"column":8},"end":{"line":737,"column":48}},"160":{"start":{"line":754,"column":8},"end":{"line":759,"column":22}},"161":{"start":{"line":761,"column":8},"end":{"line":767,"column":9}},"162":{"start":{"line":762,"column":12},"end":{"line":762,"column":46}},"163":{"start":{"line":764,"column":12},"end":{"line":766,"column":13}},"164":{"start":{"line":765,"column":16},"end":{"line":765,"column":54}},"165":{"start":{"line":769,"column":8},"end":{"line":793,"column":9}},"166":{"start":{"line":770,"column":12},"end":{"line":779,"column":14}},"167":{"start":{"line":781,"column":12},"end":{"line":786,"column":13}},"168":{"start":{"line":782,"column":16},"end":{"line":785,"column":18}},"169":{"start":{"line":787,"column":12},"end":{"line":792,"column":13}},"170":{"start":{"line":788,"column":16},"end":{"line":791,"column":18}},"171":{"start":{"line":795,"column":8},"end":{"line":795,"column":49}},"172":{"start":{"line":796,"column":8},"end":{"line":796,"column":40}},"173":{"start":{"line":799,"column":8},"end":{"line":819,"column":11}},"174":{"start":{"line":801,"column":16},"end":{"line":809,"column":23}},"175":{"start":{"line":811,"column":16},"end":{"line":815,"column":27}},"176":{"start":{"line":822,"column":8},"end":{"line":822,"column":46}},"177":{"start":{"line":823,"column":8},"end":{"line":823,"column":52}},"178":{"start":{"line":824,"column":8},"end":{"line":824,"column":52}},"179":{"start":{"line":826,"column":8},"end":{"line":844,"column":10}},"180":{"start":{"line":827,"column":12},"end":{"line":837,"column":19}},"181":{"start":{"line":839,"column":12},"end":{"line":843,"column":23}},"182":{"start":{"line":846,"column":8},"end":{"line":852,"column":9}},"183":{"start":{"line":847,"column":12},"end":{"line":851,"column":15}},"184":{"start":{"line":855,"column":8},"end":{"line":875,"column":11}},"185":{"start":{"line":857,"column":16},"end":{"line":865,"column":23}},"186":{"start":{"line":867,"column":16},"end":{"line":871,"column":27}},"187":{"start":{"line":878,"column":8},"end":{"line":898,"column":11}},"188":{"start":{"line":880,"column":16},"end":{"line":889,"column":19}},"189":{"start":{"line":891,"column":16},"end":{"line":895,"column":27}},"190":{"start":{"line":900,"column":8},"end":{"line":911,"column":9}},"191":{"start":{"line":901,"column":12},"end":{"line":910,"column":15}},"192":{"start":{"line":913,"column":8},"end":{"line":913,"column":25}},"193":{"start":{"line":924,"column":8},"end":{"line":926,"column":9}},"194":{"start":{"line":925,"column":12},"end":{"line":925,"column":55}},"195":{"start":{"line":928,"column":8},"end":{"line":928,"column":30}},"196":{"start":{"line":949,"column":8},"end":{"line":951,"column":24}},"197":{"start":{"line":953,"column":8},"end":{"line":1008,"column":9}},"198":{"start":{"line":954,"column":12},"end":{"line":1005,"column":13}},"199":{"start":{"line":955,"column":16},"end":{"line":967,"column":19}},"200":{"start":{"line":956,"column":20},"end":{"line":956,"column":65}},"201":{"start":{"line":956,"column":43},"end":{"line":956,"column":64}},"202":{"start":{"line":957,"column":20},"end":{"line":957,"column":55}},"203":{"start":{"line":957,"column":38},"end":{"line":957,"column":54}},"204":{"start":{"line":958,"column":20},"end":{"line":958,"column":55}},"205":{"start":{"line":958,"column":38},"end":{"line":958,"column":54}},"206":{"start":{"line":959,"column":20},"end":{"line":959,"column":59}},"207":{"start":{"line":959,"column":40},"end":{"line":959,"column":58}},"208":{"start":{"line":960,"column":20},"end":{"line":960,"column":59}},"209":{"start":{"line":960,"column":40},"end":{"line":960,"column":58}},"210":{"start":{"line":962,"column":20},"end":{"line":966,"column":55}},"211":{"start":{"line":969,"column":16},"end":{"line":969,"column":78}},"212":{"start":{"line":970,"column":19},"end":{"line":1005,"column":13}},"213":{"start":{"line":971,"column":16},"end":{"line":971,"column":79}},"214":{"start":{"line":980,"column":16},"end":{"line":980,"column":31}},"215":{"start":{"line":981,"column":16},"end":{"line":1000,"column":19}},"216":{"start":{"line":982,"column":20},"end":{"line":982,"column":65}},"217":{"start":{"line":982,"column":43},"end":{"line":982,"column":64}},"218":{"start":{"line":983,"column":20},"end":{"line":983,"column":60}},"219":{"start":{"line":983,"column":41},"end":{"line":983,"column":59}},"220":{"start":{"line":984,"column":20},"end":{"line":984,"column":60}},"221":{"start":{"line":984,"column":41},"end":{"line":984,"column":59}},"222":{"start":{"line":985,"column":20},"end":{"line":985,"column":58}},"223":{"start":{"line":985,"column":41},"end":{"line":985,"column":57}},"224":{"start":{"line":986,"column":20},"end":{"line":986,"column":58}},"225":{"start":{"line":986,"column":41},"end":{"line":986,"column":57}},"226":{"start":{"line":987,"column":20},"end":{"line":987,"column":60}},"227":{"start":{"line":987,"column":41},"end":{"line":987,"column":59}},"228":{"start":{"line":988,"column":20},"end":{"line":988,"column":60}},"229":{"start":{"line":988,"column":41},"end":{"line":988,"column":59}},"230":{"start":{"line":990,"column":20},"end":{"line":999,"column":23}},"231":{"start":{"line":1002,"column":16},"end":{"line":1004,"column":18}},"232":{"start":{"line":1003,"column":20},"end":{"line":1003,"column":40}},"233":{"start":{"line":1007,"column":12},"end":{"line":1007,"column":57}},"234":{"start":{"line":1010,"column":8},"end":{"line":1010,"column":25}},"235":{"start":{"line":1023,"column":8},"end":{"line":1023,"column":20}},"236":{"start":{"line":1025,"column":8},"end":{"line":1063,"column":9}},"237":{"start":{"line":1026,"column":12},"end":{"line":1059,"column":13}},"238":{"start":{"line":1027,"column":16},"end":{"line":1027,"column":56}},"239":{"start":{"line":1031,"column":16},"end":{"line":1058,"column":17}},"240":{"start":{"line":1032,"column":20},"end":{"line":1036,"column":28}},"241":{"start":{"line":1038,"column":20},"end":{"line":1038,"column":39}},"242":{"start":{"line":1039,"column":20},"end":{"line":1039,"column":49}},"243":{"start":{"line":1042,"column":20},"end":{"line":1042,"column":92}},"244":{"start":{"line":1044,"column":20},"end":{"line":1049,"column":29}},"245":{"start":{"line":1051,"column":20},"end":{"line":1051,"column":60}},"246":{"start":{"line":1053,"column":20},"end":{"line":1055,"column":21}},"247":{"start":{"line":1054,"column":24},"end":{"line":1054,"column":71}},"248":{"start":{"line":1057,"column":20},"end":{"line":1057,"column":136}},"249":{"start":{"line":1062,"column":12},"end":{"line":1062,"column":52}},"250":{"start":{"line":1075,"column":8},"end":{"line":1077,"column":61}},"251":{"start":{"line":1084,"column":0},"end":{"line":1084,"column":34}},"252":{"start":{"line":1091,"column":0},"end":{"line":1091,"column":40}},"253":{"start":{"line":1096,"column":0},"end":{"line":1096,"column":44}},"254":{"start":{"line":1262,"column":0},"end":{"line":1318,"column":2}},"255":{"start":{"line":1264,"column":4},"end":{"line":1264,"column":23}},"256":{"start":{"line":1266,"column":4},"end":{"line":1266,"column":44}},"257":{"start":{"line":1267,"column":4},"end":{"line":1267,"column":30}},"258":{"start":{"line":1269,"column":4},"end":{"line":1272,"column":5}},"259":{"start":{"line":1270,"column":8},"end":{"line":1270,"column":21}},"260":{"start":{"line":1271,"column":8},"end":{"line":1271,"column":21}},"261":{"start":{"line":1274,"column":4},"end":{"line":1274,"column":28}},"262":{"start":{"line":1276,"column":4},"end":{"line":1317,"column":5}},"263":{"start":{"line":1277,"column":8},"end":{"line":1314,"column":9}},"264":{"start":{"line":1280,"column":16},"end":{"line":1280,"column":87}},"265":{"start":{"line":1281,"column":16},"end":{"line":1281,"column":22}},"266":{"start":{"line":1283,"column":16},"end":{"line":1283,"column":46}},"267":{"start":{"line":1284,"column":16},"end":{"line":1284,"column":22}},"268":{"start":{"line":1286,"column":16},"end":{"line":1292,"column":17}},"269":{"start":{"line":1287,"column":20},"end":{"line":1287,"column":55}},"270":{"start":{"line":1288,"column":23},"end":{"line":1292,"column":17}},"271":{"start":{"line":1289,"column":20},"end":{"line":1289,"column":59}},"272":{"start":{"line":1290,"column":23},"end":{"line":1292,"column":17}},"273":{"start":{"line":1291,"column":20},"end":{"line":1291,"column":59}},"274":{"start":{"line":1293,"column":16},"end":{"line":1293,"column":60}},"275":{"start":{"line":1294,"column":16},"end":{"line":1294,"column":22}},"276":{"start":{"line":1298,"column":16},"end":{"line":1298,"column":61}},"277":{"start":{"line":1299,"column":16},"end":{"line":1299,"column":22}},"278":{"start":{"line":1301,"column":16},"end":{"line":1302,"column":38}},"279":{"start":{"line":1303,"column":16},"end":{"line":1303,"column":22}},"280":{"start":{"line":1307,"column":16},"end":{"line":1308,"column":71}},"281":{"start":{"line":1309,"column":16},"end":{"line":1309,"column":22}},"282":{"start":{"line":1311,"column":16},"end":{"line":1312,"column":71}},"283":{"start":{"line":1313,"column":16},"end":{"line":1313,"column":22}},"284":{"start":{"line":1316,"column":8},"end":{"line":1316,"column":68}}},"branchMap":{"1":{"line":13,"type":"binary-expr","locations":[{"start":{"line":13,"column":23},"end":{"line":13,"column":35}},{"start":{"line":13,"column":40},"end":{"line":13,"column":70}},{"start":{"line":13,"column":76},"end":{"line":13,"column":93}},{"start":{"line":13,"column":97},"end":{"line":13,"column":130}}]},"2":{"line":13,"type":"binary-expr","locations":[{"start":{"line":13,"column":99},"end":{"line":13,"column":110}},{"start":{"line":13,"column":114},"end":{"line":13,"column":129}}]},"3":{"line":84,"type":"if","locations":[{"start":{"line":84,"column":4},"end":{"line":84,"column":4}},{"start":{"line":84,"column":4},"end":{"line":84,"column":4}}]},"4":{"line":126,"type":"if","locations":[{"start":{"line":126,"column":8},"end":{"line":126,"column":8}},{"start":{"line":126,"column":8},"end":{"line":126,"column":8}}]},"5":{"line":129,"type":"if","locations":[{"start":{"line":129,"column":12},"end":{"line":129,"column":12}},{"start":{"line":129,"column":12},"end":{"line":129,"column":12}}]},"6":{"line":136,"type":"if","locations":[{"start":{"line":136,"column":12},"end":{"line":136,"column":12}},{"start":{"line":136,"column":12},"end":{"line":136,"column":12}}]},"7":{"line":164,"type":"if","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":8}},{"start":{"line":164,"column":8},"end":{"line":164,"column":8}}]},"8":{"line":164,"type":"binary-expr","locations":[{"start":{"line":164,"column":11},"end":{"line":164,"column":33}},{"start":{"line":164,"column":37},"end":{"line":164,"column":55}}]},"9":{"line":167,"type":"if","locations":[{"start":{"line":167,"column":12},"end":{"line":167,"column":12}},{"start":{"line":167,"column":12},"end":{"line":167,"column":12}}]},"10":{"line":207,"type":"if","locations":[{"start":{"line":207,"column":8},"end":{"line":207,"column":8}},{"start":{"line":207,"column":8},"end":{"line":207,"column":8}}]},"11":{"line":207,"type":"binary-expr","locations":[{"start":{"line":207,"column":11},"end":{"line":207,"column":31}},{"start":{"line":207,"column":35},"end":{"line":207,"column":55}},{"start":{"line":207,"column":59},"end":{"line":207,"column":63}},{"start":{"line":207,"column":67},"end":{"line":207,"column":71}}]},"12":{"line":208,"type":"cond-expr","locations":[{"start":{"line":209,"column":16},"end":{"line":209,"column":41}},{"start":{"line":209,"column":44},"end":{"line":209,"column":70}}]},"13":{"line":215,"type":"if","locations":[{"start":{"line":215,"column":8},"end":{"line":215,"column":8}},{"start":{"line":215,"column":8},"end":{"line":215,"column":8}}]},"14":{"line":268,"type":"if","locations":[{"start":{"line":268,"column":8},"end":{"line":268,"column":8}},{"start":{"line":268,"column":8},"end":{"line":268,"column":8}}]},"15":{"line":268,"type":"binary-expr","locations":[{"start":{"line":268,"column":11},"end":{"line":268,"column":31}},{"start":{"line":268,"column":35},"end":{"line":268,"column":55}},{"start":{"line":268,"column":59},"end":{"line":268,"column":63}},{"start":{"line":268,"column":67},"end":{"line":268,"column":71}}]},"16":{"line":272,"type":"if","locations":[{"start":{"line":272,"column":8},"end":{"line":272,"column":8}},{"start":{"line":272,"column":8},"end":{"line":272,"column":8}}]},"17":{"line":272,"type":"binary-expr","locations":[{"start":{"line":272,"column":11},"end":{"line":272,"column":37}},{"start":{"line":272,"column":41},"end":{"line":272,"column":54}}]},"18":{"line":276,"type":"if","locations":[{"start":{"line":276,"column":8},"end":{"line":276,"column":8}},{"start":{"line":276,"column":8},"end":{"line":276,"column":8}}]},"19":{"line":285,"type":"if","locations":[{"start":{"line":285,"column":8},"end":{"line":285,"column":8}},{"start":{"line":285,"column":8},"end":{"line":285,"column":8}}]},"20":{"line":362,"type":"if","locations":[{"start":{"line":362,"column":16},"end":{"line":362,"column":16}},{"start":{"line":362,"column":16},"end":{"line":362,"column":16}}]},"21":{"line":428,"type":"if","locations":[{"start":{"line":428,"column":12},"end":{"line":428,"column":12}},{"start":{"line":428,"column":12},"end":{"line":428,"column":12}}]},"22":{"line":477,"type":"if","locations":[{"start":{"line":477,"column":16},"end":{"line":477,"column":16}},{"start":{"line":477,"column":16},"end":{"line":477,"column":16}}]},"23":{"line":495,"type":"if","locations":[{"start":{"line":495,"column":8},"end":{"line":495,"column":8}},{"start":{"line":495,"column":8},"end":{"line":495,"column":8}}]},"24":{"line":495,"type":"binary-expr","locations":[{"start":{"line":495,"column":11},"end":{"line":495,"column":13}},{"start":{"line":495,"column":17},"end":{"line":495,"column":38}}]},"25":{"line":539,"type":"if","locations":[{"start":{"line":539,"column":8},"end":{"line":539,"column":8}},{"start":{"line":539,"column":8},"end":{"line":539,"column":8}}]},"26":{"line":539,"type":"binary-expr","locations":[{"start":{"line":539,"column":11},"end":{"line":539,"column":34}},{"start":{"line":539,"column":38},"end":{"line":539,"column":47}}]},"27":{"line":543,"type":"if","locations":[{"start":{"line":543,"column":8},"end":{"line":543,"column":8}},{"start":{"line":543,"column":8},"end":{"line":543,"column":8}}]},"28":{"line":547,"type":"if","locations":[{"start":{"line":547,"column":8},"end":{"line":547,"column":8}},{"start":{"line":547,"column":8},"end":{"line":547,"column":8}}]},"29":{"line":580,"type":"cond-expr","locations":[{"start":{"line":580,"column":36},"end":{"line":580,"column":37}},{"start":{"line":580,"column":40},"end":{"line":580,"column":45}}]},"30":{"line":590,"type":"if","locations":[{"start":{"line":590,"column":8},"end":{"line":590,"column":8}},{"start":{"line":590,"column":8},"end":{"line":590,"column":8}}]},"31":{"line":590,"type":"binary-expr","locations":[{"start":{"line":590,"column":11},"end":{"line":590,"column":20}},{"start":{"line":590,"column":24},"end":{"line":590,"column":39}}]},"32":{"line":599,"type":"if","locations":[{"start":{"line":599,"column":8},"end":{"line":599,"column":8}},{"start":{"line":599,"column":8},"end":{"line":599,"column":8}}]},"33":{"line":599,"type":"binary-expr","locations":[{"start":{"line":599,"column":11},"end":{"line":599,"column":13}},{"start":{"line":599,"column":17},"end":{"line":599,"column":38}}]},"34":{"line":638,"type":"if","locations":[{"start":{"line":638,"column":8},"end":{"line":638,"column":8}},{"start":{"line":638,"column":8},"end":{"line":638,"column":8}}]},"35":{"line":642,"type":"if","locations":[{"start":{"line":642,"column":12},"end":{"line":642,"column":12}},{"start":{"line":642,"column":12},"end":{"line":642,"column":12}}]},"36":{"line":642,"type":"binary-expr","locations":[{"start":{"line":642,"column":15},"end":{"line":642,"column":30}},{"start":{"line":642,"column":34},"end":{"line":642,"column":49}}]},"37":{"line":647,"type":"if","locations":[{"start":{"line":647,"column":8},"end":{"line":647,"column":8}},{"start":{"line":647,"column":8},"end":{"line":647,"column":8}}]},"38":{"line":651,"type":"if","locations":[{"start":{"line":651,"column":8},"end":{"line":651,"column":8}},{"start":{"line":651,"column":8},"end":{"line":651,"column":8}}]},"39":{"line":654,"type":"if","locations":[{"start":{"line":654,"column":12},"end":{"line":654,"column":12}},{"start":{"line":654,"column":12},"end":{"line":654,"column":12}}]},"40":{"line":664,"type":"if","locations":[{"start":{"line":664,"column":8},"end":{"line":664,"column":8}},{"start":{"line":664,"column":8},"end":{"line":664,"column":8}}]},"41":{"line":671,"type":"cond-expr","locations":[{"start":{"line":671,"column":36},"end":{"line":671,"column":53}},{"start":{"line":671,"column":56},"end":{"line":671,"column":64}}]},"42":{"line":672,"type":"cond-expr","locations":[{"start":{"line":672,"column":36},"end":{"line":672,"column":53}},{"start":{"line":672,"column":56},"end":{"line":672,"column":64}}]},"43":{"line":701,"type":"if","locations":[{"start":{"line":701,"column":8},"end":{"line":701,"column":8}},{"start":{"line":701,"column":8},"end":{"line":701,"column":8}}]},"44":{"line":709,"type":"if","locations":[{"start":{"line":709,"column":12},"end":{"line":709,"column":12}},{"start":{"line":709,"column":12},"end":{"line":709,"column":12}}]},"45":{"line":715,"type":"if","locations":[{"start":{"line":715,"column":12},"end":{"line":715,"column":12}},{"start":{"line":715,"column":12},"end":{"line":715,"column":12}}]},"46":{"line":719,"type":"if","locations":[{"start":{"line":719,"column":12},"end":{"line":719,"column":12}},{"start":{"line":719,"column":12},"end":{"line":719,"column":12}}]},"47":{"line":724,"type":"if","locations":[{"start":{"line":724,"column":8},"end":{"line":724,"column":8}},{"start":{"line":724,"column":8},"end":{"line":724,"column":8}}]},"48":{"line":727,"type":"if","locations":[{"start":{"line":727,"column":12},"end":{"line":727,"column":12}},{"start":{"line":727,"column":12},"end":{"line":727,"column":12}}]},"49":{"line":761,"type":"if","locations":[{"start":{"line":761,"column":8},"end":{"line":761,"column":8}},{"start":{"line":761,"column":8},"end":{"line":761,"column":8}}]},"50":{"line":764,"type":"if","locations":[{"start":{"line":764,"column":12},"end":{"line":764,"column":12}},{"start":{"line":764,"column":12},"end":{"line":764,"column":12}}]},"51":{"line":769,"type":"if","locations":[{"start":{"line":769,"column":8},"end":{"line":769,"column":8}},{"start":{"line":769,"column":8},"end":{"line":769,"column":8}}]},"52":{"line":781,"type":"if","locations":[{"start":{"line":781,"column":12},"end":{"line":781,"column":12}},{"start":{"line":781,"column":12},"end":{"line":781,"column":12}}]},"53":{"line":787,"type":"if","locations":[{"start":{"line":787,"column":12},"end":{"line":787,"column":12}},{"start":{"line":787,"column":12},"end":{"line":787,"column":12}}]},"54":{"line":900,"type":"if","locations":[{"start":{"line":900,"column":8},"end":{"line":900,"column":8}},{"start":{"line":900,"column":8},"end":{"line":900,"column":8}}]},"55":{"line":900,"type":"binary-expr","locations":[{"start":{"line":900,"column":11},"end":{"line":900,"column":13}},{"start":{"line":900,"column":17},"end":{"line":900,"column":38}}]},"56":{"line":924,"type":"if","locations":[{"start":{"line":924,"column":8},"end":{"line":924,"column":8}},{"start":{"line":924,"column":8},"end":{"line":924,"column":8}}]},"57":{"line":953,"type":"if","locations":[{"start":{"line":953,"column":8},"end":{"line":953,"column":8}},{"start":{"line":953,"column":8},"end":{"line":953,"column":8}}]},"58":{"line":953,"type":"binary-expr","locations":[{"start":{"line":953,"column":11},"end":{"line":953,"column":24}},{"start":{"line":953,"column":28},"end":{"line":953,"column":55}}]},"59":{"line":954,"type":"if","locations":[{"start":{"line":954,"column":12},"end":{"line":954,"column":12}},{"start":{"line":954,"column":12},"end":{"line":954,"column":12}}]},"60":{"line":954,"type":"binary-expr","locations":[{"start":{"line":954,"column":15},"end":{"line":954,"column":27}},{"start":{"line":954,"column":31},"end":{"line":954,"column":50}},{"start":{"line":954,"column":54},"end":{"line":954,"column":62}},{"start":{"line":954,"column":66},"end":{"line":954,"column":81}}]},"61":{"line":956,"type":"if","locations":[{"start":{"line":956,"column":20},"end":{"line":956,"column":20}},{"start":{"line":956,"column":20},"end":{"line":956,"column":20}}]},"62":{"line":957,"type":"if","locations":[{"start":{"line":957,"column":20},"end":{"line":957,"column":20}},{"start":{"line":957,"column":20},"end":{"line":957,"column":20}}]},"63":{"line":958,"type":"if","locations":[{"start":{"line":958,"column":20},"end":{"line":958,"column":20}},{"start":{"line":958,"column":20},"end":{"line":958,"column":20}}]},"64":{"line":959,"type":"if","locations":[{"start":{"line":959,"column":20},"end":{"line":959,"column":20}},{"start":{"line":959,"column":20},"end":{"line":959,"column":20}}]},"65":{"line":960,"type":"if","locations":[{"start":{"line":960,"column":20},"end":{"line":960,"column":20}},{"start":{"line":960,"column":20},"end":{"line":960,"column":20}}]},"66":{"line":970,"type":"if","locations":[{"start":{"line":970,"column":19},"end":{"line":970,"column":19}},{"start":{"line":970,"column":19},"end":{"line":970,"column":19}}]},"67":{"line":970,"type":"binary-expr","locations":[{"start":{"line":970,"column":22},"end":{"line":970,"column":30}},{"start":{"line":970,"column":34},"end":{"line":970,"column":48}}]},"68":{"line":982,"type":"if","locations":[{"start":{"line":982,"column":20},"end":{"line":982,"column":20}},{"start":{"line":982,"column":20},"end":{"line":982,"column":20}}]},"69":{"line":983,"type":"if","locations":[{"start":{"line":983,"column":20},"end":{"line":983,"column":20}},{"start":{"line":983,"column":20},"end":{"line":983,"column":20}}]},"70":{"line":984,"type":"if","locations":[{"start":{"line":984,"column":20},"end":{"line":984,"column":20}},{"start":{"line":984,"column":20},"end":{"line":984,"column":20}}]},"71":{"line":985,"type":"if","locations":[{"start":{"line":985,"column":20},"end":{"line":985,"column":20}},{"start":{"line":985,"column":20},"end":{"line":985,"column":20}}]},"72":{"line":986,"type":"if","locations":[{"start":{"line":986,"column":20},"end":{"line":986,"column":20}},{"start":{"line":986,"column":20},"end":{"line":986,"column":20}}]},"73":{"line":987,"type":"if","locations":[{"start":{"line":987,"column":20},"end":{"line":987,"column":20}},{"start":{"line":987,"column":20},"end":{"line":987,"column":20}}]},"74":{"line":988,"type":"if","locations":[{"start":{"line":988,"column":20},"end":{"line":988,"column":20}},{"start":{"line":988,"column":20},"end":{"line":988,"column":20}}]},"75":{"line":1025,"type":"if","locations":[{"start":{"line":1025,"column":8},"end":{"line":1025,"column":8}},{"start":{"line":1025,"column":8},"end":{"line":1025,"column":8}}]},"76":{"line":1026,"type":"if","locations":[{"start":{"line":1026,"column":12},"end":{"line":1026,"column":12}},{"start":{"line":1026,"column":12},"end":{"line":1026,"column":12}}]},"77":{"line":1031,"type":"if","locations":[{"start":{"line":1031,"column":16},"end":{"line":1031,"column":16}},{"start":{"line":1031,"column":16},"end":{"line":1031,"column":16}}]},"78":{"line":1042,"type":"cond-expr","locations":[{"start":{"line":1042,"column":51},"end":{"line":1042,"column":73}},{"start":{"line":1042,"column":76},"end":{"line":1042,"column":91}}]},"79":{"line":1053,"type":"if","locations":[{"start":{"line":1053,"column":20},"end":{"line":1053,"column":20}},{"start":{"line":1053,"column":20},"end":{"line":1053,"column":20}}]},"80":{"line":1075,"type":"binary-expr","locations":[{"start":{"line":1075,"column":16},"end":{"line":1075,"column":23}},{"start":{"line":1075,"column":28},"end":{"line":1075,"column":47}},{"start":{"line":1076,"column":13},"end":{"line":1076,"column":26}},{"start":{"line":1076,"column":31},"end":{"line":1076,"column":56}},{"start":{"line":1077,"column":13},"end":{"line":1077,"column":27}},{"start":{"line":1077,"column":32},"end":{"line":1077,"column":58}}]},"81":{"line":1269,"type":"if","locations":[{"start":{"line":1269,"column":4},"end":{"line":1269,"column":4}},{"start":{"line":1269,"column":4},"end":{"line":1269,"column":4}}]},"82":{"line":1269,"type":"binary-expr","locations":[{"start":{"line":1269,"column":7},"end":{"line":1269,"column":10}},{"start":{"line":1269,"column":14},"end":{"line":1269,"column":40}}]},"83":{"line":1274,"type":"binary-expr","locations":[{"start":{"line":1274,"column":14},"end":{"line":1274,"column":21}},{"start":{"line":1274,"column":25},"end":{"line":1274,"column":27}}]},"84":{"line":1276,"type":"if","locations":[{"start":{"line":1276,"column":4},"end":{"line":1276,"column":4}},{"start":{"line":1276,"column":4},"end":{"line":1276,"column":4}}]},"85":{"line":1277,"type":"switch","locations":[{"start":{"line":1279,"column":12},"end":{"line":1281,"column":22}},{"start":{"line":1282,"column":12},"end":{"line":1284,"column":22}},{"start":{"line":1285,"column":12},"end":{"line":1294,"column":22}},{"start":{"line":1297,"column":12},"end":{"line":1299,"column":22}},{"start":{"line":1300,"column":12},"end":{"line":1303,"column":22}},{"start":{"line":1306,"column":12},"end":{"line":1309,"column":22}},{"start":{"line":1310,"column":12},"end":{"line":1313,"column":22}}]},"86":{"line":1286,"type":"if","locations":[{"start":{"line":1286,"column":16},"end":{"line":1286,"column":16}},{"start":{"line":1286,"column":16},"end":{"line":1286,"column":16}}]},"87":{"line":1288,"type":"if","locations":[{"start":{"line":1288,"column":23},"end":{"line":1288,"column":23}},{"start":{"line":1288,"column":23},"end":{"line":1288,"column":23}}]},"88":{"line":1290,"type":"if","locations":[{"start":{"line":1290,"column":23},"end":{"line":1290,"column":23}},{"start":{"line":1290,"column":23},"end":{"line":1290,"column":23}}]}},"code":["(function () { YUI.add('gesture-simulate', function (Y, NAME) {","","/**"," * Simulate high-level user gestures by generating a set of native DOM events."," *"," * @module gesture-simulate"," * @requires event-simulate, async-queue, node-screen"," */","","var NAME = \"gesture-simulate\",",""," // phantomjs check may be temporary, until we determine if it really support touch all the way through, like it claims to (http://code.google.com/p/phantomjs/issues/detail?id=375)"," SUPPORTS_TOUCH = ((Y.config.win && (\"ontouchstart\" in Y.config.win)) && !(Y.UA.phantomjs) && !(Y.UA.chrome && Y.UA.chrome < 6)),",""," gestureNames = {"," tap: 1,"," doubletap: 1,"," press: 1,"," move: 1,"," flick: 1,"," pinch: 1,"," rotate: 1"," },",""," touchEvents = {"," touchstart: 1,"," touchmove: 1,"," touchend: 1,"," touchcancel: 1"," },",""," document = Y.config.doc,"," emptyTouchList,",""," EVENT_INTERVAL = 20, // 20ms"," START_PAGEX, // will be adjusted to the node element center"," START_PAGEY, // will be adjusted to the node element center",""," // defaults that user can override."," DEFAULTS = {"," // tap gestures"," HOLD_TAP: 10, // 10ms"," DELAY_TAP: 10, // 10ms",""," // press gesture"," HOLD_PRESS: 3000, // 3sec"," MIN_HOLD_PRESS: 1000, // 1sec"," MAX_HOLD_PRESS: 60000, // 1min",""," // move gesture"," DISTANCE_MOVE: 200, // 200 pixels"," DURATION_MOVE: 1000, // 1sec"," MAX_DURATION_MOVE: 5000,// 5sec",""," // flick gesture"," MIN_VELOCITY_FLICK: 1.3,"," DISTANCE_FLICK: 200, // 200 pixels"," DURATION_FLICK: 1000, // 1sec"," MAX_DURATION_FLICK: 5000,// 5sec",""," // pinch/rotation"," DURATION_PINCH: 1000 // 1sec"," },",""," TOUCH_START = 'touchstart',"," TOUCH_MOVE = 'touchmove',"," TOUCH_END = 'touchend',",""," GESTURE_START = 'gesturestart',"," GESTURE_CHANGE = 'gesturechange',"," GESTURE_END = 'gestureend',",""," MOUSE_UP = 'mouseup',"," MOUSE_MOVE = 'mousemove',"," MOUSE_DOWN = 'mousedown',"," MOUSE_CLICK = 'click',"," MOUSE_DBLCLICK = 'dblclick',",""," X_AXIS = 'x',"," Y_AXIS = 'y';","","","function Simulations(node) {"," if(!node) {"," Y.error(NAME+': invalid target node');"," }"," this.node = node;"," this.target = Y.Node.getDOMNode(node);",""," var startXY = this.node.getXY(),"," dims = this._getDims();",""," START_PAGEX = startXY[0] + (dims[0])/2;"," START_PAGEY = startXY[1] + (dims[1])/2;","}","","Simulations.prototype = {",""," /**"," * Helper method to convert a degree to a radian."," *"," * @method _toRadian"," * @private"," * @param {Number} deg A degree to be converted to a radian."," * @return {Number} The degree in radian."," */"," _toRadian: function(deg) {"," return deg * (Math.PI/180);"," },",""," /**"," * Helper method to get height/width while accounting for"," * rotation/scale transforms where possible by using the"," * bounding client rectangle height/width instead of the"," * offsetWidth/Height which region uses."," * @method _getDims"," * @private"," * @return {Array} Array with [height, width]"," */"," _getDims : function() {"," var region,"," width,"," height;",""," // Ideally, this should be in DOM somewhere."," if (this.target.getBoundingClientRect) {"," region = this.target.getBoundingClientRect();",""," if (\"height\" in region) {"," height = region.height;"," } else {"," // IE7,8 has getBCR, but no height."," height = Math.abs(region.bottom - region.top);"," }",""," if (\"width\" in region) {"," width = region.width;"," } else {"," // IE7,8 has getBCR, but no width."," width = Math.abs(region.right - region.left);"," }"," } else {"," region = this.node.get(\"region\");"," width = region.width;"," height = region.height;"," }",""," return [width, height];"," },",""," /**"," * Helper method to convert a point relative to the node element into"," * the point in the page coordination."," *"," * @method _calculateDefaultPoint"," * @private"," * @param {Array} point A point relative to the node element."," * @return {Array} The same point in the page coordination."," */"," _calculateDefaultPoint: function(point) {",""," var height;",""," if(!Y.Lang.isArray(point) || point.length === 0) {"," point = [START_PAGEX, START_PAGEY];"," } else {"," if(point.length == 1) {"," height = this._getDims[1];"," point[1] = height/2;"," }"," // convert to page(viewport) coordination"," point[0] = this.node.getX() + point[0];"," point[1] = this.node.getY() + point[1];"," }",""," return point;"," },",""," /**"," * The \"rotate\" and \"pinch\" methods are essencially same with the exact same"," * arguments. Only difference is the required parameters. The rotate method"," * requires \"rotation\" parameter while the pinch method requires \"startRadius\""," * and \"endRadius\" parameters."," *"," * @method rotate"," * @param {Function} cb The callback to execute when the gesture simulation"," * is completed."," * @param {Array} center A center point where the pinch gesture of two fingers"," * should happen. It is relative to the top left corner of the target"," * node element."," * @param {Number} startRadius A radius of start circle where 2 fingers are"," * on when the gesture starts. This is optional. The default is a fourth of"," * either target node width or height whichever is smaller."," * @param {Number} endRadius A radius of end circle where 2 fingers will be on when"," * the pinch or spread gestures are completed. This is optional."," * The default is a fourth of either target node width or height whichever is less."," * @param {Number} duration A duration of the gesture in millisecond."," * @param {Number} start A start angle(0 degree at 12 o'clock) where the"," * gesture should start. Default is 0."," * @param {Number} rotation A rotation in degree. It is required."," */"," rotate: function(cb, center, startRadius, endRadius, duration, start, rotation) {"," var radius,"," r1 = startRadius, // optional"," r2 = endRadius; // optional",""," if(!Y.Lang.isNumber(r1) || !Y.Lang.isNumber(r2) || r1<0 || r2<0) {"," radius = (this.target.offsetWidth < this.target.offsetHeight)?"," this.target.offsetWidth/4 : this.target.offsetHeight/4;"," r1 = radius;"," r2 = radius;"," }",""," // required"," if(!Y.Lang.isNumber(rotation)) {"," Y.error(NAME+'Invalid rotation detected.');"," }",""," this.pinch(cb, center, r1, r2, duration, start, rotation);"," },",""," /**"," * The \"rotate\" and \"pinch\" methods are essencially same with the exact same"," * arguments. Only difference is the required parameters. The rotate method"," * requires \"rotation\" parameter while the pinch method requires \"startRadius\""," * and \"endRadius\" parameters."," *"," * The \"pinch\" gesture can simulate various 2 finger gestures such as pinch,"," * spread and/or rotation. The \"startRadius\" and \"endRadius\" are required."," * If endRadius is larger than startRadius, it becomes a spread gesture"," * otherwise a pinch gesture."," *"," * @method pinch"," * @param {Function} cb The callback to execute when the gesture simulation"," * is completed."," * @param {Array} center A center point where the pinch gesture of two fingers"," * should happen. It is relative to the top left corner of the target"," * node element."," * @param {Number} startRadius A radius of start circle where 2 fingers are"," * on when the gesture starts. This paramenter is required."," * @param {Number} endRadius A radius of end circle where 2 fingers will be on when"," * the pinch or spread gestures are completed. This parameter is required."," * @param {Number} duration A duration of the gesture in millisecond."," * @param {Number} start A start angle(0 degree at 12 o'clock) where the"," * gesture should start. Default is 0."," * @param {Number} rotation If rotation is desired during the pinch or"," * spread gestures, this parameter can be used. Default is 0 degree."," */"," pinch: function(cb, center, startRadius, endRadius, duration, start, rotation) {"," var eventQueue,"," i,"," interval = EVENT_INTERVAL,"," touches,"," id = 0,"," r1 = startRadius, // required"," r2 = endRadius, // required"," radiusPerStep,"," centerX, centerY,"," startScale, endScale, scalePerStep,"," startRot, endRot, rotPerStep,"," path1 = {start: [], end: []}, // paths for 1st and 2nd fingers."," path2 = {start: [], end: []},"," steps,"," touchMove;",""," center = this._calculateDefaultPoint(center);",""," if(!Y.Lang.isNumber(r1) || !Y.Lang.isNumber(r2) || r1<0 || r2<0) {"," Y.error(NAME+'Invalid startRadius and endRadius detected.');"," }",""," if(!Y.Lang.isNumber(duration) || duration <= 0) {"," duration = DEFAULTS.DURATION_PINCH;"," }",""," if(!Y.Lang.isNumber(start)) {"," start = 0.0;"," } else {"," start = start%360;"," while(start < 0) {"," start += 360;"," }"," }",""," if(!Y.Lang.isNumber(rotation)) {"," rotation = 0.0;"," }",""," Y.AsyncQueue.defaults.timeout = interval;"," eventQueue = new Y.AsyncQueue();",""," // range determination"," centerX = center[0];"," centerY = center[1];",""," startRot = start;"," endRot = start + rotation;",""," // 1st finger path"," path1.start = ["," centerX + r1*Math.sin(this._toRadian(startRot)),"," centerY - r1*Math.cos(this._toRadian(startRot))"," ];"," path1.end = ["," centerX + r2*Math.sin(this._toRadian(endRot)),"," centerY - r2*Math.cos(this._toRadian(endRot))"," ];",""," // 2nd finger path"," path2.start = ["," centerX - r1*Math.sin(this._toRadian(startRot)),"," centerY + r1*Math.cos(this._toRadian(startRot))"," ];"," path2.end = ["," centerX - r2*Math.sin(this._toRadian(endRot)),"," centerY + r2*Math.cos(this._toRadian(endRot))"," ];",""," startScale = 1.0;"," endScale = endRadius/startRadius;",""," // touch/gesture start"," eventQueue.add({"," fn: function() {"," var coord1, coord2, coord, touches;",""," // coordinate for each touch object."," coord1 = {"," pageX: path1.start[0],"," pageY: path1.start[1],"," clientX: path1.start[0],"," clientY: path1.start[1]"," };"," coord2 = {"," pageX: path2.start[0],"," pageY: path2.start[1],"," clientX: path2.start[0],"," clientY: path2.start[1]"," };"," touches = this._createTouchList([Y.merge({"," identifier: (id++)"," }, coord1), Y.merge({"," identifier: (id++)"," }, coord2)]);",""," // coordinate for top level event"," coord = {"," pageX: (path1.start[0] + path2.start[0])/2,"," pageY: (path1.start[0] + path2.start[1])/2,"," clientX: (path1.start[0] + path2.start[0])/2,"," clientY: (path1.start[0] + path2.start[1])/2"," };",""," this._simulateEvent(this.target, TOUCH_START, Y.merge({"," touches: touches,"," targetTouches: touches,"," changedTouches: touches,"," scale: startScale,"," rotation: startRot"," }, coord));",""," if(Y.UA.ios >= 2.0) {"," /* gesture starts when the 2nd finger touch starts."," * The implementation will fire 1 touch start event for both fingers,"," * simulating 2 fingers touched on the screen at the same time."," */"," this._simulateEvent(this.target, GESTURE_START, Y.merge({"," scale: startScale,"," rotation: startRot"," }, coord));"," }"," },"," timeout: 0,"," context: this"," });",""," // gesture change"," steps = Math.floor(duration/interval);"," radiusPerStep = (r2 - r1)/steps;"," scalePerStep = (endScale - startScale)/steps;"," rotPerStep = (endRot - startRot)/steps;",""," touchMove = function(step) {"," var radius = r1 + (radiusPerStep)*step,"," px1 = centerX + radius*Math.sin(this._toRadian(startRot + rotPerStep*step)),"," py1 = centerY - radius*Math.cos(this._toRadian(startRot + rotPerStep*step)),"," px2 = centerX - radius*Math.sin(this._toRadian(startRot + rotPerStep*step)),"," py2 = centerY + radius*Math.cos(this._toRadian(startRot + rotPerStep*step)),"," px = (px1+px2)/2,"," py = (py1+py2)/2,"," coord1, coord2, coord, touches;",""," // coordinate for each touch object."," coord1 = {"," pageX: px1,"," pageY: py1,"," clientX: px1,"," clientY: py1"," };"," coord2 = {"," pageX: px2,"," pageY: py2,"," clientX: px2,"," clientY: py2"," };"," touches = this._createTouchList([Y.merge({"," identifier: (id++)"," }, coord1), Y.merge({"," identifier: (id++)"," }, coord2)]);",""," // coordinate for top level event"," coord = {"," pageX: px,"," pageY: py,"," clientX: px,"," clientY: py"," };",""," this._simulateEvent(this.target, TOUCH_MOVE, Y.merge({"," touches: touches,"," targetTouches: touches,"," changedTouches: touches,"," scale: startScale + scalePerStep*step,"," rotation: startRot + rotPerStep*step"," }, coord));",""," if(Y.UA.ios >= 2.0) {"," this._simulateEvent(this.target, GESTURE_CHANGE, Y.merge({"," scale: startScale + scalePerStep*step,"," rotation: startRot + rotPerStep*step"," }, coord));"," }"," };",""," for (i=0; i < steps; i++) {"," eventQueue.add({"," fn: touchMove,"," args: [i],"," context: this"," });"," }",""," // gesture end"," eventQueue.add({"," fn: function() {"," var emptyTouchList = this._getEmptyTouchList(),"," coord1, coord2, coord, touches;",""," // coordinate for each touch object."," coord1 = {"," pageX: path1.end[0],"," pageY: path1.end[1],"," clientX: path1.end[0],"," clientY: path1.end[1]"," };"," coord2 = {"," pageX: path2.end[0],"," pageY: path2.end[1],"," clientX: path2.end[0],"," clientY: path2.end[1]"," };"," touches = this._createTouchList([Y.merge({"," identifier: (id++)"," }, coord1), Y.merge({"," identifier: (id++)"," }, coord2)]);",""," // coordinate for top level event"," coord = {"," pageX: (path1.end[0] + path2.end[0])/2,"," pageY: (path1.end[0] + path2.end[1])/2,"," clientX: (path1.end[0] + path2.end[0])/2,"," clientY: (path1.end[0] + path2.end[1])/2"," };",""," if(Y.UA.ios >= 2.0) {"," this._simulateEvent(this.target, GESTURE_END, Y.merge({"," scale: endScale,"," rotation: endRot"," }, coord));"," }",""," this._simulateEvent(this.target, TOUCH_END, Y.merge({"," touches: emptyTouchList,"," targetTouches: emptyTouchList,"," changedTouches: touches,"," scale: endScale,"," rotation: endRot"," }, coord));"," },"," context: this"," });",""," if(cb && Y.Lang.isFunction(cb)) {"," eventQueue.add({"," fn: cb,",""," // by default, the callback runs the node context where"," // simulateGesture method is called."," context: this.node",""," //TODO: Use args to pass error object as 1st param if there is an error."," //args:"," });"," }",""," eventQueue.run();"," },",""," /**"," * The \"tap\" gesture can be used for various single touch point gestures"," * such as single tap, N number of taps, long press. The default is a single"," * tap."," *"," * @method tap"," * @param {Function} cb The callback to execute when the gesture simulation"," * is completed."," * @param {Array} point A point(relative to the top left corner of the"," * target node element) where the tap gesture should start. The default"," * is the center of the taget node."," * @param {Number} times The number of taps. Default is 1."," * @param {Number} hold The hold time in milliseconds between \"touchstart\" and"," * \"touchend\" event generation. Default is 10ms."," * @param {Number} delay The time gap in millisecond between taps if this"," * gesture has more than 1 tap. Default is 10ms."," */"," tap: function(cb, point, times, hold, delay) {"," var eventQueue = new Y.AsyncQueue(),"," emptyTouchList = this._getEmptyTouchList(),"," touches,"," coord,"," i,"," touchStart,"," touchEnd;",""," point = this._calculateDefaultPoint(point);",""," if(!Y.Lang.isNumber(times) || times < 1) {"," times = 1;"," }",""," if(!Y.Lang.isNumber(hold)) {"," hold = DEFAULTS.HOLD_TAP;"," }",""," if(!Y.Lang.isNumber(delay)) {"," delay = DEFAULTS.DELAY_TAP;"," }",""," coord = {"," pageX: point[0],"," pageY: point[1],"," clientX: point[0],"," clientY: point[1]"," };",""," touches = this._createTouchList([Y.merge({identifier: 0}, coord)]);",""," touchStart = function() {"," this._simulateEvent(this.target, TOUCH_START, Y.merge({"," touches: touches,"," targetTouches: touches,"," changedTouches: touches"," }, coord));"," };",""," touchEnd = function() {"," this._simulateEvent(this.target, TOUCH_END, Y.merge({"," touches: emptyTouchList,"," targetTouches: emptyTouchList,"," changedTouches: touches"," }, coord));"," };",""," for (i=0; i < times; i++) {"," eventQueue.add({"," fn: touchStart,"," context: this,"," timeout: (i === 0)? 0 : delay"," });",""," eventQueue.add({"," fn: touchEnd,"," context: this,"," timeout: hold"," });"," }",""," if(times > 1 && !SUPPORTS_TOUCH) {"," eventQueue.add({"," fn: function() {"," this._simulateEvent(this.target, MOUSE_DBLCLICK, coord);"," },"," context: this"," });"," }",""," if(cb && Y.Lang.isFunction(cb)) {"," eventQueue.add({"," fn: cb,",""," // by default, the callback runs the node context where"," // simulateGesture method is called."," context: this.node",""," //TODO: Use args to pass error object as 1st param if there is an error."," //args:"," });"," }",""," eventQueue.run();"," },",""," /**"," * The \"flick\" gesture is a specialized \"move\" that has some velocity"," * and the movement always runs either x or y axis. The velocity is calculated"," * with \"distance\" and \"duration\" arguments. If the calculated velocity is"," * below than the minimum velocity, the given duration will be ignored and"," * new duration will be created to make a valid flick gesture."," *"," * @method flick"," * @param {Function} cb The callback to execute when the gesture simulation"," * is completed."," * @param {Array} point A point(relative to the top left corner of the"," * target node element) where the flick gesture should start. The default"," * is the center of the taget node."," * @param {String} axis Either \"x\" or \"y\"."," * @param {Number} distance A distance in pixels to flick."," * @param {Number} duration A duration of the gesture in millisecond."," *"," */"," flick: function(cb, point, axis, distance, duration) {"," var path;",""," point = this._calculateDefaultPoint(point);",""," if(!Y.Lang.isString(axis)) {"," axis = X_AXIS;"," } else {"," axis = axis.toLowerCase();"," if(axis !== X_AXIS && axis !== Y_AXIS) {"," Y.error(NAME+'(flick): Only x or y axis allowed');"," }"," }",""," if(!Y.Lang.isNumber(distance)) {"," distance = DEFAULTS.DISTANCE_FLICK;"," }",""," if(!Y.Lang.isNumber(duration)){"," duration = DEFAULTS.DURATION_FLICK; // ms"," } else {"," if(duration > DEFAULTS.MAX_DURATION_FLICK) {"," duration = DEFAULTS.MAX_DURATION_FLICK;"," }"," }",""," /*"," * Check if too slow for a flick."," * Adjust duration if the calculated velocity is less than"," * the minimum velcocity to be claimed as a flick."," */"," if(Math.abs(distance)/duration < DEFAULTS.MIN_VELOCITY_FLICK) {"," duration = Math.abs(distance)/DEFAULTS.MIN_VELOCITY_FLICK;"," }",""," path = {"," start: Y.clone(point),"," end: ["," (axis === X_AXIS) ? point[0]+distance : point[0],"," (axis === Y_AXIS) ? point[1]+distance : point[1]"," ]"," };",""," this._move(cb, path, duration);"," },",""," /**"," * The \"move\" gesture simulate the movement of any direction between"," * the straight line of start and end point for the given duration."," * The path argument is an object with \"point\", \"xdist\" and \"ydist\" properties."," * The \"point\" property is an array with x and y coordinations(relative to the"," * top left corner of the target node element) while \"xdist\" and \"ydist\""," * properties are used for the distance along the x and y axis. A negative"," * distance number can be used to drag either left or up direction."," *"," * If no arguments are given, it will simulate the default move, which"," * is moving 200 pixels from the center of the element to the positive X-axis"," * direction for 1 sec."," *"," * @method move"," * @param {Function} cb The callback to execute when the gesture simulation"," * is completed."," * @param {Object} path An object with \"point\", \"xdist\" and \"ydist\"."," * @param {Number} duration A duration of the gesture in millisecond."," */"," move: function(cb, path, duration) {"," var convertedPath;",""," if(!Y.Lang.isObject(path)) {"," path = {"," point: this._calculateDefaultPoint([]),"," xdist: DEFAULTS.DISTANCE_MOVE,"," ydist: 0"," };"," } else {"," // convert to the page coordination"," if(!Y.Lang.isArray(path.point)) {"," path.point = this._calculateDefaultPoint([]);"," } else {"," path.point = this._calculateDefaultPoint(path.point);"," }",""," if(!Y.Lang.isNumber(path.xdist)) {"," path.xdist = DEFAULTS.DISTANCE_MOVE;"," }",""," if(!Y.Lang.isNumber(path.ydist)) {"," path.ydist = 0;"," }"," }",""," if(!Y.Lang.isNumber(duration)){"," duration = DEFAULTS.DURATION_MOVE; // ms"," } else {"," if(duration > DEFAULTS.MAX_DURATION_MOVE) {"," duration = DEFAULTS.MAX_DURATION_MOVE;"," }"," }",""," convertedPath = {"," start: Y.clone(path.point),"," end: [path.point[0]+path.xdist, path.point[1]+path.ydist]"," };",""," this._move(cb, convertedPath, duration);"," },",""," /**"," * A base method on top of \"move\" and \"flick\" methods. The method takes"," * the path with start/end properties and duration to generate a set of"," * touch events for the movement gesture."," *"," * @method _move"," * @private"," * @param {Function} cb The callback to execute when the gesture simulation"," * is completed."," * @param {Object} path An object with \"start\" and \"end\" properties. Each"," * property should be an array with x and y coordination (e.g. start: [100, 50])"," * @param {Number} duration A duration of the gesture in millisecond."," */"," _move: function(cb, path, duration) {"," var eventQueue,"," i,"," interval = EVENT_INTERVAL,"," steps, stepX, stepY,"," id = 0,"," touchMove;",""," if(!Y.Lang.isNumber(duration)){"," duration = DEFAULTS.DURATION_MOVE; // ms"," } else {"," if(duration > DEFAULTS.MAX_DURATION_MOVE) {"," duration = DEFAULTS.MAX_DURATION_MOVE;"," }"," }",""," if(!Y.Lang.isObject(path)) {"," path = {"," start: ["," START_PAGEX,"," START_PAGEY"," ],"," end: ["," START_PAGEX + DEFAULTS.DISTANCE_MOVE,"," START_PAGEY"," ]"," };"," } else {"," if(!Y.Lang.isArray(path.start)) {"," path.start = ["," START_PAGEX,"," START_PAGEY"," ];"," }"," if(!Y.Lang.isArray(path.end)) {"," path.end = ["," START_PAGEX + DEFAULTS.DISTANCE_MOVE,"," START_PAGEY"," ];"," }"," }",""," Y.AsyncQueue.defaults.timeout = interval;"," eventQueue = new Y.AsyncQueue();",""," // start"," eventQueue.add({"," fn: function() {"," var coord = {"," pageX: path.start[0],"," pageY: path.start[1],"," clientX: path.start[0],"," clientY: path.start[1]"," },"," touches = this._createTouchList(["," Y.merge({identifier: (id++)}, coord)"," ]);",""," this._simulateEvent(this.target, TOUCH_START, Y.merge({"," touches: touches,"," targetTouches: touches,"," changedTouches: touches"," }, coord));"," },"," timeout: 0,"," context: this"," });",""," // move"," steps = Math.floor(duration/interval);"," stepX = (path.end[0] - path.start[0])/steps;"," stepY = (path.end[1] - path.start[1])/steps;",""," touchMove = function(step) {"," var px = path.start[0]+(stepX * step),"," py = path.start[1]+(stepY * step),"," coord = {"," pageX: px,"," pageY: py,"," clientX: px,"," clientY: py"," },"," touches = this._createTouchList(["," Y.merge({identifier: (id++)}, coord)"," ]);",""," this._simulateEvent(this.target, TOUCH_MOVE, Y.merge({"," touches: touches,"," targetTouches: touches,"," changedTouches: touches"," }, coord));"," };",""," for (i=0; i < steps; i++) {"," eventQueue.add({"," fn: touchMove,"," args: [i],"," context: this"," });"," }",""," // last move"," eventQueue.add({"," fn: function() {"," var coord = {"," pageX: path.end[0],"," pageY: path.end[1],"," clientX: path.end[0],"," clientY: path.end[1]"," },"," touches = this._createTouchList(["," Y.merge({identifier: id}, coord)"," ]);",""," this._simulateEvent(this.target, TOUCH_MOVE, Y.merge({"," touches: touches,"," targetTouches: touches,"," changedTouches: touches"," }, coord));"," },"," timeout: 0,"," context: this"," });",""," // end"," eventQueue.add({"," fn: function() {"," var coord = {"," pageX: path.end[0],"," pageY: path.end[1],"," clientX: path.end[0],"," clientY: path.end[1]"," },"," emptyTouchList = this._getEmptyTouchList(),"," touches = this._createTouchList(["," Y.merge({identifier: id}, coord)"," ]);",""," this._simulateEvent(this.target, TOUCH_END, Y.merge({"," touches: emptyTouchList,"," targetTouches: emptyTouchList,"," changedTouches: touches"," }, coord));"," },"," context: this"," });",""," if(cb && Y.Lang.isFunction(cb)) {"," eventQueue.add({"," fn: cb,",""," // by default, the callback runs the node context where"," // simulateGesture method is called."," context: this.node",""," //TODO: Use args to pass error object as 1st param if there is an error."," //args:"," });"," }",""," eventQueue.run();"," },",""," /**"," * Helper method to return a singleton instance of empty touch list."," *"," * @method _getEmptyTouchList"," * @private"," * @return {TouchList | Array} An empty touch list object."," */"," _getEmptyTouchList: function() {"," if(!emptyTouchList) {"," emptyTouchList = this._createTouchList([]);"," }",""," return emptyTouchList;"," },",""," /**"," * Helper method to convert an array with touch points to TouchList object as"," * defined in http://www.w3.org/TR/touch-events/"," *"," * @method _createTouchList"," * @private"," * @param {Array} touchPoints"," * @return {TouchList | Array} If underlaying platform support creating touch list"," * a TouchList object will be returned otherwise a fake Array object"," * will be returned."," */"," _createTouchList: function(touchPoints) {"," /*"," * Android 4.0.3 emulator:"," * Native touch api supported starting in version 4.0 (Ice Cream Sandwich)."," * However the support seems limited. In Android 4.0.3 emulator, I got"," * \"TouchList is not defined\"."," */"," var touches = [],"," touchList,"," self = this;",""," if(!!touchPoints && Y.Lang.isArray(touchPoints)) {"," if(Y.UA.android && Y.UA.android >= 4.0 || Y.UA.ios && Y.UA.ios >= 2.0) {"," Y.each(touchPoints, function(point) {"," if(!point.identifier) {point.identifier = 0;}"," if(!point.pageX) {point.pageX = 0;}"," if(!point.pageY) {point.pageY = 0;}"," if(!point.screenX) {point.screenX = 0;}"," if(!point.screenY) {point.screenY = 0;}",""," touches.push(document.createTouch(Y.config.win,"," self.target,"," point.identifier,"," point.pageX, point.pageY,"," point.screenX, point.screenY));"," });",""," touchList = document.createTouchList.apply(document, touches);"," } else if(Y.UA.ios && Y.UA.ios < 2.0) {"," Y.error(NAME+': No touch event simulation framework present.');"," } else {"," // this will inclide android(Y.UA.android && Y.UA.android < 4.0)"," // and desktops among all others.",""," /*"," * Touch APIs are broken in androids older than 4.0. We will use"," * simulated touch apis for these versions."," */"," touchList = [];"," Y.each(touchPoints, function(point) {"," if(!point.identifier) {point.identifier = 0;}"," if(!point.clientX) {point.clientX = 0;}"," if(!point.clientY) {point.clientY = 0;}"," if(!point.pageX) {point.pageX = 0;}"," if(!point.pageY) {point.pageY = 0;}"," if(!point.screenX) {point.screenX = 0;}"," if(!point.screenY) {point.screenY = 0;}",""," touchList.push({"," target: self.target,"," identifier: point.identifier,"," clientX: point.clientX,"," clientY: point.clientY,"," pageX: point.pageX,"," pageY: point.pageY,"," screenX: point.screenX,"," screenY: point.screenY"," });"," });",""," touchList.item = function(i) {"," return touchList[i];"," };"," }"," } else {"," Y.error(NAME+': Invalid touchPoints passed');"," }",""," return touchList;"," },",""," /**"," * @method _simulateEvent"," * @private"," * @param {HTMLElement} target The DOM element that's the target of the event."," * @param {String} type The type of event or name of the supported gesture to simulate"," * (i.e., \"click\", \"doubletap\", \"flick\")."," * @param {Object} options (Optional) Extra options to copy onto the event object."," * For gestures, options are used to refine the gesture behavior."," */"," _simulateEvent: function(target, type, options) {"," var touches;",""," if (touchEvents[type]) {"," if(SUPPORTS_TOUCH) {"," Y.Event.simulate(target, type, options);"," } else {"," // simulate using mouse events if touch is not applicable on this platform."," // but only single touch event can be simulated."," if(this._isSingleTouch(options.touches, options.targetTouches, options.changedTouches)) {"," type = {"," touchstart: MOUSE_DOWN,"," touchmove: MOUSE_MOVE,"," touchend: MOUSE_UP"," }[type];",""," options.button = 0;"," options.relatedTarget = null; // since we are not using mouseover event.",""," // touchend has none in options.touches."," touches = (type === MOUSE_UP)? options.changedTouches : options.touches;",""," options = Y.mix(options, {"," screenX: touches.item(0).screenX,"," screenY: touches.item(0).screenY,"," clientX: touches.item(0).clientX,"," clientY: touches.item(0).clientY"," }, true);",""," Y.Event.simulate(target, type, options);",""," if(type == MOUSE_UP) {"," Y.Event.simulate(target, MOUSE_CLICK, options);"," }"," } else {"," Y.error(\"_simulateEvent(): Event '\" + type + \"' has multi touch objects that can't be simulated in your platform.\");"," }"," }"," } else {"," // pass thru for all non touch events"," Y.Event.simulate(target, type, options);"," }"," },",""," /**"," * Helper method to check the single touch."," * @method _isSingleTouch"," * @private"," * @param {TouchList} touches"," * @param {TouchList} targetTouches"," * @param {TouchList} changedTouches"," */"," _isSingleTouch: function(touches, targetTouches, changedTouches) {"," return (touches && (touches.length <= 1)) &&"," (targetTouches && (targetTouches.length <= 1)) &&"," (changedTouches && (changedTouches.length <= 1));"," }","};","","/*"," * A gesture simulation class."," */","Y.GestureSimulation = Simulations;","","/*"," * Various simulation default behavior properties. If user override"," * Y.GestureSimulation.defaults, overriden values will be used and this"," * should be done before the gesture simulation."," */","Y.GestureSimulation.defaults = DEFAULTS;","","/*"," * The high level gesture names that YUI knows how to simulate."," */","Y.GestureSimulation.GESTURES = gestureNames;","","/**"," * Simulates the higher user level gesture of the given name on a target."," * This method generates a set of low level touch events(Apple specific gesture"," * events as well for the iOS platforms) asynchronously. Note that gesture"," * simulation is relying on `Y.Event.simulate()` method to generate"," * the touch events under the hood. The `Y.Event.simulate()` method"," * itself is a synchronous method."," *"," * Users are suggested to use `Node.simulateGesture()` method which"," * basically calls this method internally. Supported gestures are `tap`,"," * `doubletap`, `press`, `move`, `flick`, `pinch` and `rotate`."," *"," * The `pinch` gesture is used to simulate the pinching and spreading of two"," * fingers. During a pinch simulation, rotation is also possible. Essentially"," * `pinch` and `rotate` simulations share the same base implementation to allow"," * both pinching and rotation at the same time. The only difference is `pinch`"," * requires `start` and `end` option properties while `rotate` requires `rotation`"," * option property."," *"," * The `pinch` and `rotate` gestures can be described as placing 2 fingers along a"," * circle. Pinching and spreading can be described by start and end circles while"," * rotation occurs on a single circle. If the radius of the start circle is greater"," * than the end circle, the gesture becomes a pinch, otherwise it is a spread spread."," *"," * @example"," *"," * var node = Y.one(\"#target\");"," *"," * // double tap example"," * node.simulateGesture(\"doubletap\", function() {"," * // my callback function"," * });"," *"," * // flick example from the center of the node, move 50 pixels down for 50ms)"," * node.simulateGesture(\"flick\", {"," * axis: y,"," * distance: -100"," * duration: 50"," * }, function() {"," * // my callback function"," * });"," *"," * // simulate rotating a node 75 degrees counter-clockwise"," * node.simulateGesture(\"rotate\", {"," * rotation: -75"," * });"," *"," * // simulate a pinch and a rotation at the same time."," * // fingers start on a circle of radius 100 px, placed at top/bottom"," * // fingers end on a circle of radius 50px, placed at right/left"," * node.simulateGesture(\"pinch\", {"," * r1: 100,"," * r2: 50,"," * start: 0"," * rotation: 90"," * });"," *"," * @method simulateGesture"," * @param {HTMLElement|Node} node The YUI node or HTML element that's the target"," * of the event."," * @param {String} name The name of the supported gesture to simulate. The"," * supported gesture name is one of \"tap\", \"doubletap\", \"press\", \"move\","," * \"flick\", \"pinch\" and \"rotate\"."," * @param {Object} [options] Extra options used to define the gesture behavior:"," *"," * Valid options properties for the `tap` gesture:"," *"," * @param {Array} [options.point] (Optional) Indicates the [x,y] coordinates"," * where the tap should be simulated. Default is the center of the node"," * element."," * @param {Number} [options.hold=10] (Optional) The hold time in milliseconds."," * This is the time between `touchstart` and `touchend` event generation."," * @param {Number} [options.times=1] (Optional) Indicates the number of taps."," * @param {Number} [options.delay=10] (Optional) The number of milliseconds"," * before the next tap simulation happens. This is valid only when `times`"," * is more than 1."," *"," * Valid options properties for the `doubletap` gesture:"," *"," * @param {Array} [options.point] (Optional) Indicates the [x,y] coordinates"," * where the doubletap should be simulated. Default is the center of the"," * node element."," *"," * Valid options properties for the `press` gesture:"," *"," * @param {Array} [options.point] (Optional) Indicates the [x,y] coordinates"," * where the press should be simulated. Default is the center of the node"," * element."," * @param {Number} [options.hold=3000] (Optional) The hold time in milliseconds."," * This is the time between `touchstart` and `touchend` event generation."," * Default is 3000ms (3 seconds)."," *"," * Valid options properties for the `move` gesture:"," *"," * @param {Object} [options.path] (Optional) Indicates the path of the finger"," * movement. It's an object with three optional properties: `point`,"," * `xdist` and `ydist`."," * @param {Array} [options.path.point] A starting point of the gesture."," * Default is the center of the node element."," * @param {Number} [options.path.xdist=200] A distance to move in pixels"," * along the X axis. A negative distance value indicates moving left."," * @param {Number} [options.path.ydist=0] A distance to move in pixels"," * along the Y axis. A negative distance value indicates moving up."," * @param {Number} [options.duration=1000] (Optional) The duration of the"," * gesture in milliseconds."," *"," * Valid options properties for the `flick` gesture:"," *"," * @param {Array} [options.point] (Optional) Indicates the [x, y] coordinates"," * where the flick should be simulated. Default is the center of the"," * node element."," * @param {String} [options.axis='x'] (Optional) Valid values are either"," * \"x\" or \"y\". Indicates axis to move along. The flick can move to one of"," * 4 directions(left, right, up and down)."," * @param {Number} [options.distance=200] (Optional) Distance to move in pixels"," * @param {Number} [options.duration=1000] (Optional) The duration of the"," * gesture in milliseconds. User given value could be automatically"," * adjusted by the framework if it is below the minimum velocity to be"," * a flick gesture."," *"," * Valid options properties for the `pinch` gesture:"," *"," * @param {Array} [options.center] (Optional) The center of the circle where"," * two fingers are placed. Default is the center of the node element."," * @param {Number} [options.r1] (Required) Pixel radius of the start circle"," * where 2 fingers will be on when the gesture starts. The circles are"," * centered at the center of the element."," * @param {Number} [options.r2] (Required) Pixel radius of the end circle"," * when this gesture ends."," * @param {Number} [options.duration=1000] (Optional) The duration of the"," * gesture in milliseconds."," * @param {Number} [options.start=0] (Optional) Starting degree of the first"," * finger. The value is relative to the path of the north. Default is 0"," * (i.e., 12:00 on a clock)."," * @param {Number} [options.rotation=0] (Optional) Degrees to rotate from"," * the starting degree. A negative value means rotation to the"," * counter-clockwise direction."," *"," * Valid options properties for the `rotate` gesture:"," *"," * @param {Array} [options.center] (Optional) The center of the circle where"," * two fingers are placed. Default is the center of the node element."," * @param {Number} [options.r1] (Optional) Pixel radius of the start circle"," * where 2 fingers will be on when the gesture starts. The circles are"," * centered at the center of the element. Default is a fourth of the node"," * element width or height, whichever is smaller."," * @param {Number} [options.r2] (Optional) Pixel radius of the end circle"," * when this gesture ends. Default is a fourth of the node element width or"," * height, whichever is smaller."," * @param {Number} [options.duration=1000] (Optional) The duration of the"," * gesture in milliseconds."," * @param {Number} [options.start=0] (Optional) Starting degree of the first"," * finger. The value is relative to the path of the north. Default is 0"," * (i.e., 12:00 on a clock)."," * @param {Number} [options.rotation] (Required) Degrees to rotate from"," * the starting degree. A negative value means rotation to the"," * counter-clockwise direction."," *"," * @param {Function} [cb] The callback to execute when the asynchronouse gesture"," * simulation is completed."," * @param {Error} cb.err An error object if the simulation is failed."," * @for Event"," * @static"," */","Y.Event.simulateGesture = function(node, name, options, cb) {",""," node = Y.one(node);",""," var sim = new Y.GestureSimulation(node);"," name = name.toLowerCase();",""," if(!cb && Y.Lang.isFunction(options)) {"," cb = options;"," options = {};"," }",""," options = options || {};",""," if (gestureNames[name]) {"," switch(name) {"," // single-touch: point gestures"," case 'tap':"," sim.tap(cb, options.point, options.times, options.hold, options.delay);"," break;"," case 'doubletap':"," sim.tap(cb, options.point, 2);"," break;"," case 'press':"," if(!Y.Lang.isNumber(options.hold)) {"," options.hold = DEFAULTS.HOLD_PRESS;"," } else if(options.hold < DEFAULTS.MIN_HOLD_PRESS) {"," options.hold = DEFAULTS.MIN_HOLD_PRESS;"," } else if(options.hold > DEFAULTS.MAX_HOLD_PRESS) {"," options.hold = DEFAULTS.MAX_HOLD_PRESS;"," }"," sim.tap(cb, options.point, 1, options.hold);"," break;",""," // single-touch: move gestures"," case 'move':"," sim.move(cb, options.path, options.duration);"," break;"," case 'flick':"," sim.flick(cb, options.point, options.axis, options.distance,"," options.duration);"," break;",""," // multi-touch: pinch/rotation gestures"," case 'pinch':"," sim.pinch(cb, options.center, options.r1, options.r2,"," options.duration, options.start, options.rotation);"," break;"," case 'rotate':"," sim.rotate(cb, options.center, options.r1, options.r2,"," options.duration, options.start, options.rotation);"," break;"," }"," } else {"," Y.error(NAME+': Not a supported gesture simulation: '+name);"," }","};","","","}, '@VERSION@', {\"requires\": [\"async-queue\", \"event-simulate\", \"node-screen\"]});","","}());"]};