Commit 76b01ae8 authored by Chris Cunningham's avatar Chris Cunningham Committed by Commit Bot

WebCodecs: Fuzzing VideoDecoder

Change-Id: I82a28a93cdec01e587c2f281561af041010b9446
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2364075
Commit-Queue: Chrome Cunningham <chcunningham@chromium.org>
Reviewed-by: default avatarJeremy Roman <jbroman@chromium.org>
Reviewed-by: default avatarThomas Guilbert <tguilbert@chromium.org>
Cr-Commit-Position: refs/heads/master@{#800291}
parent d6bf2029
......@@ -553,4 +553,22 @@ if (use_libfuzzer) {
"//third_party/protobuf:protobuf_lite",
]
}
fuzzer_test("webcodecs_video_decoder_fuzzer") {
sources = [
"webcodecs/fuzzer_utils.cc",
"webcodecs/fuzzer_utils.h",
"webcodecs/video_decoder_fuzzer.cc",
]
seed_corpus = "webcodecs/fuzzer_seed_corpus/video_decoder"
deps = [
":modules",
"//third_party/blink/renderer/modules/webcodecs:fuzzer_protos",
"//third_party/blink/renderer/platform:blink_fuzzer_test_support",
"//third_party/libprotobuf-mutator",
"//third_party/protobuf:protobuf_lite",
]
}
}
......@@ -27,6 +27,10 @@ specific_include_rules = {
"+testing/libfuzzer/proto/lpm_interface.h",
"+third_party/protobuf/src/google/protobuf/repeated_field.h",
],
"video_decoder_fuzzer.cc": [
"+base/run_loop.h",
"+testing/libfuzzer/proto/lpm_interface.h",
],
"canvas_fuzzer.cc": [
"+base/test/bind_test_util.h",
]
......
......@@ -3,6 +3,8 @@
# found in the LICENSE file.
import("//third_party/blink/renderer/modules/modules.gni")
import("//third_party/libprotobuf-mutator/fuzzable_proto_library.gni")
import("//third_party/protobuf/proto_library.gni")
blink_modules_sources("webcodecs") {
sources = [
......@@ -84,3 +86,7 @@ source_set("unit_tests") {
data = [ "//third_party/blink/web_tests/images/resources/" ]
}
fuzzable_proto_library("fuzzer_protos") {
sources = [ "fuzzer_inputs.proto" ]
}
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
syntax = "proto2";
package wc_fuzzer;
message ConfigureVideoDecoder {
// String describing codec (e.g. "vp09.00.10.08")
optional string codec = 1;
optional bytes description = 2;
}
message EncodedVideoChunk {
enum EncodedVideoChunkType {
KEY = 0;
DELTA = 1;
}
optional EncodedVideoChunkType type = 1;
optional uint64 timestamp = 2;
optional uint64 duration = 3;
optional bytes data = 4;
}
message DecodeVideo {
optional EncodedVideoChunk chunk = 1;
}
message Flush {
optional bool wait_for_promise = 1;
}
message Reset {}
message Close {}
message VideoDecoderApiInvocation {
oneof Api {
ConfigureVideoDecoder configure = 1;
DecodeVideo decode = 2;
Flush flush = 3;
Reset reset = 4;
Close close = 5;
}
}
message VideoDecoderApiInvocationSequence {
repeated VideoDecoderApiInvocation invocations = 1;
}
# Simulates reasonable (mis)usage of VideoDecoder
# configure(h264)
# decode() a real key then delta frame
# flush(), reset(), re configure(h264)
# decode() the delta frame again (trigger decode error)
# close() (trigger exception (already closed by error))
invocations: [
{
configure {
codec: 'avc1.64000c',
description: "\001d\000\014\377\341\000\031gd\000\014\254\331AA\373\001\020\000\000\003\000\020\000\000\003\001@\361B\231`\001\000\006h\353\343\313\"\300\375\370\370\000"
}
},
{
decode {
chunk {
type: KEY,
timestamp: 0,
duration: 33333,
# H.264 I frame
data: "\000\000\002\256\006\005\377\377\252\334E\351\275\346\331H\267\226,\330 \331#\356\357x264 - core 155 r2917 0a84d98 - H.264/MPEG-4 AVC codec - Copyleft 2003-2018 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=7 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=10 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00\000\200\000\000\014\361e\210\204\000\021\377\376\367\210\0372\313o\234j\327L\204\000\222\213\017\374\345;\r\376]6\305\027~\244J\277\360\274o\371U\212\242.u\376\361\357\246\375\" \005\271\317q(\222\312U\323\311\357\013\024\020d\017\363B\224dv\357d\342X\255\203\214\034\230\357\216\274\320M8!\361\247f\246B\000\257h\372\321\275^\217\024\361n\216\344\251\255e\231\0036\217\326\234\332\031,\250\316\250^\364\341\355\"\251A-\326\332B\232\026@s\305\016[.b\321\0022&}\241\243>\262\341\025\237^\003\332I\301\035w#fl\347Q|\334\014D`\001;\236\325\235\247\257*{.M\200\014q\367\367\223\347\265w@`J\332jI}\311\367\271\375v?\333\327\016\224\271\311\212\006\314\340\022I\342\310\252;\254\023d\233\334\265\376\343,^k<\331\226\200\2366\274c\267B\002\354T;\001\211\327\3711\274k{\236O\331\021-\363\334\226\235c\000\277+W\307E9\326\335\200\251\320c+\033)\2733\0302\010>^\016R\200\336\312V\373L\030\0270\032\023$\250Ca\261\254\2425\345\3107\"\206\315\227Sw\215m\\\005hG\350\013}B\003\233\235\271\336\201\r[\216M\351*$\020\034\327\325\362\304Q\317\225^\206b@\227\207\317\022\207?\323:\342\0179\260\2325%\246t\301:\257\230\210\327\301~\262\270C\351/{zF%\201\2371\333\205\243W\364?\355k\316\334WV\227\220s\366\311\355E\366\034r\3672\355\346\236|Jk\2267\331\317\270\263\230\333\357\351Z\210\371\007\274\256x\372\036\203N\224.,D\r\030\355Q*\326\322d\246\005\003\344\224{gM6\335<\307\3250\225\003P\253\247\3461\226\345%\377\273\330\033\016\343\333\211/\344\276\243\323\323\362\226i\355\351\3244\354\254\t\366\r \234\262A\215\350~_\272kTx%\026\272z\022I\010G\272O@a\252\254\332i\022#\241\267\210V+\361\324\351\006\233\3222\254\352\334\257s,,[\r\273\331\311I\"d.\013a\333f/?\341\307\367V:\220.Y\006_\207\327\207\366=bK\345\027\240\226\337a{\247\354`\001,\022\346U\272\306\306\t}-)\236&b.\r0\206[\214\302\265U\327\374DMW\0030\253|\247\241\001\360\036\327\232&\\\301\003\376\334\323sC\220\036\032J;G\376pg\224cG\021t\246\021]dK\253\320\"\306H8\323\000\370\371\326z\231D\302\326c\034\224T>\'\277\275\273\325E\364\205\267^\02612F\016\322Gu\244r\001P>4#\220\342\350\344\243;\\\244\355\307\235\323\0176j\2340J\261\023\232A\026A\343\210\374\314\002\374\223\363\244\177\274\371\021\270f\3263\312\333\261/\224\014\017}2M\014\265\253I1k\226\322\306\201\016\217\215\312\0147\255\234\020\311ec\001>\316_B\270E\230\240\241\231\214\322\247\364\217\200\321]\004p.\331hNQA\207?C\274\373]f\020\335^\226\245\337\320\005\342\316\314\362[D\213\361E~\363c\365\31721#\336{\010Z\272\225\007_\023Y\035\033\034\010\007\346\300\027{\000\357\'Y\001\2338\013\r\026\\,\265\341%\t\2278R\321\303\232N\356\377\313R\032\202k\314\372M\\1&\022\305Xgx\004\202\246r\264\334\177\0224\350W!\235\261\310\024\261\342M\352-\2458*B\307b\277\0064.\261<e\007\325~?h\302\235G\310\215\217\270\037\204\313%s\341\347\273\375-\316\212\243\r\377\213\271\317\004bG\231\354\212_R\325\211\326\216\033\310V:\234\370\224_>\2519\210>\275M<O&\205e\272\027\026:Y\035\310\351\217\305&\273\345\031\276\261\355\317\260\022\001\014\303\264\256=f\313\275KOt\3315\350\027v}\033Ixv=\233\002\030T\033\254\317A-\331|\253C\370\372\246!L\335\261G\306\202\025\374C\020\312M1\373Do(Q\272\244\037\341b\205lk\2466/S\323\304\241\323Vs6+X\332E/\264\323\007\036\002||9&\013\302L@\305\200] \206\331GK\371\243{\325\274\247\340\374\273*\361+\362\322ZUq;\"\217\377\212\322\234\227\352\203\t\372y~\372\223{\272)\332#^\t\030\251\036\304\340\0261\225-\300c\303\033vy\266]\014\'S\323\rP\355\000\037\030\335\017\023\322\222\237\317\271hp\306g\010\2145!\3112\263\302\243Y\253\204<h\002\317\373\313\016\354\302\272\272=%#\206\325F}\037\230omM\332\221\222\201K\314\210\340\017v\005\021MS\031\232\014\310;\256T\227\355\200\245B\331\307\303h\016\036b\243=\377\373\2169v\247\375\275\245\014\244\207t\327\305\244\277\345Fs\361\370\024{g\367\300\\\375h5\242|}\210%\344K\035\177\340j\216j\204y\200\343B4j\351\017\246\017AHz&\373\247[\205Q\231\276V\236pm\273\355\363\222\037\325:L!\2062\2317\020\205e\226 mf\306\346C\242(\361\334\337\365\275\313\230\026\227\243\324\225\347\226\225f\030\231\322\031h_y\377?\250\323\306\376\300\270\236M\257\220Q\251y\314\335\361?\377\n\316P\337i\206\373\321.Fu\372\004\316\335\214\325V\331kf#\363\365\221\253\356\247\314\201-\363\227\321(\373\255{\204BZ\343\037\002\266\030\236uCN\356\236\020\275\023xb\2063\375\314\3217bvB\0061\023<&\007[\370\322s@\236\\]L\340\350-\225\"\001\246\324\021=\331I(iF\215\017b\271z=/\005\325\271\375\004R\274J\027|U\016P\017)\355\346\022b\202\306)V\031g\2338\367!V\240>0\253-\232~\260\357x\215@\335\217\353\326D\010R\232\307\317\257\3137\310\n\3673#\266\341\311\247\265%\231\342\355\005\266\010Z\265\331\326/M\002\314h\014\026\211\0001\346O\253\367\366\324f\211\246%\314\002\007\034\034=;\255\234\276\370\301v\320\263P\237\223%6\210\375\247\025\225\022\332\272\360#U\237S\207\230\030\306l\311\250X]G\313NK\025\333\313\226\275\203\2201\004I\272j\314\271\266\366I=8\2546\341:\244k\231aqjI\265\241\327\326+h2\303\354\0068\240\013\317\030p\035\306\263\255\366\n\233\235\034\272V\302\270\t,\3056\346E\370\274v\256\3475F\332\316,\266\207Y\241\n\326\370CM\rg\353\242\315\211\204\332\221\036\302\n\304QY\260\3235\246\313\272\270L\347x\222\327\250w\334\201\241\000\233\001,\272\264SujV\214\377\177V\014\207\206\206V\376u\304\204Ko\312dG\376\006\272\022\322\024\035\235\303\236w\367,2f\327R\027\002?@\235\265bU+\311\347\355\326\343\036\324\270\246\010;\247J\210\373Ul\001e\306v\207\'\257\370\327U\266\355SIp4\365\202\253W~g\331\255;\256M\306 2 ^~mV\241v\235\315x\321,h\315\004\305\001\313\301\021\335\020\3254\031\200\322\313_\\\230\263#\014\367\346%)B\r=}s\332F\2534\253d\t\301VZ~\035O\022\\\240\325\03793\t\236(\r9\315\375~\332bI\305\\\270\300\323\250$0\014\234O\374\002\264\322\323}\324\253\211\033\272\325r!KL\246\310\\\031\346m\267\204\263\354\r\204\253V\210\255x;\220\006\254\322g\023\341\306\266\377\366qG\006Mz\221\022\237\226s\370\262@A<@SO\263}\310\342Z\016\00563n\205{\276\000x\275\002F\002\2779\275\267\332e\346o\037\036<\r\331\271\320H\221|\017\030C\343\n\022\373jT\300\366\371\243\241\310\306I\272\252\260\341\371\362\367l\304CSd\352+\274%\276\213\370\354\207\250\234\264t\335\316\363}\361jg+\313\276\362A\254\371r8Z\331\351\377O\313O\001M\276\247\177\370\007\032:>4\264AOH\021\316\002\211\316\334\302C\333n\347\2022\223\2233S\207\303\270n\200\270\341B\307\274$\222\252\235\325\025F\024\315\227\3041&\223\031\026\366\244\201jp\027\3772\236\247Q\3450\025\342\032\342\277O\325\220_\276\355On$\320\017\201\226\343o\213l\033\325P\322\033\2636\260\014*:\356c\332\357\307\016tpu\2536\206\347\3401\364@\007Z\320\345\231\320\021\3300\372!\243w\236E\364\'\362]:\263\315\235X\022\343E\247?_{\271\233}\200\022\027_\256V\0041\"\313\202$\027|\300\257%\374\311E-\034\226\217:\213\224\247C$\321\275\364\344\000\002\355\245\366}?\211*D\315a\265\2705\352\216\r\037i\351vj\313\363\354\325I[\233}\354h\347\254\226\270C\2252L\341Z*%\031w\236\'W\023\226\273\3515]<\331\312\275\027\3746\0167\344\250\3344?\233\314\024\014Y\2049\200\215\337 \307z\333\315z\260\275\nT\365Z\212\"q\322\236w\253T\233=U\213\335\217D\351\302ug\032\256\2129\313\256\206{<\341\3017\366L\253^\275\221\026\202\2024Y\217\3722hs\222\327H+\3643\t\226\020\242\200\326q\003\254\326\265O\334b\207-\272\350\361\332\266\361\203]\236lq0\\Qb$\332\241\020{\245\216\034\270W\266\3237\356\234\260\354\210\3311\262\005S\013]>|w\214>\341e\020c\333\314\264\020\214u\023\271e\013l\000}\005\007\203C.\335`V\223\330d\317\315\306\017\326<\252\"\020\367\263\211q\031\032p|\366\'O\312\311\274\2546:\301T\035\246,#\310d\263\276w\366\323\222\302\346\214\322n\001>\263\342\236\350\330\342\232\265_;\020y\312\234\264\301\360\020\355\321\203\n\016p\212\327\335X\377\267Z$\271R\356\301\343\231\315\314\350\263u\270HkWT\272D2\317 \302\177\255\027\233\375\224iy\252p4\010\256\235\213~}C\030 \032\235\352\207#=p\317\222\177\306\356\035\252\014(\330\265\ra\255\225|\316\263\275)\326\024s\247\000\031h\020\347\200\027\360\023:_\301P\251LC\213\215\361\177rP||? I]\373\206\337W\277\2479\014/\264W\337u\256\220\216A\334\362\367j\020\356\250\t\375\270\244\274;Q\033\301\216Ib3\335\2575v\300\264\204\013\262_\257}\223]\371\327\351\017Hg<\232\264[L\367\341\035\023m\020\324\376\251W-\335\340\360\003\367\025c*\260\250\217\375\363!\013\345?\307@\243\304Xi\'\226\307lF\344.3R\356\177\217H\010\361\330\214<?\327\26763\253\t\232u~\331\361\246\025\312\266\3178s\005\200\330#\213e9\263\364\210\014\272O\365\006J1r\r\240\345\026\3711\202\354?\206\234P\343N\223\331\257t\310\2758\375\242L_W^IC\345\301\365t\353\243\n\334\217\347[\366d\323\201\354u\320$E\226b\036^\216T\003\300tS\346\233[p\367*-?4\335!\246\377a\364\345P\004\016\333AG\\}\376Ff5\273y\233_\332\337Q\210\324\235\301\373Rx\004\315\016\\\2230\224\272\300>W\315\033\231S\266Yf4*E\260\370\340j{\261\035\024C.v\307\256\032\345\275\000G\001$\335\237\352\275\013\245\2651\312\376\002\205\214\213\262\276\370kA\033O\021\252$\252\320p\364Q\212\311Ax\203\334~\337\353\324v4@\366*\310\232\330#\327\020O9\023y\217\367u\002*\343\201OH|\'\260\211=\025\267\317$\326\262\304\266\220\202\007\366V\007\261\234N\246%\225(e\364\205}\305\303\2203\323\001Z\367\325\016g\\\215\263\237\007\023k\345\177\347w\221\301\316.L\n\235\214.m\213\223\237\242\377\306*j&7#9sv\321\nN\375\273\315QU\320\034\220i\0356o\237\346\202\201\306\003\373\265\213;{\205=-\352\2325pO\341V\014y_0\341*Rk\216\351\244\206\347\375\302/\202\355Ue\2444f\203\026\256\356\005\034;Z\254\337!\232]G\3138\266_\357\251\207q\377\3250}\324n\243\017\373\006\224\034y\320\253=\r\264\226\332l\010\3029\212\215S6\300P\037\315\3000\354.\214\r\322\016\3467\000\202o\377\222\035<\026Q\031\022\215\371\300G\345\240\306\263\266@\270c\367\214\035__\241Ol\321\252\263\362\227\020\023\371"
}
}
},
{
decode {
chunk {
type: DELTA,
timestamp: 33333,
duration: 33333,
# H.264 P frame
data: "\000\000\003\232A\232$lA\017\376\252U\000\310\361d@\002\037\t\356]KJ\224\327\214\274 \032\024u\370\323)\347\226\247\365&\235\315\037\334\034\257\342\020n*\221\327P\340Q\264\n\27339O`\333\231g\337\214\031E\220-b3\226\214\341\336\332\201\326Z\326y\251)\274\021~\311\262\036E\'\367\300H3\206\371R\300\250+3^&\251\245\277a\206\006\263\210D!iE\2235\261\235p5\327\266\245\2366\212\337\023X\363\372\263zi\347L\215N\033v\340\317\2407\000\346$\225]\211k:\254ytD!\237\034\241\242&\037C3\'\026y\335Bh\202\242S\264]?+dN\373Ki\342p\370o\270\007\263\204\343\356\207\2135C/U\236p%&\300v\035id\013\215\350G\270\327\237\014y\246\347\352O\275\220\350\222.\270\327\371\343?\372\210\\P\341G\306\027\272df\201}\315\003 *8\032!,e\237\"\261[\352\223\'\036\312\202\275Y\270P\006\271B\310\326\255\245m\262P\273\'\375\235\254\3109\332-\360+fXX\271\356\366\257\277\3039\351?\245\336\324\271\266\353D\321\243:\312\334\217l\177\374}!\304\036\213\307\372\016\007\334\303\003i+x\303\340\027\366(_z\346\251\243@\3460\202\337\342\275)\203\237~\345\316\237\202O#\251\347C\252\261\345\232Q\226\213\365\304=\243q\251I\323\332\340\303\007lca\026\335=l\216\360\263\266\375t\342Rb\276\3505i\261\356\313\216\321\232\337\310\223VDP\033\247k\005\332\3474\357\271\3611\251\203\326\367\247\301R\243\374\315\223\252hZ\316\322n\220o^\273}\375\025X\317\237\215.\236\037\032w*\376Q\300N)\177\245\234\033\004\247N\347\376g\234\256\030GL\226\245\353\250\333@\362\215p\256a\313a\243\223\347V\210@\357yV\025\251,C\"\3330\315d\026Q\002!\031\315\251\013q\232f\231b\207\003\250\010\253=U))\357\275L0\242\267m\255\366\336\027\037\266C\307\342\200.8\353M\344<\0136\3501Qo\325\365\373\310\241%j\277,-\362\265E\312w\350\221\351\306a/z83q/]KE\r\031\332\003\325\022\t\221\355Ph\275\312\240\223c\200\1776cu\250\320(dy\266$p\320\032!\226\221\247\213\274\223h\'\342\3458\215\341\030\204aujK\000\021\212\3109P\263\027\026\376i\300\006\201\227p\t\344\005\006g\361\226\311\272\037ln\242\347\331U\276\345\267\340(M\332\376?\342\335\3060\376\023\266\377*8\200\002:\223\352\210\350\005\202\206u\321\016\315I\225\207\026\337\253c\216u\033\243rB\366Cb]Z\375\367S?\331\313\036x\335\311Gc\233\034}\031!mdq\315\371\242Bz\244\025\350\000\323b\274&\244/ 2#4K_:>\375\322\230\277>\313\231\265\345\203}\363H\305W% \0265\214\243ZB\316\3124W\037\326e\005wl\210\223}?\250\330\010\233\320\366\347\342\305\264\020\304^\374&\203j\224\312\271\337\211\001\376\276|\265\335\216\345d\363\025y\353N\367XRa\321\334So\016\236\254Jr\200\257H\n\310x\300HF\303\031Y\240pW\026\027\247BN\303F\356\026\357\177\367d\206%\356\375\212=1\235\032\263\001\247\305\2144\226fE\377\024\351\022\326W\264\366\302uQ\313\006\272\376\211\212\263\263\212m\251V\332"
}
}
},
{
flush {}
},
{
reset {}
},
{
configure {
codec: 'avc1.64000c',
description: "\001d\000\014\377\341\000\031gd\000\014\254\331AA\373\001\020\000\000\003\000\020\000\000\003\001@\361B\231`\001\000\006h\353\343\313\"\300\375\370\370\000"
}
},
{
decode {
chunk {
type: DELTA,
timestamp: 33333,
duration: 33333,
# H.264 P frame
data: "\000\000\003\232A\232$lA\017\376\252U\000\310\361d@\002\037\t\356]KJ\224\327\214\274 \032\024u\370\323)\347\226\247\365&\235\315\037\334\034\257\342\020n*\221\327P\340Q\264\n\27339O`\333\231g\337\214\031E\220-b3\226\214\341\336\332\201\326Z\326y\251)\274\021~\311\262\036E\'\367\300H3\206\371R\300\250+3^&\251\245\277a\206\006\263\210D!iE\2235\261\235p5\327\266\245\2366\212\337\023X\363\372\263zi\347L\215N\033v\340\317\2407\000\346$\225]\211k:\254ytD!\237\034\241\242&\037C3\'\026y\335Bh\202\242S\264]?+dN\373Ki\342p\370o\270\007\263\204\343\356\207\2135C/U\236p%&\300v\035id\013\215\350G\270\327\237\014y\246\347\352O\275\220\350\222.\270\327\371\343?\372\210\\P\341G\306\027\272df\201}\315\003 *8\032!,e\237\"\261[\352\223\'\036\312\202\275Y\270P\006\271B\310\326\255\245m\262P\273\'\375\235\254\3109\332-\360+fXX\271\356\366\257\277\3039\351?\245\336\324\271\266\353D\321\243:\312\334\217l\177\374}!\304\036\213\307\372\016\007\334\303\003i+x\303\340\027\366(_z\346\251\243@\3460\202\337\342\275)\203\237~\345\316\237\202O#\251\347C\252\261\345\232Q\226\213\365\304=\243q\251I\323\332\340\303\007lca\026\335=l\216\360\263\266\375t\342Rb\276\3505i\261\356\313\216\321\232\337\310\223VDP\033\247k\005\332\3474\357\271\3611\251\203\326\367\247\301R\243\374\315\223\252hZ\316\322n\220o^\273}\375\025X\317\237\215.\236\037\032w*\376Q\300N)\177\245\234\033\004\247N\347\376g\234\256\030GL\226\245\353\250\333@\362\215p\256a\313a\243\223\347V\210@\357yV\025\251,C\"\3330\315d\026Q\002!\031\315\251\013q\232f\231b\207\003\250\010\253=U))\357\275L0\242\267m\255\366\336\027\037\266C\307\342\200.8\353M\344<\0136\3501Qo\325\365\373\310\241%j\277,-\362\265E\312w\350\221\351\306a/z83q/]KE\r\031\332\003\325\022\t\221\355Ph\275\312\240\223c\200\1776cu\250\320(dy\266$p\320\032!\226\221\247\213\274\223h\'\342\3458\215\341\030\204aujK\000\021\212\3109P\263\027\026\376i\300\006\201\227p\t\344\005\006g\361\226\311\272\037ln\242\347\331U\276\345\267\340(M\332\376?\342\335\3060\376\023\266\377*8\200\002:\223\352\210\350\005\202\206u\321\016\315I\225\207\026\337\253c\216u\033\243rB\366Cb]Z\375\367S?\331\313\036x\335\311Gc\233\034}\031!mdq\315\371\242Bz\244\025\350\000\323b\274&\244/ 2#4K_:>\375\322\230\277>\313\231\265\345\203}\363H\305W% \0265\214\243ZB\316\3124W\037\326e\005wl\210\223}?\250\330\010\233\320\366\347\342\305\264\020\304^\374&\203j\224\312\271\337\211\001\376\276|\265\335\216\345d\363\025y\353N\367XRa\321\334So\016\236\254Jr\200\257H\n\310x\300HF\303\031Y\240pW\026\027\247BN\303F\356\026\357\177\367d\206%\356\375\212=1\235\032\263\001\247\305\2144\226fE\377\024\351\022\326W\264\366\302uQ\313\006\272\376\211\212\263\263\212m\251V\332"
}
}
},
{
close {}
}
]
\ No newline at end of file
# Simulates reasonable (mis)usage of VideoDecoder
# configure(vp8)
# decode() a real key then delta frame
# flush(), reset(), re configure(vp8)
# decode() the delta frame again (trigger decode error)
# close() (trigger exception (already closed by error))
invocations: [
{
configure {
codec: 'vp8'
}
},
{
decode {
chunk {
type: KEY,
timestamp: 0,
duration: 33333,
# vp8-I-frame-320x240
data: "P\004\001\235\001*@\001\360\000\000G\010\205\205\210\205\204\210\001$\020\027gc?\273\345\317\233}S\354g\242\3170\366\263\362\257\302z\310\376\367\253\217\201\377\177\345\313\320\277\366\376\352\376\\\377\252\377\327\376\323\336\317\352_\373\376\344\337\322\377\300~\307{\235\377\231\373)\360#\367\033\362\003\341\337\354\307\355\'\274\007\375\177\333\177\200?\334\377\335\376@|\223\377p\376\373\327S\350\253\373y\351\277\373\223\361;\375\227\376g\355\307\2657\377}\033\037\"x\326\357\263\360\237\220?\270\036\245\376?\362\357\340?\265\177\225\377_\375\357\377\207\372_\257_\253?\307\377\017\365%\352\273\323?\205\377\253\376_\374\337\260\337\313\376\356\376s\373\327\371\217\370\037\343\177\367\177\304\371#\3767\370\177\335\037\313\317r~/\177\213\376/\367\033\375\027\356G\330\247\345\237\320?\311\377u\375\272\377\025\377\313\376g\326\317\334\367\226\332\257\374\337\352\275\211\276\020\373\247\374?\361\277\271\237\347\177s\276Q>\323\377\007\372Oa\377A\377\035\377w\363\213\341\367\365\217\366\377\341\277o\177\311\177\372\372\267\376\227\232\007\247\373\017\377b\377\035\3777\374o\371_\372?\356\276\232\277\303\377\317\376\253\374\367\356O\302\217\252\177\357\177\236\377U\373;\366-\375\003\373G\373\217\360\377\273\237\347?\377\370\330\375\336\353\302[\227\000\246\246\370M\223BW\317\2565\340i\371I\305\310\273H\367\t\207F\004\301\010)2\230\260\262\233\255(#\371\000V\367\333 \030\363\332\321\177!o\340\334Z\213\360Ny\305\303K\027^\250\375~\342\315\2744\320 s,\302\002\214\377\364\374M..e\331\314-,aKA.\265\355\277\355-\270\200\377b\275\343%v\23559#\006\344]\211-\034\2543\tD\266#pbu\032\336\330\356\322\"\3452\\\307\331\236\332;\306\022\000}\020\003\275},y\222(\251\2369\217\376\212\317X\225\334\243\217\255$_]\230\034\rU!\362\032-)OR\2149\366t\314\253\253p\254\025v\270\341\362\027\005\251\026\3070\005\026k\001\307[\332F\2378\302\236\302\347Lko\321-\322\235\265\335tbd\376xn\313\254\365\214>\223\336\017\033\n\265\026\177\326:\244\300ae\352@\006\2540~\241w\327aN\224\260i\003vM\033\226\310\206\331=q*\365B=-\372\267\200\227\277j\304\026\226\244}w\034T\341\r\303\271P\037\235K}6j}\337\327M\262R\370\335\212\031\345\372\251Q\340\234\206s<L-0\311jyn\234\032\253\323\262\276\355S\276\024\001\202\013\272\370\300a\177e4Z\361\266g\201*Aa\036\273\025c\363\200w\n\373F\326\013\\\313\357VC\256_-\232\225\233\203D:\223\0178\010\036\004\260\031r\265\003\206\024=\333\027\335\233\207\244\322\314F0\031\017w\374\210\314\250\251\0338\'\316\373KJj\226:( \356\226h\321\252\316Y\3660\227\r\322\210=^\260aI[\371D\322\331\244\375\232}.\3142x\020\3122\305n\376Gv\243,\340\243f\372\236\035,\035k\"\321\314,\005;S\327c\344\360\252\266\273>\355\265\017\266\337\003k\006\356\325m\212\363\221a\037\002>w\351\205\316\374.`\337w\30595\327\303w&\347}\252e\261\336\005\267\014\325X\323\023\314\360cF#\257\017*\347`\305\221\262\027\344(\347X\025AC\360\001\275\357Q\300\366Q\371\377@X@~f\021\'\345q\334pp\2063}\214\021_\247\362\031\223o\236\354\033\017X\217\023bQ\224X\210Q&\220Lp\341\005\306\226\256\315\343r~F\312\234\262\006\376.0\352Q\364S\r6\332\365\334P~\034\310\320\366\3317p[\377\020\255wG\267\024\030C\037\233\004x,.\304\335\0349X\210\304\323VM\264\375\342\332\377\372#\241\361\307U\211V\001\307\"\237\3624vU\214\310oo\330\2374\023b\272\376\243\215\341\023=I2\340H\245\204\267\237LS\r\373,\205\240.\255\371h\356%\271R\225a\214\022\363\372\250\"\354<\353\004\340\346\002\276\310\353l\022\306\261s\365\223\200\003\221\372}\277?\224\020u \276\377\000\003b\362\237\230\205\nF\024\023\363\335;\311^\004c\002v\265\360iR\346\335\006\006\030l\337cG}\342\210\202\365\202]\345\337!143\244\n\252\355\345\360Zk\356]\261\245r2P\332@\226\027\350\317\tk1(\211>g\303\361\026\317\374;\357m\000\325\367\276w\020.\377Z\313\253\267a\266\225\204\240\017S\333\263\334j\243\2015\231\335XI5\251\330\244\244\277\227@j\207\203:I\212)\367T\013\202\021\226\331\353\264\262X\031\372:1[\307\217\0336\206\032\215;\200\201\002\227\214\030\000,v\214\2620\336\267\341\010\2005v\244\2405|\313|\240/\362\305i]^\310\034,\205\017\272\345B\365\321,Q\305\3138\203A-\300\031h\252\274\037D\376\270\334\002\223\370R\377Q\240\016\360\203r*\020\373\316\231O\324=\211\361\236_\211\363\370w\371g\333\033\241l\377\220\nP-\263N\010\370\001\365fY~\246\035\341\327\323&vx\3559\004\345q`\370\330\367\007\202 \272\273\354CX]\244\256!o\322\344\373\220Z\0376\025\2143\330x\314v\304F\315V\321\354\305`\254\230\372h @o\267\227\234S\n\236Q*\306\237\037\207\216\231+R\370u\216(\207\3443\255\006\233\"\2743{m\204\245jYk\301\353\332o\221A4\031\247\314\235\207C!\345\374?\245\030zo\346A\374\226\327R\331\210z\357&d)\244`p\213w\n5\233X\313\235\265\311Y.\202\230Wk9A\274)\202\246\334\017a\224\330\217x\230-0>\216\261\2600\261>?\272\027\353\006\270\271*I@Z\310\203\370\206\312N\001\252\310L\335\357\3622\244\241\221\017\200\365\032\001W\343~\226\314?\246\325e\300\247\223\273?\006\265R\217+\311\373gJ4\362\363tB\207\220Zbcd\013\260\231\014e\377{]\372$\020 b\\:\025*v7\257o >?\324\206k\002\373)\362\n\246\351\002\252\332b\313\020\336\247hh\230\365T\031\304\210\r\231\373]\351\307\"\215\004\026Tv{\301\3651\377\377.\017\221B\270Y\320(\3636z6\321\034\271S<\2639*\037x\301\036\221\211\365\033\023H\216\325\266S\344\272\342\243\256B\010\371\257\326\234:\266z\301_h\022;\270v1\367\337\261%\277\353\002\333\014(hH\313~zR8\202\234\347\'\225\362\'pz\343\364\356\355\017\257Y!\\\346\252\036\257\241\273\227\005\331w\341L\305\035{\276\240,\323\346\005\025\177\264\216\214\014\365\327\017v.\350\336\004J\351\0065\304\231\243\026\001\2458\333\n\000\\\300\264\266\\\261\333\004\243\226\346j4\022\256\273V1Y\355\013\327\216\200\250\222\277\337v\232r\366\273\020\366\262\314\225\346\215rS\367\303\333@\377\343A\206\354\367 \326\227\377M\261\243\203\333\277\344\366\333\215u\251\004_\263;\231\212\300\214\367\212\363\032\265\271\226\271\033\0277\320\376\207\250\006\265\351\321\346\244\316\3127qMT\337\0048\227\025\2744td[e\305\250X\200\373\272\364t\343\tt\332q\374\273\222\334\370\241\327\236\342vx+w\371\342\225\360G<\342\202Y\037IX\3648\217[c\362\307AS\340\354\225\263\027m\251\206C\377U\311\334:qE\267S\214u\206\3125L\370\364s\316FUB\007_a\037\331\340;-\216og\313 \376\371\222\226\014\223\230\340\205\212v)\372\333\266\232\253lmH\275u\177\323\304\346\262\357\227\023=\205<(\noYs\271\2015\246\272\254\230\347\275|\321<\376\377\360QoE\270v\264\267\356\261\255\301\021\215\304\346\341P\237\025*\237\355\342j\375\352-\0214\337}\023K\376\247\020\224W\031\317\201\234\346\3620aIOq\261\021\345}/9\307}\2629\376\264z4P\306=^\030A\002}\334\030K\211{\217\021o6aA\202\021\005\275ZJfH\316Qx\240\375r\214R\266\340\372\2440+\177Q\017NV\341B\271\370[\330\306{\316\221\3167\334\217\365\270/Ps\263u\037\2049\317\311.\207\307\213m^\315\026\216\013\366%\375\242\325W9\316\203\272\014\014\007\204\313\247.\246/<\022\301/Z}b~\217\225\335\263\366;\035\352\036\364BUA\003\270z\200\253\304\314\376\004\037\277\264\232\376)\356\237h:\233\373;}v\003\321l-\205O\254\370\340}@sy\242\217\020\374\307\336\334YC\250\221\034c%O\r\336x\313J\033d\360[\341\020s\323/\336%#\210Kws\234\244X\000\355\235\306_\t\333\013\\@7\tG\370h\256\0135\031G\213\004\216R/\307R\375W\212\213\276\255&XZ\003m\277\225)D0Zrw\320\311>\342\310\354\236f\004\360Z\351\245\242\260\037\266V\253\021\027\037\273\207\337\266\325(4D\326\270\261,k\177\365\220\367Aa~\377^\177\347$\225\271\254\371e\205\277\275\222\376 \177\223\021\301$U\024\341\241\007Z\237\021\274s\213\35428\203\270\247o\3044\267\005\347\364\336(\273`\r[\034\036:\266\010\037\272\345J\221\362\"\370\346\037B\366;\223\256\203\233hE\312\307\205y\033\253\367\225Sf\257\220c/\177e\026\224\371\366R\261\003.\226\3029\271x\345\217\350\3030h\205\375d\002)}R\237h\271\373\363\033\353\324\356\037\256q\207b&n\272\362c\034\204A\237\330\326s\306\375\265a#\221y\020\321\347D9%1\3336\245\226h\244\322\010\361\014\305\231^mS|\263\326R\007\215\341\224\334\242 \364%\336w\0338|\027\034\021u/!,\207m\204\021l\326aF\037\372`\374\306\340\307\337,5\352R\271\026\357i\255n<\370>\314\314!\315p\344\031\017x\t\267e\322s\017\271\256\036\\>\352\207c\371}\251\325\023\r\366\247\365^\023S\201P\315\016\030p\024\266\004\272\305W\224\027/fumx\315\350\262\203\337\332\260\232\016VVV\256@J\031K\314\227\210\265\027\0360\014\036#*\024\255t\005W\010w:\370\342f\027\364\314\030\016\007\254\306\356\364^q\271\375\344\343\227\312\273\375\332\301\301\214fG\327\362^\313a\20640\255\241\221\227\nx\"D\026\000-x\320,\3612\374\277\227\2114\205\205k\355\310P\027W,\352Xw\207\355\005\367Z\002\023g<\367\300\223&\253\220\326Q\313\372\243Tn\262\013\364\207\033\347\305\342\312d\376\024\036\367\n\020\326/\351B?\246AZ}b\255\202\035\252\240@+@QW\200\223v\036\240\351M\256\272Pa\036\331V\371\"\232\362\312y\263\355z\311\203]-=\333\272TR%\207Kx\254\327\032\000\351\244\370/\345mP\352\251\315\333\232\207\247\314\364%\365PIg(R\2358\221>2\231\276.*\240\337s\260J\314\026\323c l\227E\335\022\243k\377x\244P\014\3556\"\031\030\255i\325\216\231\357\254w#\265\343l\370\244\3526\346&\017u3\235\375\306S!\341\2272q\206\222)=\022L.U(\374\3337\312\031\236\315_5\376IK\033\214\210X\006\257\275\032\363\270\207\215Ke\257<Do+\322\325\344z4\207\302y\013\214F\262\272\307\342\255h\253\323%G\235\034D\346Q\035\325\t\357\202\3645\333\230\341\356\332J\362\316\344U\016|qO\022Qw}\3729!\'(\033$\231F\346\334L\354[\215\272G\362\374b\334\201F\373\035>G\257\016$\004\3142\370_}\3349\335\365I\347]\227ZA#8|\000S\233L\214\211%\244\266\024\230\333C;\234\223\343S\321\351\013k$\343P-\362w)Q\365\341\266L\322\025b\035\017\263\035q0zI\242\221\024\323\017\004\250\311\026.\340\377(sj\357(/\350\034\330\016\327s4\177\315\320W\233\331\211\205\220\373\004\204\327,/g\251\000H\355\352\036\347\214>\255\367;\200\tLx\335\251\241\3500\240\214\000\371\322\336\344\277\200!\217P\214kNxww\357\225\203X\013\351m\336\341v\202K5o+?K\035p\207\342\001Fwd\363rDs\273\264:\213\252\177\217\'\322\327\206\366\306nE\317J\374^x\0226\347\010\303aP\340\342Q\370\352v\027\211\262\327\305}\245}\355\305\203p\305\311g\367\233\273-\23356 7\323\"\032\252^\227\237P\3261\315sL\354D\262\260\213$\\8\220\343v\337.+)\222\230\"\316\022m\264f\003\377|\000\264\353\264r\204]\230E+\204\037L\216v=\377)^M\301k\037<#\273\007#\366,\333 \030\237\306\244\235\211\211\026\230 \317=\301\202\334\363c_;\226&e\250\366N\tz\232\010\026\330f\rCs\033\350\265\3108\364\3420\271\323/\221B=\342\265J\374\376w\361\250f@\266+L\210\374\204\203p\027\224\364\035\035\205\261T\210\016d\274\265\216\014\267c\252\331\376\261\267F\217\216\324\361\360\034\337\"\352\301\231\214i\244\251\000x\370\312I\275\251\201\324\337\333\'c\010e\204%\357)_\227>\000\311\325\260Z \031h\244\"p\217-Dl-\315\253/\344\1776\374O\311T\202\262~S\252K\223k\245\221M+\362\307!!\270\205\024\337\261h\017\256\274/\350\215\334\365\034\225\350\226|{\246)\220h\23755\033\022\204C\274\354\357\244\037\034\207\372\315\320zM\315\260\305\264\212\303\237\003\004_\355\306\361>)\254z|\271c\005\350\026%\316\222fU\263\002\037\242\274{\216\267\315>\017\033\220\277\375;3\362N\301\302\234\371\237\321>\031\222(\356N\354\212\2772\335aw\317\n\216\351\211\n\"\275\300\226XW\260\213~\214)\352\254\231\266@3\224q\017\t\006\r_\225\242\271\226\200%%g\363\334\375\023ROU\231:\234\003MV~\2522\025\202\227c\032\034\\\032\200\024F%\033\321\330\201\321\356\253B\243\234\304\270+\214\030o\034tT^y?\027\017(4\201\235\no$\300\365\361\317`\240\360\013\305\227\2405\\\233\363\256\225\"\205\025~\221\013?\034\213\361i\351\037+y\214\322\212GS\022\031\324\303\001 !se\000\266\241\243\031H\007\256\370`t\366\212\36015\333d0g?m\203\335,d\326\205\354r\304NV\203\235_V/\302\236\214\352\337\346\333\267\"\0325\n\372u\017d\027;\352zf5\326\203\\\205\253\301-N\335\rY\034\231\n\310\305\310\320n*Hj\2056\255\025\263E\362*k\027;\352*\033\213\360D\233\327A|\r\322xES\335\364b\216\023\314\306\235\035\361\256\261=\211\017\304@Q\231{\032\036\3537\2014\n\\\373\3209\212\350|\234M\005q\230\014\003\223\260\026\365\240-p\263G\246gj\244h4\302\260w\242!\005\263\225\r\037\246\251\030\267\260\220\271\263\014\0377x\374\231M\374\320\225x\346\372\233\361.\205\262\034l\017\003\255\031x)^FzM\200\274\"\224,\230\024\304x:\373\005a\23096\205Z\252\362Y\223f:\007(\007\'yL\353\342\366\231\214\376O\271U\224pZH\032\375\211\010\233\360\320\014\226q\343Pz\342c\311\017\360\343\261\3055\207)\200\265d\227\252\304 \035\336\022\nDK\373,d*\301\231r\020\236\347\360\343!\027D\\\346\0321\231\210\232\246\203\2604J\237\376Ic\364\326\362\362y\2277\377Cg[\010\330\201\000x\215\3010{\351\227^\304x\220\233\270\221\237\201\002\262\333e`\253\337\357\370fN\033\246\317\361I8\027,\376P\006\341U\027\360\206]\371x\2523$\352^\024\032\224\264\030\"\321\321\377\311\311\027%t\307[\322?~\020<s\226\005\255\027\t\326\360X\310\320&h\\cS\343eH\010\366\024\025o\030=\230\331\023\014\252k\004\034\020)Sv\340\3567\tz\203\345\024\300\314\000\035\226@\033\226A\313\360\362\320\013\266\236.\256=\255\356:\364\341R\032$P\037\013\334\256\334\335\374/\365P\334\252\247\251+\223&=\002\236\351\324\252\364\227\220?\330o\341\030\014jv\234~\341P\200\310\227\'@\263\003\214d\264q5I+\000\334\301\242\371z\022\347\263:\374\3466\306S\304\300bB\230\312\326\230{\205+\316e\233\027d\203\2050\242\271\302\213\275\033\020\360\\\370\262\3446,\304\363\315\307]F}\030q\037\257W\234\217p\003\353/\2577\343\271HZIv\221\257\236,=\'\024\370\377\353\344\273ME\272\304@\260F\010\366\232W\030\031R\0210\224\023\262f\367\253\026m\200\220\'\210THUR\334\3659\233\256N\236\225\303UmGu\'\020B\310\027\005@T\360\351\222C\222\032\334\361\344\265\347\335\321\004=\233\022y|h\310\240i\373\020\340q(\\\344\237!\307z\202\315k\327\2040\223)\213?\210A\361\034\003=\211\021\243\230\003\272\t\3748\252\022d*\376\023\231m\003\020\265\274Y\230\307e\304_\220\245\320\216\224a\356\246bCQp\331\003k\354\221\232q\277\214\'\260\032\356`\223?v\224\330\372n\033\tAN\217\007)\034\275\234Ch7\305\305\006\353\240\341$:@\303R\332\226\326d{\321F\025\357\215)\233\300\021@\360\027\337\273\206\356@\035\031\370\003\nt\375\316\034\213\014}:%\316O\n?U\001&\224\345\017\304\336\342O\266\245TFj\265\345\327I\301\014t\014HB7S\252\361\023\034\242\363\334\024\204L\036\343\300A\223\226\021\374^\351\367\373Os9>AX\024\006\264n\031\374\032meV\202!\251\231\327\220\320\326\357\333j\355\325\017\214\256;\r\335\342v\271\207\212\355\242\356=8OE\023\337T-\331\032\322\207\354<\322\257X\321\312\007a\365\" \242T\004\000b\'\233\335\360\003B\364\321\320\214<\371o\334d\313\211\001\241\312\331\223\006E9\024\235G\034\275Ix\262\361q\366=<\235\036\020h\373\342/\361\374jr\3609 \371z\022\002{\274\252+\307\037\342I@6a\2448\333\261\344\270!\201\246\036]\225\321KY\357(\227\010\201\237V@\321~\'*\215\221\243\366\'\002\236\034e>\206\212/\254Sl\370p\016\247\001\275\322>\001\375P\340O\001\037\222\025V\325^\035\271\233>\022\242\342\r\323)\331\021\020tr\n|\2276e\2236\364H%&\221y\303\244\322\202W\265\203\217U/\365\207V\020jg\227x\247\r\224\013\004\247\274\306\325\374~R\366\023\327?\332\237a\010\322`\036F7\376P}\360\252\201\005\357\013\264X\r%\032\321oE\201\240R:\332\326\n\202&\226N\2319\226\036\347IAa\n\360\347\032\030\321\177\032\323\344\231}Z\320\334?_\304\363V\035\375\233O\277\021\030w#_P\3448\360\334\201\366*u\022\344\003t5\272\220#\016\331\346\230\005\021\257\3439I<\323\323%\034FZd\340&\016 R\036\212|\213\005\226!7\223\230\277\2153\322\257q\315\014\350\250\246\317\003*\203\010;\330\032\275\361\016B:\234\323\260p\324\310J\327\305 \013\363=\245\206\276\223fZ\237N%Yz\356S\226\363\014hp\373\3100\315\362\373\332\316\217#\346\306\021\"j\315\371\334N\263H\2577t>\363W2\215\352\210\027g2\206\360W\220\251\357.\t\375\301o\341\352\324C\270\344v\311\266\002\261\2147\255\004\007y\020\356Fm>]\321\000\376?\225(\017\240\357\003d\216\025\254\003\027\222\235\216\321y\036\222\335\345\014\337\027f\313\377y\305\361\322\022\335f\312\252^\313~I\214.x\244\330\'\372\035\234\004\247Q\005XZ\205\305\310\232\007\005\370\3231\"\346Hq\302F,:1\357\253\216\247\2673\251\325\263W8>\326\303D\027\232\310\027\361\321\325\245\016v\313\375\255\222\333^mES\335:K\337\321\0103\206\202C\2007\313\315\t*\242\242\326\004Q\277\3355\236\246\200\026\025\203f\271\211\371\306\244\244\257g*\236\2268\204F\014N\243b\255\273\243\222\372\266\376\236\351\356V/\234\354\243\007\340\241`.m\253U6\022\037b\034M\026+\277\030\026\235>\301Y\245\251<\305\254\310\364/\322 \017\304\204Q\347\367\365\320\250\006\363\245\216\353\305\236\027\r^;\364\316\313\371\313\257\264\224\000%u\227\351\355Z\356pK\272\234\016\307\032+\202\363\201\3201\307\017\240\256DE\272\337P\006\317\253\001\262\250,\254\303C\001B\354\324\345\r\300@\304\016\207\340\324\246\206\204\353\332\366\351+\242\261\312i\366Uy\364\262\211+z\346\240\360\235J\n\3311\035>\036\020\272 /7\307TC\t\210\230z\236\377\327f=\'V\267\202\370L[\240\"\010y\210\361R\363X\273\211\325l\3657\336\0361\207\210\007\033\213\350\363\377u\267\371E\370\251d#P\203\301\2308\244\330?>L\313k#\021N:\243tT\363\375\313\245\035\271\250h\206V\303\303W\312\254\377v\277\317\267\271\254\365\177\017Y\350[m\266\016\021_\223\317Rg\210Z\003\300p0\201AcGW\027\377u\325Rh\364\023~N\362\270\300\365\301\0371ZPz\177t\'\224\335R4\351\270\332\t\216\005\236(\203\325\025\013\2203CM1P,\004\036\263\352\217W\004\t\204\276\007l\r\245$;xQ\213\222\251o\3646\275\206<\300\014\200\302\260\202\214+t\022\315G}\317X\344\025\301\031\3751\221o\014\241\223A\206Z\n:u\231\335\215P\257\211\311\277\210\333\036\276\014\213\307\327\316{\266\306k\3342?\220\233P\177\013\360\370!\0223\007\323]yV\344rg\307\233t\315m\242\356\324a\3439\234\277*0?C\332\355\022\313g\370z\315\0035hR\026>\271:I\276a(\370\200L\000\2257v6\270\311\360\260\346-\032bj?\374?\373\231Rvu\034\343\255\341B\001\221R\025Nz\324\303\270-a8`\255\240\361\tN\350\315;_\030S\245:lC\037\000\236\310\257\346\270o&Z\242\330\311\025\003du\327\304&K4\237\304$}N\213J\r\263\316&\033e\265\016\273Wrd\014\025\233\023\177\0160\357\004p\206\375M\010hR\n\243\314N\363\324\366\300\335\331h\302j\264\345\336\255\367t[v\305\036\332\177\034\235AX\276\202+\345\037x=z\257\226\204\3136\270f\024>\311\345\265\315d\020\334\223\347\366\366\373\304[\315\374\362\373vX\031(o\345\275kn\266\227\336qhK\202[\'\215o\246l\241d\273\244\240\"\022=\245\315(\340\240\325\034u\n\364\337\265zJdMwp\232p5\001\326\330\263\\\271\n,l,\304\006\233%\315\333\351B\251\335\037\374\024vR7\026\250\335\315\233\203\267\226I\372\3465&\013`\255p\\\377\032\200\361\355E\317\211\202\311.t\236e\\\354\222\347O/\234\343f\311\346.\021F\275JU\304\245r\324F\252<\336.D\207Ny\257\276\0338\017\031\233QW\222\204\264wE\315\213\374~\301\016\202\024\314\237\213\373\257\274\225\312Yd\366?Qy2i\215\257\312T\242j\001\333\240\006&Q\027\217a\003d\277\304\232\335\365\201}K\027\237\200]\232\341\274\021\337JJ\003\216\214c\343\343\347-\3113K\223\013\344\257\220ZC\336\204j=I*tM\003\233\214\241\350\237\244\004*B!\377\254\260T\"\301\177\245\310\266\341?\244\214\250\262\246YA%#\036CA)_\252x(\211\313\342\r~\272\231\372\341C[*\342[\365\312\177\004Z\222\250\262\024\343\331pW\210\335\371\223\344r\301X\377\307WQ<Q\277\256\2162\tn\325\357\006\344\216\374\223\006\370{\t&6\376S\246\226\032\242\323ey\021\232\273\345\004\247tQ3=\321\262\250\r\366\207%\362\302T\360\310\260^#\3466\330*\343\3221a\024\240e\305.\257\360L\231\335N\006\256\337=\272\342=T;\315\206\216\020\234k\tc\212 \242\264(N\276\013\002\030\022\271\373\242\343sn\362\324.x\335\372\320B\020\300\233\270\326\316\366\224\265z9s\0023\312\0034\010\327\235\325\200\363\270#\211o\220m\211R\037\376\376\033(\317F\332$v\020\215y\270\020z\014^`\0135\372\314\022\331\361\225\273O\301\365\250\373\3505\360V\307Sgz\r\342-\353`\033\352\256\326v\224\\%\\-\242\303A!\020Y\203\365\250\035CX\275!\372\206:\364\237}\350\'7\241\033\236\264\251\337\212\301\334\330f%\365\240\216{\273\232\363b\324\376\010\014j\002\247:N<\240\355+W\271\256\363h\322N_\021\307\321\213-P\365\314\265\'\266\034\235\356\3067z\022\246\210\327\n\214\320\t\017C\244\347\220,\331\373\326\005\367\216\272\276\203.\242\013\273v|\243\361Rb\324\277\233?\014\376\203\037\224\247\331\254\357\336\017\244\204\265\310\264\020\347&h\234\t\311ZA\327\'\003#]\304t\243\327\214/\244\375\363$\226\201\017\177\264d\217j\367#\243\257\035\362v.\204dA-]\316x\255NdZ\364x+\003\247\242\225\262\341t\275\336\277P\300s\264]V\3228\204=k\214\371\265\034B\306\246}\025j\265\256\204V\277\221z\3279\231\027\0147\267W\242\335\002\324\250k\3159\347\024X(b\2609\035\003\200\346\227\377e\340P\025nr\326\225\311G\352\034\231\310\203\326\322^\2637[Uk\0359|\257y\024\207\217\362FA\353u\221\355\342\311/\232\251\213\232\030\327m\336\364y\364C\332LO\266!\353\017\231V\021\016m\372\357\\\303\034\016#d\347\023\250\245\023oSW\274\234\253+e\374\023)!^>\317d#\224f\337\327\337I\375v\365\252\201q\0176d\247\302tC\320\205\347Q\246\341x\326\271\366j\333\013a\313\274o\333\360\2744\352\035\332\362\373\3079\244X\377\242\250.;)E\372\341t\246\t\247\366\207\200\235\242\322\026-\rL\030\361\026\254\016\355\0325ZvcY\237\311\331\205\372\312_\024\024\260W\332\225\007\010:;\336\023R\0331\272[\367y\010\323\021\035\355%\260\317x\335l\215U\377il(\313H\000\313\327\363BG\321\264\214\'\327[_\271-\013\265:\025\247\341\274\302V\241\t\256\346*u\227\356\366\264\253J1\365\212\260\216;\300\302\256\262z\205l\322R(\377{|5\344\322\204g\021\2746r\3272\207\034\205\005\002\227\215.\255\022\245\345\345,B\304\007O\312\251\356_0Eb\322W\360\302T)\314vQ\035K\0136\225\230#\231\371\024\226ejA\335\266\021\366{\031ic\"\314(8\354\241\362\340/RL\277E\007\322\354C\300\202\2223\274M\312\0335\334\241Z\033n\370*/\237,\367aW\372\244\377Lq\014\373\037\017\3018p\343-\037\000\035\021a\215\0060\363\031\364\266\235\024\205\240\362\022\370\275\364\226\362 \3423\177\272\241\315\246z2\327Q\250\014\265\374%S\220\307\223d\377-\266a|+\355\323\327\201O\263\243\250\242\250\037^\244\307N1X!+\024\016\344\246\221\257\223\035\322\215Y\346\222!\252&p)\330\2477\254\337\361\301\315\310\340\312\003\214\240\024s4d\333\177\350\"\357\211\272Y\014\006l\'\361`SF\300\244\212\244\326\262\234\036Y\"\244\212q\r\256&\275\027\031\326\024\336\262\204\361\017\r\006\340pUVk\2206[.[\271\377\032O\206\226\265\215\'\350\215i\036\304\236\242\022e\003\232\372\\m\362\\\357\202\306\213\200\311\206\346\323\243\214I\220\317\2344n\362\253Z\350\234\003\277\354\016\352K|\201\314\315\021\227\237N\235uFY\232U\210\270\210\000\347\002\237\356q\265.\006\366\350\2475\356V\024\006\017u\374\350\003\036<C\270\260\363h\260\340=\255\264\363\244\'T l%\272\342\270!6\377Y?\213C9\002`\227\211\355\304+\034\216\351w\361O\223\233\342\345\224\364GUe\230\376\203\305\241K\030\322\253\031\271\2747\377O\263\373\034 \304\014\330^\030\217e\220\005d\370\307\204\0271\026\3258F\346.%Fc>\tH\3240\020\216\306-B\362(\361\267\277\301\270\2155\2018\271\202\024\001\335Cu\206\252h\213\324\256\2679\352ay`\315/\350!\324\004\210\336\375@\362\213\001\267\331\0100<\261_9\031\371\377\213\353\306\245\302\210\327*\352\207\014\314\336\317\236\216\336\2122\032vS)\357\310f\032\t\034$\021\245\323\264\264OC\332\366G\372\267\335\352\254\032\273)\352\322A\244\371\t\264* \240\316L\311\241\362\216\363\264K\355\222\304Y\3476\277\221\233\246\014xn]\020p\037\3563\323\022\026n@\374\262\342-\240w\271\357\264m\\\177\210\272\215\375\352m]\'O\316\300\362\351\274I\374\235\274\267\323fD\217\331K:\036\206\242\227\231\321Y\360e\262\340\303\262~D\250\256\325\031O\233\241\302\354\206\2101\031\266\337\230\215\357|.=!\224\222\306\016\334\276\253\317\340\032\342\210\323\272\177 \330\004\337#\374\201\013\377-\256m\334\211[QD\346\231\312\222\2100#~\361\341\312\277t\244\303\244\332\370\323[;\364\205s\207\022\305\356\276\246\203[k\242\r\262[v\243\265F\223\211\362\335\234\323\242\201\361\177;\314cF\312n\222$\310\234\273s\334\032:\337/AQs\274!\365\261\323\221\033\2740\020\033\005\205\"\212\370\246CAQ\241\347(\301\357\013\220|1[hZ\202A\275\245\215*\200\344\277rkihRR\273e\033Q\360\207yUR\0366.y\214o\274\271\3772\013\000\320\237T\276\306ti\262\212\207\0023t\026\313*\312Z\330\265\221\267\302q\255\240G\377lZ\237\271*\313m\226\350\224b\026@\234.8\212\010~\332p\251\313\235\271\255\321\302\237Q\251\304\000aY\014\255\214\326\241\277\214z@.\314>\356\244\245\256\257\251&\344Q2/\237\312xS\227\003sr\247\274\334.\304m\335A\234\344\034(\303\321g8\342L\361c\260\037e\014b=\307\324\031(+\364\032\204\254\311\306\337\362r\030\204>_\363U9\315)&\332\366{\377\345=\"s\005\334\341^\324\300\221\351\373\237T\025\341\327\005^\321lx\212\370|\2507\202Y\251\026\222\343/V\326\251\357\241\333\215\353\244\315]\277\317\027\316\306&| \243\323\031M\234O\2312T\034s\317TM.t\242\335\344M\035\247\220CF\035\220\375\246n\033U`\276r4\227h\\Y\373\260\rOP\347\317\022\014\202\367:\324C\373\303\237\204*m|lu\261\022\250\361g\304\204@\230\007v\016\357\360l_\236\353\321\337\005?qX\305CG\331\222/\036\343L\360*Z\2712q\352\0238\027\351\312\272\001\202\272G\262 \343\221\337\363\023\221\010\036\016\006\035\346\211\333T\203+A\222\335\231\t\330\320\345]y-\031\334\274\036^\010W\002\r\215\242.\370\244QEs\246\032`L \373\004f\235\"$\267._\246We\"\\V\254\032V\234#\253\r\367o\\\265(zZ8T6\260*\357\020\017\0347e\205\301\354\033E\261\007n\337\001\271\251\034b\0140\210\2212c\007Y\314\307O\177\334s\305\354\351y\226\322\220\311\223\234*\343H $\034.\0359z\331\211\224\003^\264\376g\002$\250\2631\262K\326]c{R4\247\222\213\305\352\n\017\231bx\206\020N\257\202\200\361v\301\301\230\032P.\324k\223\344\327|e\232P\035\313\024{y0\352\214\357\001`\035\366\376U\324Um\323\021\213\227z\345\021\210\020t/z\360\227Y\307\342\366@G!tq\204\030\364\250\323\n\177\355\234\224]\007\306\177\225\362G\267\315\032\366\371\270\377\200\267\277\254\'P\314C\210M\2139\344\312X\002\010\251\266\366\225\"\262\263\237\313&\271\311\313q\317\352\375\207-\030\003\035\217E\331\265\267\360!\215\245\204\335\220\234^_\206\n\350\010b\023\236\320\026\005<\365^\262\310\376~0\366\253\261\362\327\314#\316\331\232\221W\325\217\220\2009\333\026w+C\275\366Yc;\222\255n%\317\303\237m\374\033)RJ\322\331\356Oj\020/\315C=\240J}\333\016\034.\270*\251wv\262\221l\000\277\214\271w\374\031\272\273\204\201\332\255%)\360\360\236\010$\267O:\333c\270\031\226\244\004\366\241a\221\303\031\346\3633\205\034\274\217\"\255E1\372\023R\300\271\203\252\321\014\202\305\031S\312{\030\006\227\225\310 \315\203\274\320\202\352\236\346\211\231\321U\2048~\377\356\027\236JE&\250\334K\363\327\327\301\316-S\024\037\347/\222}\204\214\204A\302\\\333\326\371\220\357\347T\346\340fnC\350\230\214UL\360W\010J\005v\336\361\3248f\342h\233\345\257O\262\324Lz\327\020M\210\311V\217|~\356g\360\261\177\177\032\025\363\347.\036}Dd\301W\030\341\367\332\235\231\216\205\'\356[\037\332\332@\001n\347\277\032H6=\0075\006\221\330\222\216\366E\327\037\271X\255\343t\372\361(Y\372\270\360\327\360\217Or\024)\367\220\034~\2478\334\373\037\243\207x\247Ru\300\214M\321\374\322\034\334\266\\\254,-\254\370\036W\006L\223\016\300\212\213N7\002\001v\273\371T\333\350\325Q\226\313[\007\247\210n\003Ay]\253\364\315)\237\017\257\202O\316\304n\031\341\006\'\007\223\273\371\323\222\200\003\267]AN\006}\r\365\036\212\205\230\022y\341\315k\352\354\270C\247\212\202Q\354\206\310\246\266\371\354:\321t\247;G\203=\'\232\013\321\233\002o\265/\235\0106\267,\207\027\006R\333C\005\234DAT\364\216\265\256\250\337&*\266Ro\020\021\372\r\2227\n\257\266\317\246\3311\010N\340\234\260kMf\356/v\336m\227E\025s\020\362\276\003Uv}\002g\014\r\035;z\330ryX\022\361\336\3277\204\251\263\022MX~\372\231n)\226J\366\034?X\027\274\036_[%P\241\215\257\031\376\233\317\306\243\231\323\377\247\007\315\007#a\316\362\034\177\206\246\251\247a\303&\034\222\201\0309\031\272\013T04p\243i\370\251\250&/\222\246i\222\302-<\322\353R\213x\\G\232s\021\207\307!\223y\344z\240\224\365\266\356R\014\371\241\036\212\013\277\373;\273\300t\333_\025\337\271:(Ea\021\327)x\265\020\213\245\032\223\371\204\363\361`\236\253\306Y\310\334\203=!\234\350*\362\264\371\240s\'bm-(\014\006\300\221%ahg\303\021\250\375K\353ZD\023\007\331A\277\276\032\245<y#E7r\245$\3617K\225\347\200{,\301\010\031&I\251\272\002\367ZO\227\275\341\220\335\352\236\244\'\342\332\306>t\322\036\324W\'\"}\302v&\203a\236\347u T\373rrfE\033\221#\261)R\2028\247\270\247g\352\376^\344\244\326]\"\230E\365H\262Am\010\262\314~*3\315C\365\300\377\202:p\207J\013\247\030m\305\230\326\333\243\030!\246h\316f\257\021\007H\360\307\262\241\317\371\223\351\030\023b\374\273\300\340\304\267 W\262<\t\225\370e\006u\374um\022\372I\025!\240\3346\352\354\003\236\025\306\236\227\005q}\351z\266\035\010d3k\261P\254\336U\034\231Y\346\272,\t1y\207\334+\314 \010bO\331\231!\207v!\210\221<8.w\272@\230\212\310\032-\313\030__\330h\331\254A\210M\\\351\215\362\2128E\036*\205\212\000d%\267\344\372+s\370%\367\314W\200\355_\370|;\032Q\t\031;n\301\207NV\244\304\223\351\225\013\252\337\210\300\024\330X\000\302\220\304\202\355\005\'\364\027$\231\340\365\204\236\2375\232<\007\226l\266H\235G\220\325[$V7zi}\232ik\204\332\371\332.c\231\025\023\354\207\r\2510\307YP\377\033D\244q\350b\034\007\333f\017\006 \022\334\353\205\211\216%\217/\313Q\252^A \020x;\361V\2137s\010\034af\304\245\354\322\246\254\320\276\361*\253\377l\227\321pb\027j\253\314\364\212\327\203#\210\254\345z%\353L@\233\2463N%\231\343\2641!d\234{(\206\265\201\345\234g\215\264y\300\241\320\026\237\036\223#-hEZ\276\275\303k\245\242\320\207\340\250l\024 \266\265\221l\311\210y\032\313eQ\010\210\342\\?K\002Zq9\306)\240\010\014A\227\016\335\\\312\222T\265S\365\215e\212\256\270\0136\027\255@\266\322$\215F\205A$\255\246\375\nnW\371\307\332\023\265 \220\262\232\307A\304\274\023\346\027\273\346*>8\277q\367\307\222t\025\345N\3334\266\035\201\212\244\357\273\025c\240s\232\024db\230\342\"\205\005\353\267)O\206\354\023\t\032\243\237\020\311\3118s\306\373\273E\\\332\257\273@\025\273\315\327\257\177@\336\355\217\375~\244\273\267\231#\036\326\370SD\221\263\333\236\323\224\362\027.{\331\361\274\004\'\000\315\202\214\320\274\350\326\334P\364\335;\256\353Y\325nak\001\206\344\r!-2\304\270\016\254\324\274\017\026J\232?\202\256\0059\370\241d\343b\014\204\333\372\356\275\334(e\305Y\343\312\375\374}\223\300\250B\311\277;\326\347j\217S\204\2247\2743,\217\302\0267J\217\310^\210\347\266\275yMR\311\024S<\205\337\262\310]^V\310\013\314\347\205\374\325\326T\247\322\305L\301\264\210\024\234\312\031hQS\201\024zn\363\3061\216\361\260\314\240\252\241\005\272?\222\372\272q\005>\376\"\326\203\032\243\302N\241\316\373\216$`\302i\313\033\217\375\304%\317\261-\030\022J\236\244*\375\\]\357}\350\361zF\212\230\004\356j\251\243\346\014pb\257\2060G*\315\315\343-\311$\351n>\271c\'{q\326(\344\230\240wS\271\371\331\306:\302\344\217\006Z\224\023\322\312\371\303\363P\2244\304\333\177\325\267\r\204\231\270\226\253\263\334\352\030\305|\315Y\365e\r\355\263+z\206\3561\350`\004$5\334o\350\t3\206\324\2242\254\336\357\361\006\245n+\311U\347\271a/\252\260\371\022v\024\355\326\221\307\220\014r\370\301\363\312e\026K\013\n.\221\377\204\254\365\312\3473wz\247\"w0\314*\230c]\200v\210@\310)\t}S\337\2608\265\307x\304\030e\343\247\356\331e\000\250z\"\242\360^\000\001UO\316\323}\r\247\262\002\371\251L\223*\340\263X\367\\\312y\026\262J2Y \\j\n\340\321\210\377\023\351\254\031g\001D\343\212\302\230`\017\237@\354)\014\252\377\205\353P\266SK\374\315\335s\374\332=9\216#\224\2519i\314)\371\246\234|o\340 \251\371\000\000I\337:\275\222$d\341\266\0234\0370|\334)\303Tv\342\230\325\243X\225\216\2420\226\336\232\007\232\214\346,}\345$\"\223\235Z.O\217\210\211Ya\353\247CL\247\225 \231\317\032<C\301\013\273e~\370\377\331\267\203@\363\3427\023b\245\245I\t\245\033\241\3700\274@\210\246E\035\032\363\361\261\352P^A\177\340\021\265\2610\363h\344\311\271k&\034\010\211\300f\273E\264T\350N\034`;\\ps\344\014v\336J\356\207\031[J.\306\354\253l\213\315\020\253\254DF\265<ss\277,\355\265\347\003\323\202\230\303DY=)F\220\320\332\027\376\212bu\317\314\277\370\372\215\214\231\273s?\034\240-\206\226/\240kX\230\316x6\337QH\027\360\024\310\002T\212\3238\202\177\254\336\010\365\234%\351Tu@\221[\262;\300 \2016M\301M\250x\335\271\267\275\226\335\232\360\264\307\243\026\334 \251\221\267\341-+~\252\305\3579\3371n\341[I\357:\200Dn\357\320Db\252?X8\273\272\323E\221\035AP\025\324vV\372\300\233\336\225\020l\333\241\237\200(@\t]\331\3107\001\362\230\343\356\277:\236\327\277\357DM^CO\205\222\336\332\356\216Y\362\214\273y\233C\022\326\206\007\226\235X`en:\371&\2011\270\355\030\300\226^\213\360$fko\375\266\345\241K\317\271\033\243>\241\t\215\301c\225\"\305(W\256\026F\216y\240Q\317\001?\375*\\\037N\374\r\354\006E\214\350O\305S]\262=\221\025\035\212\323X\212T\023(\252\222\212\235S\033p*\335\2306^\317\371\313\367)\256\316B\330vU\214\214h\224\2769^\367\225j\341\'AG\357\252\356\233\356r?\341\255M\375\007R\341\260\357\233&\312\230I\037\377\333o\247\320\323\332m\004\231\225\321\224O(l\200d\230-\201\035AY\327Y\372+\210\362\025\003\267v\305\321W\023~\002\026\353l\000$\211\230\002\3309SF\326\240\235\224\001\312\261\t\261\340\000\020\315\331\345Lp\031\361\230\206\020-\356j\313\302\265\300\024\010\333\360)o\2724\322\210\326\014\274C\006\237\340\367\267\267\336\023\243\377b\363\241\342E\037\376\344\221|p\327\036\224cQvaM:H\023\314\276Y(\252\266\321\230\354\360\2742{\241\201\356\255\323N\205\345\037\221\377\337\017o\023\300d\331 >A}\016O\336\305\036\317\030\035\261.2\270%\275,\031\301\222JO\362pb\264\253|\307dq\227\363>?\333\3376ZW\007\036(\261\234hd\004^\007K\251;\266\003`\231\310QX\026`\251 \013\200\242\246\332\033\227u\005\370\252\371Yk\024\326\210\254\023\250=\327\235\220\005\247\322_L\301<zsm\343\327\362O\375\252\331\352\321\255r\304\373\027D\316\261\215\023\356\372B\352\305\376u\322\311\352\214;\232\'<\357i\364\240\273o\262\222V\020\241\033F\275\230\265\306\\\302\2024\364vX(\'\027o\020\346\232\361\206\270A\270\277\335\310 \021\222\213\362\232\023\312Y\252~@\370\255\202\305v\027M\337\222\226 \245\266\243\n_\322du1\367\212\006\317\253\203\r\313\262\276Y\357\315\376\365\037*\257\345\377\233n\001\230v\275\363\210\230\311\323\226\346\213\244\270\236\000\"et\265\305,6\200\320\376\263iP\0143\257\271\367s\365^B\314\233\244x{0\203\225T;\335\031Z\232\027iT\025\331!\364\375\270\362\243\005\245&x\021,8,s\225\027\370\275\235\305\203\257\240\237\271\342c\005O\240\335\233\204\000\002\337y\016%~\343W\002\032\013\217\352\034g\223\224\271mx\302\252\235\017\017\315\3053\010\014\375\t8\\\\La;ia\017\363\316\310f\236\254\3069\'\035\376PLYQ\357q\204\306\034\326ax\262\216\302\242\034k\325\027\0160B\261\202\034;\237\315z\270\371\022\243\337\271\321z\264*\276N\006\230\352[6\031\321\217\351Gq{6\034\217j\\\235\3572\020\374\262\3515\310s\332\014\207\352\217+R\004\341\207o\304\240\256t\307u\203\024u<\306\006\337\200\211M\262\267\024\005\202MP\004\033\003X\243\300=\312\022\277F\320\262H3!PD\347i.\n\023\204O*y\253\2125\241$p\310\314q\222\221\265\314\326\t\245\t\247\025\313.\256e\232\206\273\274.*a\312\313\215\224\332\025=1\362\224\007\265Z\303\303\036\273\275\365]7\016X\200\270}\377\250h\263\244\217\177\t`\265\272\034\333\004\375H\2305\223\316\320gQ\336\236d\376\245\210\007\034\226)AM\266pi\375\021\323\003\n\2150\364\211\037\025F);\211\300\020\211U\007$=\224\235y>e\'\2400#>\312\"%\"\377\023\3105z\260\235u\343\323\320X\300\360X\314(*A\017\304\364\"\010\004\237I\247\030\035\n\221\355\372s\274\360\345\216\331a\335\344\n\345\217\263\3226\\\337sX^\260\247\266\245~\3718\374\266\315)\261gO(\326F\rw)Cnv|UE.\220~\237s-W\006\257\336y\2516AL\371\223\371\002]Ea\335\272?\256\266\363@\340_J\225hwm\016\023\204AZo\333\016\262C\200\0031y\016@\306\242\330x\347w\225Kf:\332\377\203\305\004-\312\315-*PC\234\t\202~\312I\213\361(\305Ao\032BVtN{2\006Xr\314\310\"*\317P\327\345\021#\362X\245X\260\t\372\371\340I$\244v0\217\361\313?\261\226Z\310\2023u\355\361\261\373\211\035\324)\244r\220\227\331v\244\1774\204J\312ac_\375\323\326o\330$\236\372ZU\3363\017\247\267\3020\247\337\222\222\241\221\231\303Gu9F\204\031\230&p\347\211\2666\346:\350\2141_\244\031\333\223\351\265\352\247-\'\362p\215\2424\240@^\330P\370\035p\3440\n,\250oSm\232Tx\214+\240\366\336\250H\232\317\376\333\204\177\330\201\016\265\363\227c\272[b\025\270\303}\202/M\356u\223\345[?\003x\251\260~\022\331\265\0351\201\270\203\222\356\352,h\007\364^\326E\342\024\215N\363\317!\233\200M\362\266Y\000[]q\233>\206K\275\005ZJ\257\222\361\033O\270)\356C\362\221\\\362z7\200[\322(S\275\037\265\037\344{3\002\002\245\027\366\t\302\014\310\224\326Rj/\365.\324VTb>\337q\205+\203E91m\306p\2778N@\241\376i9\033\246D\031Lh\202\340X\314\242\221\356\373B\373\225\002N\251!n\320\363\023\343V\220,\221\005\205\247yqP\271\025C\023\362\343D\320\265\272\027\300\3113\361I9\037\341\240kS\2166`\220k\263^\013&\222\006\t\327\251\2413\365\026A\177\"\315j\312{~\322u\017Z\310@8a/M\353\276\354}\223Q\310:S\371\211\331\230\363X\026\031\241S\214un\232Q\346\374\201\020\0002|@\244t\340\005\025\2405!\314\000\201@\257\324\274\3133\242\302\245RB\200\345\202\303\3603q0F\330\026i\202;\320J\276\217n\311p\235\034\346\202\317j{\356\267\325\267\302oS\3233\037\256\315\232l\233\351\340T\245\271\226\305c\2420sj\010\322\024i\206\026\235\303\263I\020\215\356\214\021\004\021\275H\217\010[.\306\324f\235\231\344\373d\277M\214\320\347r\014Z\215\227F\211\002\023S>\275\004g\303\254\302E\222\215\373v\313T\243I$\342\215\352\nhU\232\232\216\232\036\006\314\277vT\010\027u\034_\362\310p\237\223E\2754/5m\324\204\345Q\'m\267(\305\365\tD\343\003\323\327Z**2t#m\204\2618\357\313\037\365\035\200\374\033\026\275\376\360\351x\325\322s\344d\351\270e\312\344\303]\272\323\357\300\"\365S$@B\276\342\206\0250b\000\372~\322}\243\2339\264\337\347b*~#\370\350\300\340\317\360T\3028\206\\.\321\013\244\354x\327* :7X\217\203\223\340\312\032<\347\203\354\3610\034\342\345\303\356\032Ck\253R\310\334r\327(\204MY\356\336\351#\036F\221,P\363\300\202\010<\302=\220\214\016\206G\306\355\"/g\251\213\024\331\352?v\347)\371xM\374\265\300\177B$\351<\004\265\234s\020\216f\265#\272>cr\000Xu\350\001\232\236v\360*\224\345\320\225sb\247<\321)\2073\337\260\023\030\n\204\001\030\246\227u\316\025\036M\257#\242Az7?\301A\275\203\331\315\247\351\227\314\324\216\320\362\250\365q9\213\331f&\342Iq\212\007m.\375\233\246\036y\257\r`\251;\223\023\243A\3339\262&\326\262\334\232\031\233\233Su\320K\367b\020\242\350\005ex\024\260\237Z\356N,\367cj\244\2604\306\004c\303>3\310i6\226\231\354I\356\023\217\251\2202\306\322\020O{\223+\026\222\224\0347cn\363\215X\n\323\264\036\250\341X\222\027r\230{g\244\353X\204\377\307\312~U,\356\357\320\023~\326\245\230\014\332\014\204\344ZG\274\265m\025\326\022\327\214x\027\004@&OGNM\361\253\366\255\373\345\271\371Z\261D\326.\366\345\250\355R\244af\241\234\264\234[\205\334\257\235\331\342\017\243\202=\301h\201\264O`\305\357\214\372]\254\"%\205R\311\360\223\342\214GN\216e\316\263-%\n\010\235\3500\340\360\201\351M\243I\232E\372^\370\273\315\337\030\177*D\3155c\261)wb\0259Jf\333\227\210\017~\300u\360\274\330\367c\350Zzp\232\277\230\365\0260\275\257u\332\250\220\357\235o\251\261\000\361\351\364q\316\353\244\260\200Ce\316r\034\302\001\267\350\247\003)c\200t \223\313\353\222t\312\000\024\342\2149\235\372\335\"\321\032\r\221\241\035\363\353\354\2564\030\354\254\362(Gp\247\373f\375J\316i-\333\030#\2423Tu\320\363\305\272\321\003\t\006>\016\211\375N\265\226W\206\010q:\017\005*\03542\324\331\373\202\232\317\203\334\331\312\332\213\332\256GV!\272\264\324<\232F\334\261\317\361}DW~\306\265\236\246\241\363G\344\361\362\254\013\032\'KP\311I\363\224Y\017\220\325)\325<\217\205\366\226m\256\276\313z[\214\336\337c\353\325\376^\033\036\304\343\223S[\263\200\r\021\2336\177s>\254r$t\3461\214o7/M\001D\333\213\020\345\3778\350\233gA\251\241-\225?h2$\254\027\304\3308\2103\203\377\363\010\177-\025\006\256\344!\t\233\202\246\231\356.nB{>\322\300)!C1\334\300\363t\247Nz\t\276*\347\224n\257\206\333\222\333\025\245\252\337\'\345\253b\027<=\325BW\033\227\201\217~x\007\264\351_\341y\340E\200\355?\024\350I\3320\240&\246h\262;M\034i\032\361[\'7S\330\3163#2\307\rA\256\3401_\252\230\037b\363\370\373QH0qK:\276yj\325\020\005\374\344\340O\202Nj\345L\371\363\032\n\324\236\2241\310\310Q\210\301!Ve\217\253\236k\224\322\010\031\261L\311o\371&\254)\025\n\303\327\332\247Ey\277F\317\260:\207k\273\331\013\261\347\366t\237p(\231\265\336\'\242B\321\215\223\027t\236K\333\325k\215:\320?Rg\026s\246\260\320&\314\206\r\206\252\2231\275\361Y\033\354k\373\267V\302)\335\362\377\230e\0364\363\272i\372\337\221\016\201\306\311N\351\316C\302\004\321P9\275\304H\000f\203\034\251g\223.\031\360\336\235\275w>\020@\242?\362O\251\367b\226\337\273\025\300N\177\215\275\227\354\237\'\003*\350\017\361\347\353\007H\301\240\036\177\2655M\226k\203\351\026\224\025\247S_wp\032\347[\277\'\257\331\234J_\223Hr\200\242\n\007\356N\032q\334\t\"U\240\360;#\210\3252\235\311\346\n9\220\2143*c\272\013\302\333`\251\211\257\363S\266O\241s\225\004Fi7\313yu\236\370\310\025w\333R\000\243W\371\234\2720}\265\261\211k#:,\234\t\205\215\037*\342b%\265\240\270\264\330\304\230\335\314\223O4\274s\"\230\217\204\020\262p\034 \270\037\273yA\222\252\2619\316OW\260\377v\264\253B\223U\3411`+\022.X\303\201<W\307xc\225\367\024\212\320\202\307\177+\374\351N@pR\347\364\021\334s\006<\360Eh\257\366\004,i\031\332\362Yr\005\336\234%\327\255\266\302g\207\331\027l=\013,\006\253\313\203\311\201\247wc/\247\221\263\224a.>GcnQA\t\373\021Din1\204;\351\213\207\270\253\352\036\005\216j\021\25145-\035Xj\022\231\365\316\253x\257\033\251\034\213\026q\244\021\242\343Z\202\210\351\265\3417\177\211\037\037D\254\023\364\207^\034J\221d\2771|\001\336)\000b\241\375 \205\256U\262\352\033\222\010\374\277\371y3\240UA\222\344^j\020s\332P\365\314\362\037\0206\344\322:\241&\032\332\340\307\017\022\373\372+\247idn\265\022\026\365}R\365\370\330CP\344j\364\006\232\362*\312\005U\354E\3751\362 .D!\220`\010.\3032Y}\317\0032\257\322\240\242T\201x\206B7\276\346\306z\254\232\2478\'i&v\213\231dU\3008\203\243\355\226?b\365\352\350\323\324\236DT>\2361\330\337kBjB\031O\275\227\267\236D\014P\254/\334e\253\"\221\004\177\317\225\227\016-\014\365\224\341\240\022\324~<\350\233\303&\341\252\341.\262\243W\311{\302\000\232\264\370OC\343\"\004p\355\232h\003\215\303\374\264D\352\333\203N\014u0\217\\>\204\257\370\004\006\355{KZ\222\252\267\353\341@\215x06\t\320mq\271{\356M\204j\006\351G\233\364]\203\325j\317p\244\254\253t.\334\021Z\346#\264BwI\000X6|6i1\016\002\362\276\002\334\"\342\260\215U\231\274\261\233\000\352s\340\307\332`\313\267=\257\0352\276i]WF$\200z\236\021\371\203\260\346)\363\334\254S\022\002\220\266\022SX\270\362\022\3017\023\025\320\202H\323\026\331%o\264_\317\314>\324\260$\020\223\257\010\3307\342.\261\016\212Ne\321\247\306w\022Z\314\267\361e(\025\307\204\206\242\370G\215o\304\304\023\022\343i\254\305\026O\204E\034bT\335`\337\264\250\254\344Tl\3018\211p\035\375d\253\2466D\353\263p\303\"\215\365\032\034\370\3443\017\\h^\313c>\024\n|\322\267V>\273\347\014\353}U;\311\333S\335\022UrJ\n\350N\324K\236\362_\377\340*\027M?\201W\204\322\330\2635P\254\346\300\313\347\031\031\363O\003\"\t\2169TA\333\260\276C\345\346\274\006\032\301\315]\025x\374+\323\343#?\361\342\230\005\231H\211+m|\377\324\031\035<#\003\025[f\252m\356\006\263\210\247\002D\214\343\273\213\301=x\006\346\004\335}\320\000\300\t\354l_\226\263\236\\ \3461;fH[\207\001\354\270\347\313\211\317\034\007N\363\320z\245\242\237\342\221/\333x\n\030#\231\265\206\234R\355\013\023{\257}\241x\177b\254\211Xd6\366\216\230F5\312\304_Z6`\333\307\300\356\265\032\022m\030\312\233MLh\025Ak\354h\262\330&\335\274K\250\331\204D^\027\314\331\3238>\273\r\031j7<z/\305\216\215g\353\211\360LmuDL\232x\245|\265\004\254\302$%\200\357\241$\254\365s8z\237)\323>\277.9={~?\025\\+\030R\303:(\335\267\215\357/:5\235\210\357*\201\324\031\317\204\013d\261)\267c}\357\234\220\243\022\254FK\343\006\336*\026\310\024U\255\274\254\367U\021\346h2\264\271\217Q\364\251[Qw\304V\267\264\324\033}\235R\214*g\202`\237\362k0\203\231\335|\334\\\310x@\355s\312(\306u\237\024\244\322R8\247\256\3611xk\252\277\227V\362\276\005\3037\213 Y\254\251^\375\2356\244?3T\013\353\325\353p\002\245\361!L\371Y!d\341\222S4\206\317\245g\024\305)\227\346\017\254-\370\207\376\026\2501\3164\252\316w\323\004@%\265\024\313\327}\266\032\304\364WL\307,9\226\246\374A\372\250\241\214t\213M\316\017\3128\372\322\315\311\007Uu\263@\315<9\310=ve;!@2\371\001\344\023 \324\272`\211\320x\245\257\341\332i\234\214\261>\230\216N\225`Q\337\001k\211\275\314*\244\r\335\360\204vu\265\223=\2138\315\001o\224\027\241h\200\343\270\242\207\237\354P\347\033\265\257\263K\023\345\307\323\021HrL\226G&\031\355\3077J\037R\313\325\022\233\220\247\323\276\260R\233Xp\325\230p\373\242w\324\310\007JJ\335\0030\'\234\364\222\327IT&\323\366\2258`pF\'\331\270Pw\001\357-c\263\321\336\201\271\'#\n_\320\372\265\000t\200xG\"&\374\n\206b\265\313\006jz%iVf%d\302<l\336\321>-\274\\\233\245\252\341A\024G=H\363w\305\344\261\337\273\232\270\361@z\213\334\233\311\350H\231\222\0022-\353\"\261\362\016\300#\301c)\024\315\016\220\021\266\342\020&q\006eb\007\203\357\031\256\3474\027\200\350y\323\335\014\353,\235\343h\277C\372\244t\357t\005\006\213\340R\262^\357\241\224\377\257;\021\325=\2504\\\3575r\255{d\327\216Yp3?\266\205\237\314%\003\333h\341\265\320F\343.w\360\177[\353\200\233\277\032\347\"P\244\242\313ta\373\"c\366l\274[!U|+\215\352?\302\227\002\306\216j\341G\304\335>\363\210-\327C\233\345\305\217]%|\335\216\003YM\231\314\366V\373b\354\340\247\373\272\316\024E\033\222\343\254\007\014\2565\213n\305\243\310J\t\016D\250\372:\336{\316\376\324\254V\002o\342\240o\245\"\003\205\227\000\255F\244-\367\276J\310\362\232e\323sP)\211;b\010wV\341`\335\257#\010\215\002\273+\245|\271N\321?\371Y[{K\007\333}\250B\3651\014\243\333f\221\007\rg\302\347{\217\024$\235J bk\263?\220*XUL\227n\335\022\340\322\t\233\346\211[\217<\035\014\302\221\031H\205S\320\252x\017\\\347U\315\313\221<<_xo\005\326\231\247~\200\335\375\013\351,\257\213\274\305\333a\3779\370\236\344\326\361\027\264ppn\263\032\321\2738L2\212\263\007\365\367\013\376\222\360\027Z\204\270\260@\302l\264\374\003\257\240\300\211\016\246\250[\211\200ZH\360\345\357\233;\325\306\037@CG\353`\024o?\010\320\366\257<A5YU\336\021\215\332/\025\006??\324\2032\302\360\177,+\346n\"[>\236\273\243\205U\250@\236\321\252\254\321WK*\307f\236\340\241\244\316w\341\005\230@\271\342\241,<\215\375,\322]:\320\3738\004Q9\226\233\177\301\324;`\342E\330\202j\260\026N\330ncr\227\376y9\022E\314$\"\000\356\371\026\232\255H\035\260\301ibTj\006\024\205\201\216\262\267\351\344\312\253NE\342\243\344\375G\202U\3114\235\372\351F\215%\230%\313vt}\266e\003\272x\300R\261~\275N\\Z#\352)\230u\277\200\221\016\363_\227\202\031\204\352\314g\222)\004\243K\304%4j\313\300\36364\260\"\205\004?uzn\016|F\364e\313Ls%\033\217\373\222\027\2643}2\'\005\030\014.,\266\025\036\375\214\333\264>i\025\350>\250\365\261T\272\267\373u\035n\352JR\247\031V\020z\310[\273\213\235\231\322\006b\203Z\302\340\365\220\035\225\264Q\213d\374\257\244D\251\233\261\351@\305\372xb\375Z<z\3051\0004`\343\366&\262\030\363h\321\363\272\334(\270\253\007\004I\206\356\321\230\226I\257eX-\341b3\001,\210\026\"\\Z\227\004\024B\371M\271h\352\255\312I\222V\224\024i\307\220\306\271K\340\303y\262F\277\243\002\230\224\345c\244y;\313U#\304\226\313\247gw\344-w\023\304\3174&\212A\376\266\013\202@\211n\353f(c\244n@r\304\001\257\024\007\342\341vc/.\010$p-\377\327[\t\034\316\256\330\332\020\300\274.t\255\327\334OIy\277\272\"Y|\261\372\305\336\242\370r\276\344\334\252\316;T\230\253%\013\375.\353\207<\225sJ %s\217qD\263\374R\000e\3222\223$)\377\343*\300\030\341\361\016{]Hv \260H|N\346\363\301\032\306Ee\254\"e\210v%_\r\023\035\235\302\213\370\r\226\371\033\337\220\356\342\363UB[\372\224\364\375\265\010\343;\026/X\234\367(\nb\236\374\322\t\030q\001@|w\264n\333\237\371\n\026\376>\374\025\262\214\000\327\333\350\340\267>\240HVQ\006\327\257B\020\335\371$O\335\363\311\003\004\007\362\300\020M\300\317\244\277\026\322\230aP\237\251\2415\236\314\262\004\376\265\313\022\006{\227FWc\317Z}\200\223k\303\264\252\204^z\tT6\023\203\274\001\3626\214\024S\273\261\323\264\250\223*K\207q\357(n\260\315K\320\3378\313\t\216<\346w\243l/>\230\034\323j-\242\223\277\217w\n|Q\033W!\n\3501\257r\031$\307Tw\321\005\337\361\312\303N;J\241\200\266\242+U\323i;\262\205sN\302\332\302\322\226QZ\327\020u\216\202\037\340\\Cd\350\366\222\337\271\007\341e\331z\277\221\376\213!\245\216+\\\223\355\\\275\033^\340\251\321+\232\200\355\016j(e+\201f\365\360]4\375\r (bz\014RS\310DD\240\215\2409\233\026|\321\021c\203\2476\222:Wu\250\037\230$\'\324\270qQ\372\272\300Z\2474Md@\013\272#\001B\243\0008\204)a\027\220v\221\266T\3575\340\303+ \254Z`E\232\220\341\234\225\337\026\035*\253!\327\322\371*\0138\265\221\373\010.D\212Zh\014\313\321\357=\007ygk<,\367\321mN\340\376i\326v\026\310-\364m\364X\225\2211Q\263\325C\313>C\246\265\224\367\233\310\3342)\220\332\244\362\252A\276\"!8\335\025\376A\271V\207\231\013)\334i?CmDux\266kqp\361\211n9Q\355\255\361\236\245~\177\264\343\256\001\212I\312.\202\233\265\300\327\264\033\276\364\0078\023\364\2571Vs\024\213e\'\251N)\370\215\306\345[\247>{&\242G\317J\265\223\310%\016\006\3037\324\223e\227Nf,\2279\n\211JK\313\022\024o \340\231h\255\322\351\207\004\246[2\020\344\307\257\000\252\325V9\221f\335.m\233-\366V~r&\023(\346\216#p\366\326\240\271;:\321R\3575/\236Y\331D\r\333\255&5\265\367\274\314\357!\366N\364\217w\312\264e\'\347\010\022\233\315\306\370\247\316]\177\203\273=2\206\013\006|\177\363\376\t\353\277\364 U2\037\204\021\312\027\014x\377\353\270=\244\370\235\236Iv(n\023n\021\010m\335\017\0049\006#\267\2502zrx\031C\355m7\t\315\231\232\026v\216O\275\206\253K9\352I\220\255)\2563\270\261\3014\317\232\216\354Ql\026\313u,l#;\013\376M_GpX\001*\354\326.Y\365\022\256\2027;\2445\033\367\340\341{\302\274\202\315\225\247\037\013\306\321C\214\242E\310:XJ\\\345\024S?r\025\\\334\032\3300\251\253);wK\243EO\345\363*<`1\230\005)\322\037\356\357U\370\t\344\'\201P\215\r#\375\236HI\006*\214k\253\034)\232\351\353\3166\256\207C\214\325\270\217\332\224TD\261\376#\223\204q\240y\245\356%B\275\236L\'\254k\201\250\364E(\270>\026\207\0031(\252\305\014,\275\365\246|\'\203\334\337\266N\254\2132\204\273\346\320\2178F\346\301&\203H\342\344E\230\337\002\376\0021\367\016\306?\262ow\217\374\273\271\321\262N\032\030l\025\'\301\313+\211d\034W\373Km\225\357\226\361^\240\325\313-l\360s\252?\252\027\274\274\345\325\270\030}\025\310\240\200\2328\325\002\014\367\234\0021\334*\215y\271\025M\255\0060\253\212i\334\273\210I\t)\221\354N\374\305)h\234\275\310?\324\263\355X\221\251\"\363Q8\265\250\232\324\203\3548\2538\r\215s\333\317\360.\364u\207v)\t\311\240\365\225\360X%\361\340\276l1p}5PB\221-aP_\364g!\335\032\306\001\344\342\323RX\220\310\315\321\032c\255E\300\233\300\206\0050\217M\205\257\002t\327\373\355\017A\217\340+\214;\3714(\'q\315\214i\207\314\237\210S\224\003u\267\317\000S \213\234\264t\020\217\ni?\226\204\346\003\244\202\002\344\204P\257\217\013i\374\033lWd\207\347\317\224\225\251\343 \365g\373\350\n\374\277\261\276\267T\312W\3464<\257}\215\036\203\252\373\017j\001\313\027\303\372\356\312c\3168\374\357\321\004?U\024\333\271R\352U\256\225\2118\177\323\322\227\010\323\243\t\267\237\257\330}o\356\300\262\310\241\303\355\025\005F\210}\'\211c*\373\034\211\356\n\245\231\3660\177\302)p\"\236o\336*n5\003\374\251\346\253S\310cN\303\351\326\360\031\017{\253\001\246\304\320\254:p\342\272\324\272\302\332\237O\376\032=Z5\321d\246b\346\333\326\260\247\332\214yz\217K#m\r\376.{5\236\262\002l\326h\207\374*`\276\203\010\342v\014\343Q\355=\240\2166\265?m\251\"x\".\331\027\303\360\200\216\276\037\216K\234yt\n\347\235\265\030\243\236\252{;4\250\236\202\023\230\021\236]\221E\353\177?3\003\351ZeX\022cYI\006\355M\345d\256\225\316\312\266\332k\274s|\252\356i+\216\233\355\241\230;\221\200\271\203\304\003\306\253\212{>\254\206\310\251\030\022\034\223(o8~WD\030\321\005\215\001\363\311\302&S\322\223\375DyC\325@\223K-\377\2300\340\304\032<w\203\247\253\340\001\237L\034\352\021\357\005\323\001\356W\367\243\356\253N\002\304\300\035\370\017aV\001\243\321\226\201\347\371\362X\216\371\2237\3771\274F\245\374\353\222\250\353\254\204j``\3647\337\237\275\233\304\223q\306\331;q\2440\216-\027\353\330[\005\224`5\362O\266%\177\224n[6h\215{,\236\216|\366\326\253|\3438\266\270\324\250 n\354>\255,\032\001u\266\310t\275k\346\223\033L\342\002\346}m\267V5\312\023)m\r\344\341\200X}REV\006\t\340\223,\204\272t\202\215c\3358\334\255y\003\203c\215\312\014\333\220ax.\t\203\346\304\014\361q\226Y\216n\033\353^Q\335\204\367\252;\233f\302\323\n\352v\312\344T\332}\325\266L\333)\0169\034\323~c\364\243CD\357\206\250C\t\276\322{\007N6Z9}\315-\n\332!}q\330\024\355\365 \010;,N\340\202\225\034\311kFA\002\204\373wfz\312\274\265\240I\330q`\372q\025JP\227K(\347\025~.C\3039<R\325\242L\220\352\332T\\\213\020S\320\272?\225G/\241,8@\303\"*4\336~\225\351\257\335\010\322\2438\317l\245\253\034I\233A\254\021}\022]\216\267\317\373\001o\030-\352\222\344\020\223\267\217\376\321\003kg\243\267\223\214Y\362\2131\217\272\266\223|\204\222\272\016\\*C\372\2124\375\246p$W\321\"\"9\257U[\362\236\262\366\017\305q-\201\274\257i\032*\377}\377Q\304K\271\\\2351V\274\327|\265\'C\031\023\017\250z\23772\331\2600?jWCn\032\2471\360\335\261\267\2328_\226\021\261\242\376\234gT\265\317\264\312x\3550\312\351`\031E\260bM\\Zk\374\tO\230\214\341b\010\313\322h \003?0\032\227M\212\270}\273\345\177\336\276\206\242~\373,\3563V\314[g\230r\375\326\023i\377\025\203\025\351\3307\021(\231\001\036\305\311Q\300o\027]\257\310\243\341\034\327\022]\236\032=m\256Jt\326\241\033/\315\3035\235\322!\334io\004\263 \\Ek\263D\250\366\004c4^\3368\353\024s\265\033\376\347\346^\213f\224\204-\331\205\274\253D\001\311e\352p\214\030\'\240B\272\321k\034\262\230\320A\305\226sF\2479\004+Pt\304\014v\376\347U\357a{\355\2463\333\257\256\267P*\210\036\255%\322g\360\211\315\374\034S\242\276\240\276\240@\266 x4\2610Z\321{^\323\0253P79\216\223\310>\005\026\311NJ~\237-\226\022X\314\374\347;S\302\\\342\007\357\205\233L\374\3365\304\264\021w\037\323\337\275 Ag\026j-\211\354h\235\021\213\244\027\235\230\313ZN0\257\337\237\037SF\221J\243\033A5\310S\270\340\313\227pu\226\355\314S\202\322\207R\304vw\352$\372qkX\363\210R\317\023x\201\n\032\365\354\217\322\227\021\354\235\021o\004\204\210\200B\377M\017]\210\224\365m`7\234\307\304\027\326b\001H\306\304j\203\027\264\002\232\335n\006\374\210gI4v_\345{\377PE\205\372\361X\220\354\206b7?\321!\r`Ne\212\3772\305\217f<7E\350\363\223{\210\344\352\215%\t\364%\247\\q\313#\002\242,\0372\r\314OGf\206\360\316/tj@\370\343yP\372\220\216X\225\240\316%\337\216\361\376\244\325H\n\341\021\3547\310\302+\\\016\252\000\nxe\311/T\034\366Yo\n\276\245H\235\254\245\326^O\341\031\334\326\002\363\257\237\303\222\272p\275\210\324\333\010\014\222c#\220_/\307\201\003G\314\020\320\254\264\306M\354\210\315\343\245x\311\262%\306\326J\306h\320]-\337\314\370\332\370\213:HD>\242J\020d(\232\2514\241\346\357\243\260\014\200\254\264\0239\324\217\366\000\322y`\233c\256\n\027\025\310\332\225\2419_\261\342\034]\030\366|\"B\215\227\357\010\266\347#\0252\355@\326{r\204\347yL\365\3061\377\037U\031\2575\351\030\304\217*\353Y\026,q\207\\*\356\020\'\177\230p\325\030*i\352/P,\340\024i\354\227\321\311N\260,\254\317\320t\0327\342\267\250/0&\n\362U\255\253y|[\367\232\231\034\372\273\342G\026\340\2159\256\317\242\342\244w\017\273N3\252\315\320\336\261\314\212\240\236\374 1\327\373\177$)\321WDM\350\226\304+jk,\323\t\275\246\"R\277\031\'\3228\244\303\352E^YU\343]\337o\320\231\264/F\024\246 \234`j\373\317\200Rp\326\206\321\030j=\237vu\307\002\345\203\376l3H5\354\275$\033\212kdT*2\244,r\317\007\265cp]\273\'L2\366y\267~\0013\311][<\212\353\331\244\210\267\355\256\035\350\200%\355\314\"\317W\341\346[D\351\007-\000\271\232\0165\217FZ\326\222\362\363\204\210\314\237nqt\247\346k\227O\336./\310\236\312_\352\003\350\370i\235\354\344T\201\207i\001m\200\247\2602?\312\004\324\235N\207\232\027\312\"\356ND\335\234\246\372\345\200\346\260\364\353|\006\236E\272Di&Uq\270\337H\245?\255<\353\203\255p\006\2244\365\225\260\264\033e\032eA\344)\260\023\347\377\177\242\320\336\ng9\254L\262\3311\271\271b\225\242\006V\333\021\273<V\200;\321\016\007\222\355\342R\363s\206\2001\233\331i\254Q\016.9\255rR\257V\010\203\255\354\264\017\307\334K\343\2037\336j\034\010A\3606x\370\323c\014N\177\236\213|\014\005u\204\037e\203\315nH\327< \244\326\005\n\324\002k\252`\375dr\244IGp!\032\337\362n\225\3532)\251\337\306\203\2050\241\372\027.P\314L\347\210\3116\313\016Q\255x\340\217\372\037\206*\001\216fjZ\315\356?\251\005\271\342\275k\302v\252~\241/\266\373\354\242\257\301>\336F\376\304\334D& 7\365\373\222\323\3723\017\031\004\361\361\2451\261Y\337\3051\372\266\251bH\310j\035N\272\213\373$\223\217J\344\376\032\032h\270\375.|\005\177\327\273,\221\234\261\322c~= .\212\315E\010$\322eF\336\260\273\030\022boTVSm\310\321\001K\2145\213\252\306\023\002\006a\024\027A\372\004l?\226\346\361\312=b\312uh\340\266\004\177\276\200\020\217PO2\244L\276\n\036\225\222G2\204=\033N\244\221x\316j\027\213\330o\377\024%\322\322.I\203\216\276\364n\241\260d\274\361&\2017\273d\031\333!\266\311\376\262X%\256\213\\\367\334\200\n\3436\217\215\234\260@\277\034\005u\2625:;Ns\374\322+\217\020\317~\023\037\010\235\236\227\273\300\367\3744\313fhYkgp\367\375v\222\030\024\322N\377\331\024\2142,B\301\207\206\351\237pT\010\343\016\251\20376\340\ra?B\217\375gC\203\350XHk\000Cv\232\224\225\016\004H%]h()\241\331l]\245t\357x\340\002\371\013J\302GW\370NPd\223hM\370\266\036/\273\211\272\3434\032/\325I>\270\236#\331\327\372x\342\256$\305\201\206\225\230n1}9\020F\216\315\213\310\307\310\311:\233\036K\205\\9\201\303 \207\006\177A\355IY\250\200F\377\260\374\373\350\334\262\234\307\256\335\215u\364S\263H\022\024\2646\276\t\027\022/\222i\204\351f\224\373\364\323\201\013\305!C\217P\177\2767\013}\'\"Q\374\237\244(\313;r\347\376u\361\006!\227U>\005\025\250\314\373\345\377\315\323\272\026$K\354\205ow,\244\031\207\211\330\356\221\005.;\032\353`K\"G\332\203!n\"\376\310\313\033\032\203P\254~\346\373wmU^\305\037\031\252Q[\353\271\261g\230g\334\317\3470mB8\310e\324qQQF>\202\233\0314\215\206\031\224\307\026\016\366\354\350\304\351\330\372\315\215.\017\227\372k\270\322\305Z\235\306/\237\232G\361\243\211\t\010\334/s\016\334\035\014a\010\262 \203\302\355\377\023\264<Q\262!\032E.\003\200]{vn\352\316 !Nu\272Y\231<\324\023N\273\016Y\265Z\013\2244{\252\240\347\235\374\264\004\262,\0271\236\037\210{\025e\032\nL\367\006\231\344\353\245~\324\360D8\346^\354E\231n-\273~\276~\230\264+\254\316\2412\005\270\020\335\332\007\233\356\275\270\000\263L3\206\256b\256\351[\312\250^\370+(m`\007\376Q\354\365\n\300\246E\200m\304\3358\376\205\355\2201\250+B\013r\227\371\276\030#_\305\244Y\335\"\357\377\342&~\262tW\246\003\000f\240\226\027`\3137\256\362V\357FC\237g\235\036#\356\023\335\232\235\376R>\250\273_\3614c\014R\302\237\246M|\351\303\341\337`Xm3l\315\003\227\026\250\352\034\246\002\025KNS\342E\251.\220\006\324\374\366E\037\341\246D\262\3578\274\267o\200?\211\245\221\356\024\2050\376\025\226|\256\025\277\210\343\327\022\r\000\020\027\347\236\202W\207\254@\357>\033\304\242\376\247\220\021\222\245\t\211\237\332Jw\031v\262\3336\323\237D}muA(\345X\375F\\\366\277\257\r\0226\322`\025\026\224]\326\017\nm\350w\311\250\320\361nJ\'\314\353\307\2767\265(\314c\271Y\253\364\n\357*\264\220T\346\351l\231\275. \3545\003\177\353\241\222\333\030\235\316\\y.P\372\0349\257_\345H<\342R,\031sg\2025\371\022Z\356\226\255%\311H#\363\273a\237YT\277\332\324Q$r\002^\355\347^\2137\001\t\335@\207C_:\2308i\217Q\332\220\313\n~\334\362G\330:\276\327O\311?W\002\206\330W\375x\234\311x\303=u\020\323\222\240Mos\375\204\177yk\2642.\332\344\024\037|k\273\221G\336\262\006l\334\022wA\0037\212\317M\245\302u\222\270\020L\246\013g\246\340\275\033y\3216\205\272\361\231\372\353__\303\357u\205\210t\327\347d?\334\234\376Syk\302\031\255\022\201\3503\310\232\342\375T\327\244\010\017Qo\306]\024\nJo\035\357\245\256U\316\347+\263d\2069E\275\345\336\224h\322\225}@J\331&xp}i\3377\273pH+x\227\200\272\354DvW\030\215\016R\356\033\363\222\211\010\257\020\241\366/{m\036\032w\251}\215\202\223\235\356%E\255\207\024~\237\377\242\245\251\311\276\360&\021E/\322\355\3013\350L0(%\")\\\030M`|\025\024h~Av\257\030f\030\224\213\023\351\315\270\242\n\177\\K\021(\024\006c\331\267~|7\025U\006\rf\373\334\n.<,\262\262Of\002\177.\n0wA>\304\303>\235\300\036[w\361\031\337\265\317\250\251\333\032\2001\371\010\017Al\213&%\255\250\354\303\021\376\363\026\'\200\345,\334\302\257zI\374%g\010\226\017\370\200^*]}\335\322\360,\036=\255\036\020l*1B\025\217\347\023\3754\322\021\232\300_e\236N\213\373\006T\372}\226\335\230\017\303\215u\327\217\017Y\250\013<\003<\035\031<\327\326\234\373\335\224\264\376Qe\371\310\211\022\312\240jO\211S\336\330\026\211\025\221\021\355|\326$\275\322\363h\033\371\310\355\001\034I[C\234\373{\2407XRb\337\232\225=\322\n\327\217z\215\320nz\000F\262\364\210,z\244\241\033Kh\357\307\357\322\034\023\252\205\361\214~\302\234A\351\262\264\236e\232\'|\366\005\344\302\305\210\301\273\344o\325*\340~\202V\201\203\025y\004\346_\203\255/\262B\340\204/\344\241\220\325\216\202\023\245\350\022\020\362\303\347/\211\364\273\364\037\371\250\323+h\203\357zZM|\234\205\304F\3550\270\307\243dX\272S\375\200\0074\341+\377\337\332\013\322<|\376\025\372\272K\247r\240gf\322Z\020BE\307\216\314*\243T|q9ixvw\017\002IMq\020\241\264[j\335\363`\210\t\372\373&\017\221\202$C\000\335\311\377\301\221*I\036\242\376\2059\005\n\252LM\307\206\334\326 \374\237\214\233\013S\323\305O\362D\356\361\364\270S=&\340\341\320\006\'\236L\246\341\010\353 \305\032\347U\027\202\240jaFY\027o\377\313\017VQ]}\311rV\247\251;<R]J\251/%\013[M\014\303>9\353n\023\346\211\341\260\227\255&] \205\356R#u\241\345\362q)!\0142\330\r(\322\321d\332\233\0148\203z\264\333\254\300\334\003\277\256\003\030nw\016\037\310\347${LZ\026\377H\035\004J\3104\004?\224\354{6\027\366\264}\362c?l\262ef\262$\t\227\002\253\032\344h\035\177f\'\357\004\rINX\216\244G\rn\014\277&K\206\200P2\345e\256\232\301cF\300a\273^k+\367h\373$\037w\241\277k\023~\200Tj\353n\224&Q\366anq\274\032\255\326q\033\230\376-*\233\202EDv\353=\233\317p+\216B?\0042U\177\376\263\245\013v\265\3767\352<\352\341\360u\332\317\313I\277vZ\372\265.\364\030\233\251\337\004b\200\351g#f\026K\026\264\212/(m(\240\237\014\306\021\3144t\315\227\226\336\014\367\360}H\375\363\013}\213\"\210\021_\352uJ&\220\227\250\010\227\226{\277c)\022\024\032\3774\3039\206\265S;\230\037\017\2565C\305\\\262\035\370fu\177wFK\334\022\351]\237q\222\366N\nK\244J\355\002\254y\001\031\252$\316\302^\262\031JW\330*!\227\"\0204aC\327\216\3634\242\201`Z\223b\232\000\347*kXl\326\272d@9>5\271lar\315\252:\227go\353\274\306\304\346Nm\277\307j\341F\000\357\241\376\324\265\230,Q\267\234\315R\007[\301\313*\351%\224o\367Fw\353&\261\274\344\313R\265C7( q\373\022KKV\214\"\333?\250>%rp\227\376M.\032\3614\313\206y\0353\362\337c\007\243\265~O\365\266\210+\311\305\214I\"t\n\370V\377X\3604\022-/\263\256\315hp\353\217\253\360\317\236t\375\316?\360\274\200\033\365\321g\336\370\326\207z:\316\261\335BsM5\240\332\233/u1\026\337w\361\337)\367\322\252n\260\265\035\342\031\312\310\335\230\025\353%\352\251;\007\205\204\305I\026Z\270\360N\026\177\314\242\222\r\340\302\014\253g+!\037\353\320\243\\\2654%_\224\317\243\220\002(\005\252R\244\322WD\373\3762\301\324\037li\364\022A\020X$\365\353\016Q\346\310u3\307\025\016E\222OY\351q\235\362\002\277)\340,\301&\331t\037q:\232\255\020\017\336>wW\354\253\214\206`a+\031\202\337\023\256\367:\274ss\331qK\006t\200\351\366p\260\212\357\303\007\235\245t\270U\004\237\260\036\241\337\263\316\345\337\370\242S\034\357\266\217dg0.\023\301\341\275P\"Z\245\2351\304\205\346\307:\353\301\036\343\240\335LO\255\271\327\'\007\267\333d\275\016\307|\020\277\246\271\022u\311\355E\320\362Sjq\351\342t$J\320A[\253\327b\217\317\002/,\237\3630\353\375\373H\247Z\340\261\320^\02577N`\236<\"\350\230HG8k\330/=w/\350_8\251v\200I\333\362\020\250\313\247\363D\220\216\314\225s\336\010\271x\321\010\325\357\374\247\002C\257\322\n\227V\000\370\3158\232\013~U.\344\271\262\350bw\0303WI\361\342$!I\313\016\323=\233\270\010\225\360\273Ja@!\366\316e<\325\301\356L\353\327D\240#\220\177\344\241X\303\031\272\032\227\272\362}\364\004\202\233!\235\340\nXLr\205\211M\260\177\215\n\257\205c\323A\310s\373\322\\\236\227\021\326\010\004\t\373\360\026\037\253\306\332o\"\202\324\025\366\212(\030\245$(\213g\037\006\222\366\260=e\213\312e\n\326\375\314\265\377\361\037\236{\021\306\323+\314\013>\251>\207E\201%r\367\334\232\357\232\030h\375\3368\355\221\242\263H$C\207$\370?\356\023\354\230~0\304\327+\177*JX]\347Q6\\\240\363%E\177)\265#\364kq\275\271\214\223T4x_\\\016\344\352\312\243[\177z\373w\340\352tO\010\275\303\343TI\326\264\213\017\007\010\3709M(\230D\215\244\230\230\027\366rT\265\350\366Y\004\203\272\232\375*\340X\321\377\327\266[G\006\000\002\254\375\034-\325\201\303\337\235\220|\030\355$\300\222\017\354\232\346h\213Nn\355\242\242M\\\250U\335r\264\236\316\345\272\032c\312\364\322\342\t\t+\3563\345\020\346BDv\"|\360\037\036\024\027\272\266\"[\325\2005\317[\0325\337\221 \272\014n\'\301.M\307j\r\374g\324q\334\251\326\001\035\261\311M\253#~\014\017,\025>\277~g\027\013\337z\001\217\364A\221\340I\017\321\356\262#\326\276\022\211\265i~\212\233\322\271(\257\217V\261\230P\022\251\207\2733\265\275\326\336{\307\r\236\365)s\020i\036\277\243\002V\005_\277\215*u,@\322\306T\316\311\351gB\034Sl\357\242\240\254\310\207\014\253$\331\201C\032\037\326}b[\211\367\346\301\002\211\343k\021\326!\002m\323\316\030\364P\000\321^\240\323`\000"
}
}
},
{
decode {
chunk {
type: DELTA,
timestamp: 33333,
duration: 33333,
# vp8-P-frame-320x240
data: "q\030\000\020\020\244\000\036\333\377#r\025\215\303\216\005\271\360yf\322\035\201\344\366\2315\'\n\235V\326\022|\017`\263;2d\207W\262xQ_\347)\333\355,\215C\356:\033\241\331\271\212-\217\002\344X\214,g\340B\2527\266\357\375\217\021*\'\2072Mv5\215\225\302\265>ij\305}.\331\315\303\377g\\cj\'\245\226\274R\311*S\'A\235\'\200\300\020D\3223&\002e_s\357\253j\352\325\205\033H\006\031\022\220\324\204\251e\022X\314)A\305\010\006X&\232\016a\300j\246\326m\361\317\232\212\343;\243\264\373n3\355\270\341\033\262\325\260r@\277\207\371\030G\360\303\3720\332\332\017?\237\376\357i02d\216\250\003\n\022\246\321\333\031UV\337\022\240\2655\032Er\271\021d\242\243\021\264\317\221@\234W[\226jsp\252\345\202V\354Z\n\370\261\3626\306\023\002\2340\212M\204\253\321\221MD\274Ko0R\234\026\304O\267\340\311U\237\245\2077\315jJT\222\317\270\245\353\317\3247\251\356,_S\357\262\331\212\274\336\3638r\214l\254\323\n=\365\366\302y\037K\313Q6H\027\024\260\024\232\312\306\024\036\010\201\205\"\240\342\021\t\263\260\243\037)L\016\234\367\223\0013\206\233E\014V\262\\\277\023\3303\020i<(\366\261\266\223*\216\233G,\302Q\344\022#\221\252\006<x\260~\201\355>o\204\004[P\355\260\366\212\341\273\335;\215\375\373\263\275\177\302\266\311\325\325r\004\227\177\037L\277\272Z\335\216F\330\223\340\236\016\266\350\231?\343\245\177\276Z5\210\021\262I\001\223\320\241\255\210\232\334\023L\270\321\247cS\341\326\270\267\210\234\272\205nLb\341\3613\235{\337\310\224, \036\241;+\233\367b\214\033\022\360\272O\334,f>\324\322\372D\324#\\Z{\245\020Ssk\230%\210\023\314\267\346\305\245oe\351\374|(\217\256\021\345\237\274v\253\200\271\020\310\215\316\205:\272;\336\313\353\225\263\0348\026\347\263/\313\0376%\360y/~cAy\207TK\260\326\016\\\240\330d\025\351.\220\017\211\225\344Q@\313+\306=\177?\324\225\340\306Q\265%\020\3139\322\211Q\251\005\261\017\244\246\350q\274`\210<\230\245\330\345\224A)\345\232\253\276\307\367\253\324?g\323l\272{\310\200\355\335\251\2528D\257\340\343\r\036ja0\347\370\205 \370\337\225\212\335\256\221\300M\311\363\313\026\374\253u\200\257\257\227\347\321\007\211\207K^\313\277{\212\226\345g\316\3658Xi\354X\177Y|\207\202q\375\265\016\275\023\357\240H\366/d\300\220\354\2121\241\201\2270\374\312\2702\355\201\366\r^\365\036[\005:j\031}L\233\300\236r\251+\351\305g\236\261\367h\334\253\325\202\353\014-\352\177\377gw\332\351m\240\206H\325\276\273Z\344\000\225L\327\214\374\314\275ia\004\342#\021\0312H\276\327\261\211\302E6\301a)\356\327\256\367\376\357R@\003\304\271Y\365\374x\333\267\333\364u\336)\205\377\217)-ZY\204\031c\'6i_\376\377\374\351<\361z\3673D\250\212\216\256\312\372\013\231\307XL\266X\033\315\3164K^E\212\010\\\247\254W\317\035\204\221qzw\023\271PL\205\302\214=\317&yp9\017\245\247\300!N}\270\346\215x\375#=\2736\256N=-4<\353\037\250\220M\376\256\377\267$\270WO\235B\002O\005\304\272F\003\331\360,\244\315\250^C\341w\032\243\361@\232C\002=\226_D\255h\035\241\276Mo\000D_nyVcD\204v\242e\031\025?v\365-ky6\034\307\317J\312+\304\2136\321\277\004*\225\213xa$\340\262\263m\356\214@\306\222W\204\326\204M~\275\355\035O\300^\016\360\324\202\224B\310\373d\363\231-\201\347\260\335\177;\303T1\002\035\274+\246\274\343\000"
}
}
},
{
flush {}
},
{
reset {}
},
{
configure {
codec: 'vp8'
}
},
{
decode {
chunk {
type: DELTA,
timestamp: 33333,
duration: 33333,
# vp8-P-frame-320x240
data: "q\030\000\020\020\244\000\036\333\377#r\025\215\303\216\005\271\360yf\322\035\201\344\366\2315\'\n\235V\326\022|\017`\263;2d\207W\262xQ_\347)\333\355,\215C\356:\033\241\331\271\212-\217\002\344X\214,g\340B\2527\266\357\375\217\021*\'\2072Mv5\215\225\302\265>ij\305}.\331\315\303\377g\\cj\'\245\226\274R\311*S\'A\235\'\200\300\020D\3223&\002e_s\357\253j\352\325\205\033H\006\031\022\220\324\204\251e\022X\314)A\305\010\006X&\232\016a\300j\246\326m\361\317\232\212\343;\243\264\373n3\355\270\341\033\262\325\260r@\277\207\371\030G\360\303\3720\332\332\017?\237\376\357i02d\216\250\003\n\022\246\321\333\031UV\337\022\240\2655\032Er\271\021d\242\243\021\264\317\221@\234W[\226jsp\252\345\202V\354Z\n\370\261\3626\306\023\002\2340\212M\204\253\321\221MD\274Ko0R\234\026\304O\267\340\311U\237\245\2077\315jJT\222\317\270\245\353\317\3247\251\356,_S\357\262\331\212\274\336\3638r\214l\254\323\n=\365\366\302y\037K\313Q6H\027\024\260\024\232\312\306\024\036\010\201\205\"\240\342\021\t\263\260\243\037)L\016\234\367\223\0013\206\233E\014V\262\\\277\023\3303\020i<(\366\261\266\223*\216\233G,\302Q\344\022#\221\252\006<x\260~\201\355>o\204\004[P\355\260\366\212\341\273\335;\215\375\373\263\275\177\302\266\311\325\325r\004\227\177\037L\277\272Z\335\216F\330\223\340\236\016\266\350\231?\343\245\177\276Z5\210\021\262I\001\223\320\241\255\210\232\334\023L\270\321\247cS\341\326\270\267\210\234\272\205nLb\341\3613\235{\337\310\224, \036\241;+\233\367b\214\033\022\360\272O\334,f>\324\322\372D\324#\\Z{\245\020Ssk\230%\210\023\314\267\346\305\245oe\351\374|(\217\256\021\345\237\274v\253\200\271\020\310\215\316\205:\272;\336\313\353\225\263\0348\026\347\263/\313\0376%\360y/~cAy\207TK\260\326\016\\\240\330d\025\351.\220\017\211\225\344Q@\313+\306=\177?\324\225\340\306Q\265%\020\3139\322\211Q\251\005\261\017\244\246\350q\274`\210<\230\245\330\345\224A)\345\232\253\276\307\367\253\324?g\323l\272{\310\200\355\335\251\2528D\257\340\343\r\036ja0\347\370\205 \370\337\225\212\335\256\221\300M\311\363\313\026\374\253u\200\257\257\227\347\321\007\211\207K^\313\277{\212\226\345g\316\3658Xi\354X\177Y|\207\202q\375\265\016\275\023\357\240H\366/d\300\220\354\2121\241\201\2270\374\312\2702\355\201\366\r^\365\036[\005:j\031}L\233\300\236r\251+\351\305g\236\261\367h\334\253\325\202\353\014-\352\177\377gw\332\351m\240\206H\325\276\273Z\344\000\225L\327\214\374\314\275ia\004\342#\021\0312H\276\327\261\211\302E6\301a)\356\327\256\367\376\357R@\003\304\271Y\365\374x\333\267\333\364u\336)\205\377\217)-ZY\204\031c\'6i_\376\377\374\351<\361z\3673D\250\212\216\256\312\372\013\231\307XL\266X\033\315\3164K^E\212\010\\\247\254W\317\035\204\221qzw\023\271PL\205\302\214=\317&yp9\017\245\247\300!N}\270\346\215x\375#=\2736\256N=-4<\353\037\250\220M\376\256\377\267$\270WO\235B\002O\005\304\272F\003\331\360,\244\315\250^C\341w\032\243\361@\232C\002=\226_D\255h\035\241\276Mo\000D_nyVcD\204v\242e\031\025?v\365-ky6\034\307\317J\312+\304\2136\321\277\004*\225\213xa$\340\262\263m\356\214@\306\222W\204\326\204M~\275\355\035O\300^\016\360\324\202\224B\310\373d\363\231-\201\347\260\335\177;\303T1\002\035\274+\246\274\343\000"
}
}
},
{
close {}
}
]
\ No newline at end of file
# Simulates reasonable (mis)usage of VideoDecoder
# configure(vp8)
# decode() a real key then delta frame
# flush(), reset(), re configure(vp8)
# decode() the delta frame again (trigger decode error)
# close() (trigger exception (already closed by error))
invocations: [
{
configure {
codec: 'vp09.00.10.08'
}
},
{
decode {
chunk {
type: KEY,
timestamp: 0,
duration: 33333,
# VP9 I-frame
data: "\202I\203B\000\023\360\016\366\0108$\034\030J\000\010\220\177\325\371\276\217\347q\376\337\217\362\177\355\177\'\014\361\036\227\342|?\366\1777\350\375\\7\324xOG\363\277O\310\374\377\033\363zN\227\372?w\250\361\037\023\362t\317\335\362\177G\315\377{\362~\217HJ\313\362}\327\375\217\252\177tc\336\001\3003>\275o\252\351\224\276\307\336\365\337c\272\372\274\300\367_\003Q\264\016\251\277w\276\362p\203\367z\313\272\370\244o\333\034\313\377\240R\212\346\"\300sUU\177\341D\253\377\000\000\000ir\372d\243\367\356\013\251.\345\215O\231\302\204h\006\223x[\"\021\336-\352\227\306\323\345d\3531\263(8\326\327\302\241\260\026\346o\307\262=\247\2415y\224\246b\335;\275o>\324\326\236#\377\023\316\254\200ZP\010\313\\Z\032\267\261\n\3358\323=\373\352\221\351\220\306\254\304\225v\250\305\320\336\006G\332y\307\272\203\0149\345\024\345t\215\344\343\202*\311\353\311-\315\202\224\267\306L\2772J~\311\353j\323\321\240\246\371V&\343\013og\323Q\033\355F\266&\272\351\022S\033\375yj\214\277\302{I2\032_\257\351\345q\225J\017\264T\230\202\330)\366\324B\311<\307\235\331\343\243\242\263\205_\376vNM\235M4Q\027YS\360%\021\206\200\r\010\266\347\340\004\231\377\254\361\266\014\335\364\343\003\364\274&\314\372\234\257\227\334IX\3734\020\036\214\364\010H\365\236\346\035\271\237\367\236\313\310M\2609\363\315\370Q(\326\334\246j:\323\372W?As\027\030\023\221\317\202\372\211\360\334\t\022-4\307PzI$)\345\234\210EY=yU\364\250\316\202\032\364\253FWY\004[\203\340\236\'\375\236\202}p\216\334Z\264*!}%Af2\262\247\310\372\001\031k\213CV\366![\247 \277\371\225\261;\035\026vT\236\231\007(EcP\363\030\344(\332\314i\232\341z0:+\302\306F\322b#=\224\022; \241\306)\n\'\013\337\241\365#)\346r\022\230^\377b\365 y.qlO]j\327\340P\325\226\027s\223\345)L3pv\307\317\271\367\236\214e\320\227i\302c\255\355\212R\221T\347\326\274\256rt=\222\207*\302L\367$2QM\264xQ\r\313\376\031\233\240\231\255p\331-}F\352\324\210\245\022\270]\203_j:\033\361Q/\376\036\243\226h\273\261\300\2514\366\177\032\310.\231,[\034\220Q[o\304y\r\247\334\322\274\021\367G\253\231xE\222\250\200\252\234\230\360\322\260\341\253\220\266\246\247\004p\010f{\024\266\314\257\264\342m\250-t\313\'\346w\234d\035O\364%\022Q^Y\356\210\212\347x\375\327t\037&J\014\3728\334\311\307D.1v \002\263\027\0350\206\361\264\377\032{\257\375\356K\301\357\n\366\327_\263\343\302\030`SR\372\364m\225\244\234\307\210h\031l1\303XB\223\007\323\022\346g\303)\226\026\325\361-\311\260\204b\207\206w\361L\343tc\321Ccp`\304\1771\344U\004\322D\001\200\013o\202,\020\206\310\037\343\221\035f\314\370\340l\335h\251B\032\345\026\353qd,C\243Z\302?\212Un\232^\030\353\020\257+!\034\023\362\244\001|\320J\356\021\300}[Z\272\312\216\375\036\215\234\360o\302\300\260=\351\002\327\205\200u\360(\207\323\356X\237\023M=\322\225;\022<.\214z\371\'\220\367\322[\\y\370*\325\t\325\033n\022\364\'\037R\006\360\222\233Q\017\227\252+\006D\300#\345m\346|\273[\031\367\375\rfZ:\305\225\036\277\376i\006z\303\t\267~\317\345\312N\221\021b/\324\367\244\013u\373\236\005!D2\375\202\316g\241\247\255L\306\376#\213\363\266\374\232N\370\314$\275\333\363|\234\225H\031\\\347\252./\021\237\374E\377\343J\222?\264\374\376\335\342y\316\335\371\330\275\003\034vH\256\370\360oi{\300\273\220\312\255EU\252\266K\345\314\214\310\2774\267$ux\346\366\204\024\0131pagm\033MI\3407\323\3253\211 V~\300\332\251\177\203\350_\377pr\202\026:~a\224\332\264l\'\330c\300\'\016(\300oO-\256\342Y\257\read\303\275n\023\366\261\220\000i\235z\243\016\214\001\317\3327\366\262Rz\360R\r\270\351K_.\034\221\346Q;\345\357\261v\377u|$\213o3\307\273\350\255\004\367\245\265\343Fb\005J\030\232/\206\236\177\265\273IB\331\3031%\272qGROC\264\013f\315u\337&\177N\272hy\226F \235\235^\"\020\007\3224?\365\017_\267\356\267\032\221\\?\305\265\333\033\337\362\211\3554\374p\350\2634\016\223\377\365)\016n\227\203K\250\361\247\210\200\003\330\3130\342\256\243\370%\311E\272[h\212\265\247\257\273_\247\235\024r\\\311\237\347\n\370\",\306\270J}\261#XO\236\020\305\246U\362\016\357on\330\346U\n9\245\221f\377\371c\246\177\'\356f|\201\023s\351\377\207\036S])\242\302\"s\311\027\221\010\332\311\210\300p\212\260G5l^\316\222.\315\023\320\230/i_\373\231\237 D\334\324\346H\036\222.\315\023\320\230\223\353?\206\\i\236\335\227\365Z\356X3\'Nt\355\217AYW\326\376\325-\217g\371\256\213\036\013\370\255Q\337\226.L\237\237s\030\331\031\302a\314\377\375\344gEo\370\362U_\024\240T\033\301e\353\242\256,\326]yDpLF+\244\255\034\031\371\204\254*L\241/\260\334\273tf\255$\377\236\224&w\254\225J\301\\Cd\212w\302t\235\334\230\270LG\330\261\206\236M\021g\360\344\t\216I\204\300i\231=\350\301\205o8\323\344\212\274\212u\263\335d\213\203\243\311-\301\257\3660\244/\313{\036\022\250:y7\233\375\035\377F\017\216K\2724?\001\234\001\267\217z_\350*\342\233]z\246\310\206\036\306\310\255\324\200\367\234`\271\277\337\376\222\324\001\221\235Z t\331k\251\356t-w\344Y#\322\265s\303\031\336\307\200\342\177w\177\257\247\241\253_t\251U\246Tny\373\2713\221\010\014v\271N#\203.\207)\224\235\324r9;\n\36269\326\266s:\306^\271\234\'v\215u\244\262\357\340\005\257\207\2474wSG\252\313\254\334\270\027\034\336\026\220L\225\224\375\031M\313I\303\351\034\021\217X\231\317\351\\\245g\230\000\215\247\274\321\374\003?\367Wu\366b5<\200\235\340\213\205\010\363\311\262y\020\202<\tp\210\030T\334\005\205\366\032\242L\264\314>\336+?~\255\020\277e\031@\251\211\346\033\001\354\032\340C\005\235\252V\255\267\374\371\027m\200\313\365\001\373\024\242\351Q\365w\246-\342Q\223[\302\331\020\030\271V\375\240\000\377\251h|21\001\312L\223\014]\253R3\241\2425(\027\214\357\263\364-\353\347\260\344.m\200#\267A\207\t\335\317U\032,\267\3060\226\342\317\222\337[\241\352*\327\032\311y\247\354\2364\302B\347\302\325\3276cS:\252\307R\016\213\341\350\206f\347rO\270\034\374\306\354\212_\344FB\375\323NU(u\243\2363<\231\235\371\3577U\016\256k:\264\376S \026\325\202;[\331\254>Sn\342\361\322\361\024\326\005\277\372\244\247\334@\353*\323\377\301\314Wu\223\220,\201\t\317;eLI\3213.\214J\3237P\310b\235d\263jE\000\350\235\232\257\366w\022\030\002\336\201\256\307\372\260Y;\373A\007\006\022l5\215d\3037\234^\344\214f\344\325rz\224c\263\225N\245=7[\035\274\367~\277\251I\223i\'\354\t\370\206\223\206\013a\347\334\006@Dx(\007\000c\311L\367\233\005\322\254\035\250\255\023\010\203\315\347\273\223\217\004p\273\2277\307\235jR\212\326\321Xw\363\247b,?\0270\240p\205\372\350\242t\250\205\010\n7\307\374\250\274>\357N+\264\370gu\305\222\333\001\034\243\216%\244\350z\211N\014\355\377\347D\215\223\310\262\243\312\253\035\220\303\233l[\026<\020\2438\366\260|\251\027\270nu\033\332`\360)\tc\214\021\351CB4\024\030\3749\204Md\345\007\365\251W\367\225\007\247\376\273\307]j\353)3:\222\327 ?\005\262\377\201\261\027U\360\232\266m\245\373\276\2776C\024\024\353\3131\371\030ve\301 \344\306x\271\363l\364\356\312\243:\376N\264\353\310\3513\302\004\205\320o\210\005vN\362\355\305\253\327\345\334\322\367\246\320\205\t\t\210Q\257\352\366m\361\347;\261\376\3228\265\353\363)\317\375\034U\324\314d\320\315\365\214\260\245\363\312}G\360kx\003\273\347\363O\036\343\376?\366\273Cgv\320\200L\034:\221\214\177\355\022\245|\375~m\275,\355\264\302\377\337}\n\207[NQO\363?\277\334l\326\022y\006wk9\177\255k\267\273\347o\335\364.!s\311\345\022\321J\"\031\374\347a\223\227 aQ\034z\336?f\307\375M\233\001`\367&d@\247?\341\233\217*\020\3503\272\211\255\236\231\205\300&4\213\003\360I\336O\034\244~~\\L\244\312G\036\2145\344\036\217$\022i\243\205U\221xk\361\224^6\372~,j\325\306\262w\377\231\0210e_\004!{Kp-\212\201\214?\374ij\350c#\206;\317lF\330X\177\2706\334\314\374\177n\227o\231|Z%\030\241\344\245B ox\270yFT\317\\\307\312\233M\230\0019\377K\316K\323\322\362II\324}\362lV\002\005XD*X\201;\000]l\320\373\263s\221{C;0\377\361\365?\324\331\262\366\325\017y\254\311\246\263|\013\265\270\365\327}\353\004R\243<Q\345\266h\370\002\213\350\262l\252O\251~\347\327\355\311,\312%\217?\310&\351\243\340\364 \n\350\037\245\346\006\371\032\022\347\305\0222f\353\\^\033\320\203\032Vt\241$\204\265\275\376\007J5A\337}Yc\320\334\365\314\3236\357\1778\220\355\022\306\376\232\035\274\376@2\327<\331\027\303\217\347Y\223G\005o\343\030P\n\214\327\315\317\266\2354\231/Z2\344\350\215\273}\321\002\361\220X\366\232\352+w\3259\004M6;y\267?\376\227-\324\373\272]<\205(\253n\022?\325\177\337r\233\277\267\310\375\242o\201\366`<\235\0340\305\243\203\373\255\315]\221)f\300\003\355\300\n\010\306\361H\240\007[\342c\224\300\301\254\'\362\212\313\246\0216\013\235s\311t\227\325\214}R\240|\364\357\257h\000\302S\337\r\215rw\234\273|\021ux\177\t\236\266\202+\251\232\314H\177\273\373\302\010`\357??RY\304\377\212\243\026\344 ^\023\001k\234=\306X@g\373\201v\362\002`\035\010\'v\023\216\334\377\362\365\226\232\177p\203f\027\031\324\205M\336\273\200\245\220\341\212\360\007\355W\260\324\010\362\034\322C\nB\257I,$n\276Is\255\341=\002\373\323\214c\366X\010m6&\374]B2g*D\027\021\030XA\n\302$\270{qRM\037\340\222~0\320\007\306\326\306u\007\244\222B\236Y\310\204U\223\327\270\032\254?\237a\257\377\206)\204\022\230\252\235\270\240(x\2273\342\3552%\371\3718@I\357\203$\347/\331\347\020TD&\016\313\202\265\230\014\360S\2400\377G\357\310\301\006\214Z\354\362\263\242\363\234\361\337y\275\326\345\263\265d\270B}\177\006<\352\337\204\315\332\024\232\037\351;S\226\227:\222\340}\350\005\301\240\250\317\341\025\200\013\213\023\256_\223\342\222\025~&\322\0257\223\301\276\237\252U\210\322&\2720\267QX\214\017Ay\327\353\261\343 7_\025\323i\374r\311u\2075\211&\333\277\273(\267n{\310u:\277\377\r[\351K\234\377\302Mp :\256\224\236\322co\033\225w\3610N\202\261\303\356\206I\320\316L3\354?\202\253\351)\266\376\325\241\237\367\377\377(\024\326V\374\204\327\305D\364\341/\344\022\267\372\310\031\232\"Y/\004\351\233\252\032\034\2176>\340\212\364\361\350\220\3717c\\\371S\\\330\205\361\033\003\200\211y\332\331\026\327\230\344\325\006\273\272\000\367@\315RpB\200m\242\361=\013\216fI\235\312\032\006\243AS\306\276\351vM\000"
}
}
},
{
decode {
chunk {
type: DELTA,
timestamp: 33333,
duration: 33333,
# VP9 P-frame
data: "\206\000@\222\234 P\000\000\026v\206[\316\021\355\277\256g\370\306\001*\310\337Mf\235\366A\000\000W>\377\\\004h\2229\n\033\330b\317\237\220\252\001\246?QB\316\372\265n7\366\273e\203\212.k\333\025\005[\326\333x/:{(\257\375\265nl\342\376g\252\314\255>\033\206\010?\230cj@M|l\t\234\\|\235\311n\'|\271\217\027a\025\005-\226\312<\270h\306\357\351.\313\t\312\250\243//\377\240\353X*\r{\016\312\353I4qt\373.\270\023\343\n\026e\314T\022\014\250OO\020m\336\023\335\350\375\253\360\362(\300\320\010JSg\035\226\n\343\255\242\221Q\236\345\264/|$\377\3068F;\222\\\352\343!\324\000"
}
}
},
{
flush {}
},
{
reset {}
},
{
configure {
codec: 'vp09.00.10.08'
}
},
{
decode {
chunk {
type: DELTA,
timestamp: 33333,
duration: 33333,
# VP9 P-frame
data: "\206\000@\222\234 P\000\000\026v\206[\316\021\355\277\256g\370\306\001*\310\337Mf\235\366A\000\000W>\377\\\004h\2229\n\033\330b\317\237\220\252\001\246?QB\316\372\265n7\366\273e\203\212.k\333\025\005[\326\333x/:{(\257\375\265nl\342\376g\252\314\255>\033\206\010?\230cj@M|l\t\234\\|\235\311n\'|\271\217\027a\025\005-\226\312<\270h\306\357\351.\313\t\312\250\243//\377\240\353X*\r{\016\312\353I4qt\373.\270\023\343\n\026e\314T\022\014\250OO\020m\336\023\335\350\375\253\360\362(\300\320\010JSg\035\226\n\343\255\242\221Q\236\345\264/|$\377\3068F;\222\\\352\343!\324\000"
}
}
},
{
close {}
}
]
\ No newline at end of file
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "third_party/blink/renderer/modules/webcodecs/fuzzer_utils.h"
#include "third_party/blink/renderer/bindings/core/v8/script_function.h"
#include "third_party/blink/renderer/bindings/core/v8/script_value.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_encoded_video_config.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_video_decoder_init.h"
#include "third_party/blink/renderer/core/typed_arrays/dom_array_buffer.h"
#include "third_party/blink/renderer/modules/webcodecs/fuzzer_inputs.pb.h"
#include "third_party/blink/renderer/platform/bindings/script_state.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
#include <string>
namespace blink {
// static
FakeFunction* FakeFunction::Create(ScriptState* script_state,
std::string name) {
return MakeGarbageCollected<FakeFunction>(script_state, name);
}
FakeFunction::FakeFunction(ScriptState* script_state, std::string name)
: ScriptFunction(script_state), name_(name) {}
v8::Local<v8::Function> FakeFunction::Bind() {
return BindToV8Function();
}
ScriptValue FakeFunction::Call(ScriptValue) {
return ScriptValue();
}
EncodedVideoConfig* MakeDecoderConfig(
const wc_fuzzer::ConfigureVideoDecoder& proto) {
auto* config = EncodedVideoConfig::Create();
config->setCodec(proto.codec().c_str());
DOMArrayBuffer* data_copy = DOMArrayBuffer::Create(
proto.description().data(), proto.description().size());
config->setDescription(
ArrayBufferOrArrayBufferView::FromArrayBuffer(data_copy));
return config;
}
String ToChunkType(wc_fuzzer::EncodedVideoChunk_EncodedVideoChunkType type) {
switch (type) {
case wc_fuzzer::EncodedVideoChunk_EncodedVideoChunkType_KEY:
return "key";
case wc_fuzzer::EncodedVideoChunk_EncodedVideoChunkType_DELTA:
return "delta";
}
}
EncodedVideoChunk* MakeEncodedVideoChunk(
const wc_fuzzer::EncodedVideoChunk& proto) {
DOMArrayBuffer* data_copy =
DOMArrayBuffer::Create(proto.data().data(), proto.data().size());
return EncodedVideoChunk::Create(ToChunkType(proto.type()), proto.timestamp(),
proto.duration(), data_copy);
}
} // namespace blink
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_WEBCODECS_FUZZER_UTILS_H_
#define THIRD_PARTY_BLINK_RENDERER_MODULES_WEBCODECS_FUZZER_UTILS_H_
#include "third_party/blink/renderer/bindings/core/v8/script_function.h"
#include "third_party/blink/renderer/bindings/core/v8/script_value.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_encoded_video_config.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_video_decoder_init.h"
#include "third_party/blink/renderer/core/typed_arrays/dom_array_buffer.h"
#include "third_party/blink/renderer/modules/webcodecs/encoded_video_chunk.h"
#include "third_party/blink/renderer/modules/webcodecs/fuzzer_inputs.pb.h"
#include "third_party/blink/renderer/platform/bindings/script_state.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
#include <string>
namespace blink {
class FakeFunction : public ScriptFunction {
public:
static FakeFunction* Create(ScriptState* script_state, std::string name);
explicit FakeFunction(ScriptState* script_state, std::string name);
v8::Local<v8::Function> Bind();
ScriptValue Call(ScriptValue) override;
private:
const std::string name_;
};
EncodedVideoConfig* MakeDecoderConfig(
const wc_fuzzer::ConfigureVideoDecoder& proto);
EncodedVideoChunk* MakeEncodedVideoChunk(
const wc_fuzzer::EncodedVideoChunk& proto);
String ToChunkType(wc_fuzzer::EncodedVideoChunk_EncodedVideoChunkType type);
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_WEBCODECS_FUZZER_UTILS_H_
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/run_loop.h"
#include "testing/libfuzzer/proto/lpm_interface.h"
#include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_encoded_video_config.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_video_decoder_init.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_video_frame_output_callback.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_web_codecs_error_callback.h"
#include "third_party/blink/renderer/core/frame/local_frame.h"
#include "third_party/blink/renderer/core/frame/settings.h"
#include "third_party/blink/renderer/core/testing/dummy_page_holder.h"
#include "third_party/blink/renderer/modules/webcodecs/encoded_video_chunk.h"
#include "third_party/blink/renderer/modules/webcodecs/fuzzer_inputs.pb.h"
#include "third_party/blink/renderer/modules/webcodecs/fuzzer_utils.h"
#include "third_party/blink/renderer/modules/webcodecs/video_decoder.h"
#include "third_party/blink/renderer/platform/bindings/exception_state.h"
#include "third_party/blink/renderer/platform/bindings/script_state.h"
#include "third_party/blink/renderer/platform/bindings/v8_per_isolate_data.h"
#include "third_party/blink/renderer/platform/heap/persistent.h"
#include "third_party/blink/renderer/platform/testing/blink_fuzzer_test_support.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
#include "third_party/blink/renderer/platform/wtf/vector.h"
#include <string>
namespace blink {
DEFINE_TEXT_PROTO_FUZZER(
const wc_fuzzer::VideoDecoderApiInvocationSequence& proto) {
static BlinkFuzzerTestSupport test_support = BlinkFuzzerTestSupport();
static DummyPageHolder* page_holder = []() {
auto page_holder = std::make_unique<DummyPageHolder>();
page_holder->GetFrame().GetSettings()->SetScriptEnabled(true);
return page_holder.release();
}();
//
// NOTE: GC objects that need to survive iterations of the loop below
// must be Persistent<>!
//
// GC may be triggered by the RunLoop().RunUntilIdle() below, which will GC
// raw pointers on the stack. This is not required in production code because
// GC typically runs at the top of the stack, or is conservative enough to
// keep stack pointers alive.
//
// Scoping Persistent<> refs so GC can collect these at the end.
{
Persistent<ScriptState> script_state =
ToScriptStateForMainWorld(&page_holder->GetFrame());
ScriptState::Scope scope(script_state);
Persistent<FakeFunction> error_function =
FakeFunction::Create(script_state, "error");
Persistent<V8WebCodecsErrorCallback> error_callback =
V8WebCodecsErrorCallback::Create(error_function->Bind());
Persistent<FakeFunction> output_function =
FakeFunction::Create(script_state, "output");
Persistent<V8VideoFrameOutputCallback> output_callback =
V8VideoFrameOutputCallback::Create(output_function->Bind());
Persistent<VideoDecoderInit> video_decoder_init =
MakeGarbageCollected<VideoDecoderInit>();
video_decoder_init->setError(error_callback);
video_decoder_init->setOutput(output_callback);
Persistent<VideoDecoder> video_decoder = VideoDecoder::Create(
script_state, video_decoder_init, IGNORE_EXCEPTION_FOR_TESTING);
for (auto& invocation : proto.invocations()) {
switch (invocation.Api_case()) {
case wc_fuzzer::VideoDecoderApiInvocation::kConfigure:
video_decoder->configure(MakeDecoderConfig(invocation.configure()),
IGNORE_EXCEPTION_FOR_TESTING);
break;
case wc_fuzzer::VideoDecoderApiInvocation::kDecode:
video_decoder->decode(
MakeEncodedVideoChunk(invocation.decode().chunk()),
IGNORE_EXCEPTION_FOR_TESTING);
break;
case wc_fuzzer::VideoDecoderApiInvocation::kFlush: {
// TODO(https://crbug.com/1119253): Fuzz whether to await resolution
// of the flush promise.
video_decoder->flush(IGNORE_EXCEPTION_FOR_TESTING);
break;
}
case wc_fuzzer::VideoDecoderApiInvocation::kReset:
video_decoder->reset(IGNORE_EXCEPTION_FOR_TESTING);
break;
case wc_fuzzer::VideoDecoderApiInvocation::kClose:
video_decoder->close();
break;
case wc_fuzzer::VideoDecoderApiInvocation::API_NOT_SET:
break;
}
// Give other tasks a chance to run (e.g. calling our output callback).
base::RunLoop().RunUntilIdle();
}
}
// Request a V8 GC. Oilpan will be invoked by the GC epilogue.
//
// Multiple GCs may be required to ensure everything is collected (due to
// a chain of persistent handles), so some objects may not be collected until
// a subsequent iteration. This is slow enough as is, so we compromise on one
// major GC, as opposed to the 5 used in V8GCController for unit tests.
V8PerIsolateData::MainThreadIsolate()->RequestGarbageCollectionForTesting(
v8::Isolate::kFullGarbageCollection);
}
} // namespace blink
......@@ -946,6 +946,16 @@ _CONFIG = [
'libyuv::.+',
]
},
{
'paths': [
'third_party/blink/renderer/modules/webcodecs/video_decoder_fuzzer.cc',
'third_party/blink/renderer/modules/webcodecs/fuzzer_utils.cc',
'third_party/blink/renderer/modules/webcodecs/fuzzer_utils.h',
],
'allowed': [
'wc_fuzzer::.+',
]
},
{
'paths': [
'third_party/blink/renderer/modules/webgpu/',
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment