Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uhikl-003CXM-Qm for pgsql-hackers@arkaria.postgresql.org; Fri, 01 Aug 2025 05:56:28 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1uhikk-005gbI-MT for pgsql-hackers@arkaria.postgresql.org; Fri, 01 Aug 2025 05:56:26 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uhikj-005gZn-SW for pgsql-hackers@lists.postgresql.org; Fri, 01 Aug 2025 05:56:26 +0000 Received: from mail-vs1-xe2e.google.com ([2607:f8b0:4864:20::e2e]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uhike-0008gR-2j for pgsql-hackers@lists.postgresql.org; Fri, 01 Aug 2025 05:56:24 +0000 Received: by mail-vs1-xe2e.google.com with SMTP id ada2fe7eead31-4fbed2d9e61so629340137.3 for ; Thu, 31 Jul 2025 22:56:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754027781; x=1754632581; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=D/6mCf0wypzakLn5VDBWmv2EM/z0tstADNezkK9mTyc=; b=CZsm3UkUgr7kKgU/PIFS3ihq9FtwrxMZYs+M8pUr0Bzg+uTmjtFnoI2rp9k8FUF15r YZLyf/5MlYfrQjg8gUzY3br55p0VEEPK9nrb+M1mWYQmzBqyHyN2eZIoqHf2pdNPyOE2 q6vRTFHqwOU79TQzQnLTK9LqRjXDpD04FrDPUAP397/7cmHolVBfwSWnLyiFK+sRaPRP ifw9ZtHVd4Gd8LJvT0wMm/p/cCHPWalBrtryLUvfMQWJuTi+7deYIzwP0Udv9xn6WIXK 2acnQdLr/D6mlu1fsFdXkf8hXCc2JA1onL2R+m8xru7H5/SA/RyYYA8m6BTrVLUbRwNm N0Iw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754027781; x=1754632581; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=D/6mCf0wypzakLn5VDBWmv2EM/z0tstADNezkK9mTyc=; b=uszC5I4oakMQMs1JuoaUzcm56enyV+Pi6n23ykO5zYsOGBSSMSyqVEG8hpCP1hKC1u 64ijDoc3xVljMj1asbP8ju0th0eBdDvXij00G8jyNL7WjyMbQtEpSvSDo901OP9AVG6K zOXj0ET/++3lCmilGqRGVgqYATOvxA67Qpzici0FqzUz+Z5UEs5v72mpxhjitOPIYdPz oAUV/aTb/glntC0y60OIxaSbCWlusNYrV6XKMB8NmZ8Bn5j22oEkYDn1YOizeBVtSkPs rPF0AbvsoSQJVPJKEM/w7GhJBRLNnCYI0oYKkLn6p1auZ2zcdTgCLaJ+AY5iXmOgt/j5 pb8Q== X-Forwarded-Encrypted: i=1; AJvYcCVZ94ZfHEcZgpAdFHI+j4wNAKFKueRUxLyAyTA/fohJOiFNe2+Vd+z7hnPZW7qiPNuTJgK1fz075SEzfU4q@lists.postgresql.org X-Gm-Message-State: AOJu0YxGUfggeOBPcpWa5YXOrXh5qAjSlcHUo9d1YhRSJopv2BAKWcco Gn4uKMTQUtnwMMIAgokbuRBLO/jXkfZh/6NKEDIXJjBVs35YFHJFWmvkOKieB5jKqcQeBHG1+Yt /zauuHrPbVa6r+qhXMjqn1iP4iZGdepI= X-Gm-Gg: ASbGncsFtLpVIxF9YdXfp+HO7sRCcSvBBSEC8tJujiyYFbvVOv+FV1aY9VSzB9C4Bpx J429esHsm9paTXTVSYYGGtc/N7DEDPilTDoddObrEoob+9evocWWPCX+0nPU93YKxwZpYkHs95I +1u/dCEYmSl7ayMPtuR4HemREXY+ZSQY9uNNFXRMl25bMTNI/H+x8s6QvR5QBHl/XSB/V9evv7j otc39ONbonVI2+kAlEl6inzNiOQXMho6PMdEy1kLz3JCNHFIQ== X-Google-Smtp-Source: AGHT+IEazHqZwrZ+Cm70kzDUd/juUHjbJp0JMW1LEYYCUsIZuElYdRH188MPte6NswvecjPmci4YDbfQ5DkePi9ibHs= X-Received: by 2002:a05:6102:8011:b0:4fb:142:f4c0 with SMTP id ada2fe7eead31-4fbe7adacd2mr7641618137.0.1754027780743; Thu, 31 Jul 2025 22:56:20 -0700 (PDT) MIME-Version: 1.0 References: <04afcd1f-ed7d-4c0a-add1-50e3719ccbf9@postgresfriends.org> <762ae707-7fdc-43d8-a77a-3a10d12ce21d@postgresfriends.org> In-Reply-To: From: jian he Date: Fri, 1 Aug 2025 13:55:44 +0800 X-Gm-Features: Ac12FXwYah9gAdRtK74zs28LQv-R289YEhB4s2etQXhi7PvPb0GUWRsiYWov5FY Message-ID: Subject: Re: CAST(... ON DEFAULT) - WIP build on top of Error-Safe User Functions To: Corey Huinker Cc: Vik Fearing , Isaac Morland , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000cc4699063b476a14" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000cc4699063b476a14 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Jul 31, 2025 at 3:15=E2=80=AFAM Corey Huinker wrote: > > > Question about this: > > +/* > + * Push steps to evaluate a SafeTypeCastExpr and its various subsidiary = expressions. > + * We already handle CoerceViaIO, CoerceToDomain, and ArrayCoerceExpr er= ror > + * softly. However, FuncExpr (e.g., int84) cannot be made error-safe. > + * In such cases, we wrap the source expression and target type informat= ion into > + * a CoerceViaIO node instead. > + */ > > I'm not sure we _can_ just fall back to the CoerceViaIO if there is a def= ined cast from TypeA -> TypeB. I seem to recall there was some reason we co= uldn't do that, possibly to do with how it handled rounding, but I have no = clear memory of it. > indeed. select ('11.1'::numeric::int); return 11, but '11.1' string can not coerce to int 11. So in this case, we can not use CoerceViaIO. so we need to handle numeric source types with fractional points with special care. currently, this applies only to numeric, float4, and float8. (hope this is all the corner case we need to catch...) select castsource::regtype, casttarget::regtype, castfunc::regproc, castcon= text from pg_cast pc where castsource::regtype =3D ANY('{numeric, float4, float8}'::regtype[]) and castmethod =3D 'f'; only return 17 rows. one row is cast numreic to money, function numeric_cas= h. numeric_cash seems more trickly to be error safe, because it will call numeric_mul. so I made these 16 function errors safe. see v3-0001-make-some-numeric-cast-function-error-safe.patch --000000000000cc4699063b476a14 Content-Type: text/x-patch; charset="US-ASCII"; name="v3-0002-make-ArrayCoerceExpr-error-safe.patch" Content-Disposition: attachment; filename="v3-0002-make-ArrayCoerceExpr-error-safe.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mdset9ac1 RnJvbSAwZmEyMzYxYjdkNzY5MmE5YzAzMmQ4YThhN2YyYjA0YWI0MzAyODQ5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMTggSnVsIDIwMjUgMTM6MDA6MTkgKzA4MDAKU3ViamVjdDogW1BBVENIIHYz IDIvM10gbWFrZSBBcnJheUNvZXJjZUV4cHIgZXJyb3Igc2FmZQoKc2ltaWxhciB0byBodHRwczov L2dpdC5wb3N0Z3Jlc3FsLm9yZy9jZ2l0L3Bvc3RncmVzcWwuZ2l0L2NvbW1pdC8/aWQ9YWFhZjk0 NDllYzZiZTYyY2IwZDMwZWQzNTg4ZGMzODRmNTYyNzRiZgotLS0KIHNyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNFeHByLmMgICAgICAgfCAzICsrKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4 cHJJbnRlcnAuYyB8IDQgKysrKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FycmF5ZnVuY3MuYyAg ICB8IDcgKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCspCgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNFeHByLmMKaW5kZXggZjE1Njk4NzliNTIuLjFmM2Y4OTk4NzRmIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwci5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNFeHByLmMKQEAgLTE3MDIsNiArMTcwMiw5IEBAIEV4ZWNJbml0RXhwclJlYyhFeHBy ICpub2RlLCBFeHByU3RhdGUgKnN0YXRlLAogCQkJCWVsZW1zdGF0ZS0+aW5uZXJtb3N0X2Nhc2V2 YWwgPSAoRGF0dW0gKikgcGFsbG9jKHNpemVvZihEYXR1bSkpOwogCQkJCWVsZW1zdGF0ZS0+aW5u ZXJtb3N0X2Nhc2VudWxsID0gKGJvb2wgKikgcGFsbG9jKHNpemVvZihib29sKSk7CiAKKwkJCQlp ZiAoc3RhdGUtPmVzY29udGV4dCAhPSBOVUxMKQorCQkJCQllbGVtc3RhdGUtPmVzY29udGV4dCA9 IHN0YXRlLT5lc2NvbnRleHQ7CisKIAkJCQlFeGVjSW5pdEV4cHJSZWMoYWNvZXJjZS0+ZWxlbWV4 cHIsIGVsZW1zdGF0ZSwKIAkJCQkJCQkJJmVsZW1zdGF0ZS0+cmVzdmFsdWUsICZlbGVtc3RhdGUt PnJlc251bGwpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwcklu dGVycC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYwppbmRleCAxYTM3 NzM3ZDRhMi4uODFlNDZjZmY3MjUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNFeHBySW50ZXJwLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAu YwpAQCAtMzY0NCw2ICszNjQ0LDEwIEBAIEV4ZWNFdmFsQXJyYXlDb2VyY2UoRXhwclN0YXRlICpz dGF0ZSwgRXhwckV2YWxTdGVwICpvcCwgRXhwckNvbnRleHQgKmVjb250ZXh0KQogCQkJCQkJCSAg ZWNvbnRleHQsCiAJCQkJCQkJICBvcC0+ZC5hcnJheWNvZXJjZS5yZXN1bHRlbGVtdHlwZSwKIAkJ CQkJCQkgIG9wLT5kLmFycmF5Y29lcmNlLmFtc3RhdGUpOworCisJaWYgKFNPRlRfRVJST1JfT0ND VVJSRUQob3AtPmQuYXJyYXljb2VyY2UuZWxlbWV4cHJzdGF0ZS0+ZXNjb250ZXh0KQorCQkmJiAo Km9wLT5yZXN2YWx1ZSA9IChEYXR1bSkgMCkpCisJCSpvcC0+cmVzbnVsbCA9IHRydWU7CiB9CiAK IC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvYXJyYXlmdW5jcy5jIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2FycmF5ZnVuY3MuYwppbmRleCBjOGY1M2M2ZmJlNy4uYjVmOThi ZjIyZjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9hcnJheWZ1bmNzLmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FycmF5ZnVuY3MuYwpAQCAtMzI4OCw2ICszMjg4LDEz IEBAIGFycmF5X21hcChEYXR1bSBhcnJheWQsCiAJCS8qIEFwcGx5IHRoZSBnaXZlbiBleHByZXNz aW9uIHRvIHNvdXJjZSBlbGVtZW50ICovCiAJCXZhbHVlc1tpXSA9IEV4ZWNFdmFsRXhwcihleHBy c3RhdGUsIGVjb250ZXh0LCAmbnVsbHNbaV0pOwogCisJCWlmIChTT0ZUX0VSUk9SX09DQ1VSUkVE KGV4cHJzdGF0ZS0+ZXNjb250ZXh0KSkKKwkJeworCQkJcGZyZWUodmFsdWVzKTsKKwkJCXBmcmVl KG51bGxzKTsKKwkJCXJldHVybiAoRGF0dW0pIDA7CisJCX0KKwogCQlpZiAobnVsbHNbaV0pCiAJ CQloYXNudWxscyA9IHRydWU7CiAJCWVsc2UKLS0gCjIuMzQuMQoK --000000000000cc4699063b476a14 Content-Type: text/x-patch; charset="US-ASCII"; name="v3-0001-make-some-numeric-cast-function-error-safe.patch" Content-Disposition: attachment; filename="v3-0001-make-some-numeric-cast-function-error-safe.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mdset9ai2 RnJvbSA3OThkYjVmOWEwNWE1Mzk4YzM2NjQxYWYwZTMzNTA1MzExOTM5MzMwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMSBBdWcgMjAyNSAxMzoyMjo1OSArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjMg MS8zXSBtYWtlIHNvbWUgbnVtZXJpYyBjYXN0IGZ1bmN0aW9uIGVycm9yIHNhZmUKClRoZSBmb2xs b3dpbmcgZnVuY3Rpb24gYXJlIGNoYW5nZWQgdG8gbWFrZSBpdCBlcnJvciBzYWZlLgpudW1lcmlj X2ludDIKbnVtZXJpY19pbnQ0Cm51bWVyaWNfaW50OApudW1lcmljX2Zsb2F0NApudW1lcmljX2Zs b2F0OApkdG9pOApkdG9pNApkdG9pMgpmdG9pOApmdG9pNApmdG9pMgpmdG9kCmR0b2YKZmxvYXQ0 X251bWVyaWMKZmxvYXQ4X251bWVyaWMKbnVtZXJpYyAob2lkIDE3MDMpCgpUaGlzIGlzIG5lZWQg Zm9yIGV2YXVsYXRpb24gQ0FTVCguLi4gREVGQVVMVC4uLiBPTiBDT05WRVJTSU9OIEVSUk9SKS4K ZGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQURrTE09ZnYxSmZZNFVmYS1qY3d3TmJq UWl4TlZpc2tROGpadTNUel9wNjU2aV80aFFAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2Vu ZC91dGlscy9hZHQvZmxvYXQuYyAgIHwgMTYgKysrKystLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2Fk dC9pbnQ4LmMgICAgfCAgNCArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L251bWVyaWMuYyB8IDY3 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLQogMyBmaWxlcyBjaGFuZ2VkLCA2NyBp bnNlcnRpb25zKCspLCAyMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91 dGlscy9hZHQvZmxvYXQuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mbG9hdC5jCmluZGV4IDdi OTdkMmJlNmNhLi42NDYxZTljOTRiMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L2Zsb2F0LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zsb2F0LmMKQEAgLTExOTksOSAr MTE5OSwxMyBAQCBkdG9mKFBHX0ZVTkNUSU9OX0FSR1MpCiAKIAlyZXN1bHQgPSAoZmxvYXQ0KSBu dW07CiAJaWYgKHVubGlrZWx5KGlzaW5mKHJlc3VsdCkpICYmICFpc2luZihudW0pKQotCQlmbG9h dF9vdmVyZmxvd19lcnJvcigpOworCQllcmV0dXJuKGZjaW5mby0+Y29udGV4dCwgKERhdHVtKSAw LAorCQkJCWVycmNvZGUoRVJSQ09ERV9OVU1FUklDX1ZBTFVFX09VVF9PRl9SQU5HRSksCisJCQkJ ZXJybXNnKCJ2YWx1ZSBvdXQgb2YgcmFuZ2U6IG92ZXJmbG93IikpOwogCWlmICh1bmxpa2VseShy ZXN1bHQgPT0gMC4wZikgJiYgbnVtICE9IDAuMCkKLQkJZmxvYXRfdW5kZXJmbG93X2Vycm9yKCk7 CisJCWVyZXR1cm4oZmNpbmZvLT5jb250ZXh0LCAoRGF0dW0pIDAsCisJCQkJZXJyY29kZShFUlJD T0RFX05VTUVSSUNfVkFMVUVfT1VUX09GX1JBTkdFKSwKKwkJCQllcnJtc2coInZhbHVlIG91dCBv ZiByYW5nZTogdW5kZXJmbG93IikpOwogCiAJUEdfUkVUVVJOX0ZMT0FUNChyZXN1bHQpOwogfQpA QCAtMTIyNCw3ICsxMjI4LDcgQEAgZHRvaTQoUEdfRlVOQ1RJT05fQVJHUykKIAogCS8qIFJhbmdl IGNoZWNrICovCiAJaWYgKHVubGlrZWx5KGlzbmFuKG51bSkgfHwgIUZMT0FUOF9GSVRTX0lOX0lO VDMyKG51bSkpKQotCQllcmVwb3J0KEVSUk9SLAorCQllcmV0dXJuKGZjaW5mby0+Y29udGV4dCwg KERhdHVtKSAwLAogCQkJCShlcnJjb2RlKEVSUkNPREVfTlVNRVJJQ19WQUxVRV9PVVRfT0ZfUkFO R0UpLAogCQkJCSBlcnJtc2coImludGVnZXIgb3V0IG9mIHJhbmdlIikpKTsKIApAQCAtMTI0OSw3 ICsxMjUzLDcgQEAgZHRvaTIoUEdfRlVOQ1RJT05fQVJHUykKIAogCS8qIFJhbmdlIGNoZWNrICov CiAJaWYgKHVubGlrZWx5KGlzbmFuKG51bSkgfHwgIUZMT0FUOF9GSVRTX0lOX0lOVDE2KG51bSkp KQotCQllcmVwb3J0KEVSUk9SLAorCQllcmV0dXJuKGZjaW5mby0+Y29udGV4dCwgKERhdHVtKSAw LAogCQkJCShlcnJjb2RlKEVSUkNPREVfTlVNRVJJQ19WQUxVRV9PVVRfT0ZfUkFOR0UpLAogCQkJ CSBlcnJtc2coInNtYWxsaW50IG91dCBvZiByYW5nZSIpKSk7CiAKQEAgLTEyOTgsNyArMTMwMiw3 IEBAIGZ0b2k0KFBHX0ZVTkNUSU9OX0FSR1MpCiAKIAkvKiBSYW5nZSBjaGVjayAqLwogCWlmICh1 bmxpa2VseShpc25hbihudW0pIHx8ICFGTE9BVDRfRklUU19JTl9JTlQzMihudW0pKSkKLQkJZXJl cG9ydChFUlJPUiwKKwkJZXJldHVybihmY2luZm8tPmNvbnRleHQsIChEYXR1bSkgMCwKIAkJCQko ZXJyY29kZShFUlJDT0RFX05VTUVSSUNfVkFMVUVfT1VUX09GX1JBTkdFKSwKIAkJCQkgZXJybXNn KCJpbnRlZ2VyIG91dCBvZiByYW5nZSIpKSk7CiAKQEAgLTEzMjMsNyArMTMyNyw3IEBAIGZ0b2ky KFBHX0ZVTkNUSU9OX0FSR1MpCiAKIAkvKiBSYW5nZSBjaGVjayAqLwogCWlmICh1bmxpa2VseShp c25hbihudW0pIHx8ICFGTE9BVDRfRklUU19JTl9JTlQxNihudW0pKSkKLQkJZXJlcG9ydChFUlJP UiwKKwkJZXJldHVybihmY2luZm8tPmNvbnRleHQsIChEYXR1bSkgMCwKIAkJCQkoZXJyY29kZShF UlJDT0RFX05VTUVSSUNfVkFMVUVfT1VUX09GX1JBTkdFKSwKIAkJCQkgZXJybXNnKCJzbWFsbGlu dCBvdXQgb2YgcmFuZ2UiKSkpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQv aW50OC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2ludDguYwppbmRleCA5ZGQ1ODg5ZjM0Yy4u NGI5YTc2MjA2NzEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9pbnQ4LmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2ludDguYwpAQCAtMTMwNyw3ICsxMzA3LDcgQEAgZHRv aTgoUEdfRlVOQ1RJT05fQVJHUykKIAogCS8qIFJhbmdlIGNoZWNrICovCiAJaWYgKHVubGlrZWx5 KGlzbmFuKG51bSkgfHwgIUZMT0FUOF9GSVRTX0lOX0lOVDY0KG51bSkpKQotCQllcmVwb3J0KEVS Uk9SLAorCQllcmV0dXJuKGZjaW5mby0+Y29udGV4dCwgKERhdHVtKSAwLAogCQkJCShlcnJjb2Rl KEVSUkNPREVfTlVNRVJJQ19WQUxVRV9PVVRfT0ZfUkFOR0UpLAogCQkJCSBlcnJtc2coImJpZ2lu dCBvdXQgb2YgcmFuZ2UiKSkpOwogCkBAIC0xMzQyLDcgKzEzNDIsNyBAQCBmdG9pOChQR19GVU5D VElPTl9BUkdTKQogCiAJLyogUmFuZ2UgY2hlY2sgKi8KIAlpZiAodW5saWtlbHkoaXNuYW4obnVt KSB8fCAhRkxPQVQ0X0ZJVFNfSU5fSU5UNjQobnVtKSkpCi0JCWVyZXBvcnQoRVJST1IsCisJCWVy ZXR1cm4oZmNpbmZvLT5jb250ZXh0LCAoRGF0dW0pIDAsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9O VU1FUklDX1ZBTFVFX09VVF9PRl9SQU5HRSksCiAJCQkJIGVycm1zZygiYmlnaW50IG91dCBvZiBy YW5nZSIpKSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9udW1lcmljLmMg Yi9zcmMvYmFja2VuZC91dGlscy9hZHQvbnVtZXJpYy5jCmluZGV4IGM5MjMzNTY1ZDU3Li5jZjQ5 ODYyN2E5YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L251bWVyaWMuYworKysg Yi9zcmMvYmFja2VuZC91dGlscy9hZHQvbnVtZXJpYy5jCkBAIC0xMjYxLDcgKzEyNjEsOCBAQCBu dW1lcmljCQkoUEdfRlVOQ1RJT05fQVJHUykKIAkgKi8KIAlpZiAoTlVNRVJJQ19JU19TUEVDSUFM KG51bSkpCiAJewotCQkodm9pZCkgYXBwbHlfdHlwbW9kX3NwZWNpYWwobnVtLCB0eXBtb2QsIE5V TEwpOworCQlpZiAoIWFwcGx5X3R5cG1vZF9zcGVjaWFsKG51bSwgdHlwbW9kLCBmY2luZm8tPmNv bnRleHQpKQorCQkJUEdfUkVUVVJOX05VTEwoKTsKIAkJUEdfUkVUVVJOX05VTUVSSUMoZHVwbGlj YXRlX251bWVyaWMobnVtKSk7CiAJfQogCkBAIC00NTY0LDcgKzQ1NjUsMjIgQEAgbnVtZXJpY19p bnQ0KFBHX0ZVTkNUSU9OX0FSR1MpCiB7CiAJTnVtZXJpYwkJbnVtID0gUEdfR0VUQVJHX05VTUVS SUMoMCk7CiAKLQlQR19SRVRVUk5fSU5UMzIobnVtZXJpY19pbnQ0X29wdF9lcnJvcihudW0sIE5V TEwpKTsKKwlpZiAobGlrZWx5KGZjaW5mby0+Y29udGV4dCA9PSBOVUxMKSkKKwkJUEdfUkVUVVJO X0lOVDMyKG51bWVyaWNfaW50NF9vcHRfZXJyb3IobnVtLCBOVUxMKSk7CisJZWxzZQorCXsKKwkJ Ym9vbAloYXNfZXJyb3I7CisJCWludDMyCXJlc3VsdDsKKwkJTm9kZQkqZXNjb250ZXh0ID0gZmNp bmZvLT5jb250ZXh0OworCisJCXJlc3VsdCA9IG51bWVyaWNfaW50NF9vcHRfZXJyb3IobnVtLCAm aGFzX2Vycm9yKTsKKwkJaWYgKGhhc19lcnJvcikKKwkJCWVyZXR1cm4oZXNjb250ZXh0LCAoRGF0 dW0pIDAsCisJCQkJCWVycmNvZGUoRVJSQ09ERV9OVU1FUklDX1ZBTFVFX09VVF9PRl9SQU5HRSks CisJCQkJCWVycm1zZygiaW50ZWdlciBvdXQgb2YgcmFuZ2UiKSk7CisKKwkJUEdfUkVUVVJOX0lO VDMyKHJlc3VsdCk7CisJfQogfQogCiAvKgpAQCAtNDY1Miw3ICs0NjY4LDIyIEBAIG51bWVyaWNf aW50OChQR19GVU5DVElPTl9BUkdTKQogewogCU51bWVyaWMJCW51bSA9IFBHX0dFVEFSR19OVU1F UklDKDApOwogCi0JUEdfUkVUVVJOX0lOVDY0KG51bWVyaWNfaW50OF9vcHRfZXJyb3IobnVtLCBO VUxMKSk7CisJaWYgKGxpa2VseShmY2luZm8tPmNvbnRleHQgPT0gTlVMTCkpCisJCVBHX1JFVFVS Tl9JTlQ2NChudW1lcmljX2ludDhfb3B0X2Vycm9yKG51bSwgTlVMTCkpOworCWVsc2UKKwl7CisJ CWJvb2wJaGFzX2Vycm9yOworCQlpbnQ2NAlyZXN1bHQ7CisJCU5vZGUJKmVzY29udGV4dCA9IGZj aW5mby0+Y29udGV4dDsKKworCQlyZXN1bHQgPSBudW1lcmljX2ludDhfb3B0X2Vycm9yKG51bSwg Jmhhc19lcnJvcik7CisJCWlmIChoYXNfZXJyb3IpCisJCQllcmV0dXJuKGVzY29udGV4dCwgKERh dHVtKSAwLAorCQkJCQllcnJjb2RlKEVSUkNPREVfTlVNRVJJQ19WQUxVRV9PVVRfT0ZfUkFOR0Up LAorCQkJCQllcnJtc2coImJpZ2ludCBvdXQgb2YgcmFuZ2UiKSk7CisKKwkJUEdfUkVUVVJOX0lO VDY0KHJlc3VsdCk7CisJfQogfQogCiAKQEAgLTQ2NjksNiArNDcwMCw3IEBAIERhdHVtCiBudW1l cmljX2ludDIoUEdfRlVOQ1RJT05fQVJHUykKIHsKIAlOdW1lcmljCQludW0gPSBQR19HRVRBUkdf TlVNRVJJQygwKTsKKwlOb2RlCSAgICplc2NvbnRleHQgPSBmY2luZm8tPmNvbnRleHQ7CiAJTnVt ZXJpY1Zhcgl4OwogCWludDY0CQl2YWw7CiAJaW50MTYJCXJlc3VsdDsKQEAgLTQ2NzYsMTEgKzQ3 MDgsMTEgQEAgbnVtZXJpY19pbnQyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJaWYgKE5VTUVSSUNfSVNf U1BFQ0lBTChudW0pKQogCXsKIAkJaWYgKE5VTUVSSUNfSVNfTkFOKG51bSkpCi0JCQllcmVwb3J0 KEVSUk9SLAorCQkJZXJldHVybihlc2NvbnRleHQsIChEYXR1bSkgMCwKIAkJCQkJKGVycmNvZGUo RVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCQkgZXJybXNnKCJjYW5ub3QgY29u dmVydCBOYU4gdG8gJXMiLCAic21hbGxpbnQiKSkpOwogCQllbHNlCi0JCQllcmVwb3J0KEVSUk9S LAorCQkJZXJldHVybihlc2NvbnRleHQsIChEYXR1bSkgMCwKIAkJCQkJKGVycmNvZGUoRVJSQ09E RV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCQkgZXJybXNnKCJjYW5ub3QgY29udmVydCBp bmZpbml0eSB0byAlcyIsICJzbWFsbGludCIpKSk7CiAJfQpAQCAtNDY4OSwxMiArNDcyMSwxMiBA QCBudW1lcmljX2ludDIoUEdfRlVOQ1RJT05fQVJHUykKIAlpbml0X3Zhcl9mcm9tX251bShudW0s ICZ4KTsKIAogCWlmICghbnVtZXJpY3Zhcl90b19pbnQ2NCgmeCwgJnZhbCkpCi0JCWVyZXBvcnQo RVJST1IsCisJCWVyZXR1cm4oZXNjb250ZXh0LCAoRGF0dW0pIDAsCiAJCQkJKGVycmNvZGUoRVJS Q09ERV9OVU1FUklDX1ZBTFVFX09VVF9PRl9SQU5HRSksCiAJCQkJIGVycm1zZygic21hbGxpbnQg b3V0IG9mIHJhbmdlIikpKTsKIAogCWlmICh1bmxpa2VseSh2YWwgPCBQR19JTlQxNl9NSU4pIHx8 IHVubGlrZWx5KHZhbCA+IFBHX0lOVDE2X01BWCkpCi0JCWVyZXBvcnQoRVJST1IsCisJCWVyZXR1 cm4oZXNjb250ZXh0LCAoRGF0dW0pIDAsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9OVU1FUklDX1ZB TFVFX09VVF9PRl9SQU5HRSksCiAJCQkJIGVycm1zZygic21hbGxpbnQgb3V0IG9mIHJhbmdlIikp KTsKIApAQCAtNDc1OSwxMCArNDc5MSwxNCBAQCBudW1lcmljX2Zsb2F0OChQR19GVU5DVElPTl9B UkdTKQogCiAJdG1wID0gRGF0dW1HZXRDU3RyaW5nKERpcmVjdEZ1bmN0aW9uQ2FsbDEobnVtZXJp Y19vdXQsCiAJCQkJCQkJCQkJCSAgTnVtZXJpY0dldERhdHVtKG51bSkpKTsKLQotCXJlc3VsdCA9 IERpcmVjdEZ1bmN0aW9uQ2FsbDEoZmxvYXQ4aW4sIENTdHJpbmdHZXREYXR1bSh0bXApKTsKLQot CXBmcmVlKHRtcCk7CisJaWYgKCFEaXJlY3RJbnB1dEZ1bmN0aW9uQ2FsbFNhZmUoZmxvYXQ4aW4s IHRtcCwKKwkJCQkJCQkJCSBJbnZhbGlkT2lkLCAtMSwKKwkJCQkJCQkJCSAoTm9kZSAqKSBmY2lu Zm8tPmNvbnRleHQsCisJCQkJCQkJCQkgJnJlc3VsdCkpCisJeworCQlwZnJlZSh0bXApOworCQlQ R19SRVRVUk5fTlVMTCgpOworCX0KIAogCVBHX1JFVFVSTl9EQVRVTShyZXN1bHQpOwogfQpAQCAt NDg1NCw3ICs0ODkwLDE0IEBAIG51bWVyaWNfZmxvYXQ0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJdG1w ID0gRGF0dW1HZXRDU3RyaW5nKERpcmVjdEZ1bmN0aW9uQ2FsbDEobnVtZXJpY19vdXQsCiAJCQkJ CQkJCQkJCSAgTnVtZXJpY0dldERhdHVtKG51bSkpKTsKIAotCXJlc3VsdCA9IERpcmVjdEZ1bmN0 aW9uQ2FsbDEoZmxvYXQ0aW4sIENTdHJpbmdHZXREYXR1bSh0bXApKTsKKwlpZiAoIURpcmVjdElu cHV0RnVuY3Rpb25DYWxsU2FmZShmbG9hdDRpbiwgdG1wLAorCQkJCQkJCQkJIEludmFsaWRPaWQs IC0xLAorCQkJCQkJCQkJIChOb2RlICopIGZjaW5mby0+Y29udGV4dCwKKwkJCQkJCQkJCSAmcmVz dWx0KSkKKwl7CisJCXBmcmVlKHRtcCk7CisJCVBHX1JFVFVSTl9OVUxMKCk7CisJfQogCiAJcGZy ZWUodG1wKTsKIAotLSAKMi4zNC4xCgo= --000000000000cc4699063b476a14 Content-Type: text/x-patch; charset="US-ASCII"; name="v3-0003-CAST-expr-AS-newtype-DEFAULT-ON-ERROR.patch" Content-Disposition: attachment; filename="v3-0003-CAST-expr-AS-newtype-DEFAULT-ON-ERROR.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mdset99f0 RnJvbSA2NzQxZTFjYTI0NzNmMTBkOWQwZjJiYjNlYzgxZWVkNjg4NmYyNzg3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMSBBdWcgMjAyNSAxMzo0Mjo1NSArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjMg My8zXSBDQVNUKGV4cHIgQVMgbmV3dHlwZSBERUZBVUxUIE9OIEVSUk9SKQoKV2hlbiBjYXN0aW5n IGRhdGEgdHlwZXMsIHdlIGdlbmVyYWxseSB1c2VzIG9uZSBvZiB0aHJlZSBub2RlIHR5cGVzOiBG dW5jRXhwciwKQ29lcmNlVmlhSU8sIG9yIEFycmF5Q29lcmNlRXhwciByZXByZXNlbnQgdGhlIHR5 cGUgY29lcmNpb24uCgoqIENvZXJjZVZpYUlPIGlzIGFscmVhZHkgZXJyb3Itc2FmZSwgc2VlWzBd CiogQXJyYXlDb2VyY2VFeHByIGlzIGFsc28gZXJyb3Igc2FmZSwgc2VlIHByZXZpb3VzIGNvbW1p dC4KKiBIb3dldmVyLCBub3QgYWxsICoqRnVuY0V4cHIqKiBub2RlcyBpcyBlcnJvci1zYWZlLiBG b3IgZXhhbXBsZSwgYSBmdW5jdGlvbgpsaWtlIGludDg0IGlzIG5vdCBlcnJvciBzYWZlLiBJbiB0 aGVzZSBzaXR1YXRpb25zLCB3ZSBjcmVhdGUgYSBDb2VyY2VWaWFJTyBub2RlCmFuZCB1c2UgdGhl IG9yaWdpbmFsIGV4cHJlc3Npb24gYXMgaXRzIGFyZ3VtZW50LCBhbGxvd2luZyB1cyB0byBzYWZl bHkgaGFuZGxlCnRoZSBjYXN0LgoKTm93IHRoYXQgdGhlIHR5cGUgY29lcmNpb24gbm9kZSBpcyBl cnJvci1zYWZlLCB3ZSBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgd2hlbgphIGNvZXJjaW9uIGZh aWxzLCBpdCBmYWxscyBiYWNrIHRvIGV2YWx1YXRpbmcgdGhlIGRlZmF1bHQgbm9kZS4KClswXTog aHR0cHM6Ly9naXQucG9zdGdyZXNxbC5vcmcvY2dpdC9wb3N0Z3Jlc3FsLmdpdC9jb21taXQvP2lk PWFhYWY5NDQ5ZWM2YmU2MmNiMGQzMGVkMzU4OGRjMzg0ZjU2Mjc0YmYKZGlzY3Vzc2lvbjogaHR0 cHM6Ly9wb3N0Z3IuZXMvbS9DQURrTE09ZnYxSmZZNFVmYS1qY3d3TmJqUWl4TlZpc2tROGpadTNU el9wNjU2aV80aFFAbWFpbC5nbWFpbC5jb20KCmRlbW86ClNFTEVDVCBDQVNUKCcxJyBBUyBkYXRl ICBERUZBVUxUICcyMDExLTAxLTAxJyBPTiBFUlJPUiksCiAgICAgICBDQVNUKCd7MjM0LGRlZiw1 Njd9Jzo6dGV4dFtdIEFTIGludGVnZXJbXSBERUZBVUxUICd7LTEwMTF9JyBPTiBFUlJPUik7Cgog ICAgZGF0ZSAgICB8ICBpbnQ0Ci0tLS0tLS0tLS0tLSstLS0tLS0tLS0KIDIwMTEtMDEtMDEgfCB7 LTEwMTF9Ci0tLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYyAgICAgICB8IDExNyAr KysrKysrKystCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jIHwgIDMwICsr Kwogc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMgICAgICAgICB8ICA1NyArKysrKwogc3Jj L2JhY2tlbmQvbm9kZXMvcXVlcnlqdW1ibGVmdW5jcy5jICB8ICAxNCArKwogc3JjL2JhY2tlbmQv b3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jICB8ICAxOSArKwogc3JjL2JhY2tlbmQvcGFyc2VyL2dy YW0ueSAgICAgICAgICAgICB8ICAzMSArKy0KIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHBy LmMgICAgICAgfCAzMTYgKysrKysrKysrKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL3Bh cnNlci9wYXJzZV90YXJnZXQuYyAgICAgfCAgMTQgKysKIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJz ZV90eXBlLmMgICAgICAgfCAgMTMgKysKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9hcnJheWZ1bmNz LmMgICAgfCAgIDYgKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jICAgICB8ICAx NSArKwogc3JjL2JhY2tlbmQvdXRpbHMvZm1nci9mbWdyLmMgICAgICAgICB8ICAxMyArKwogc3Jj L2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaCAgICAgICB8ICAgOCArCiBzcmMvaW5jbHVkZS9m bWdyLmggICAgICAgICAgICAgICAgICAgIHwgICAzICsKIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNu b2Rlcy5oICAgICAgICAgfCAgMzAgKysrCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgg ICAgICAgIHwgICA2ICsKIHNyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oICAgICAgICAgfCAg MzUgKysrCiBzcmMvaW5jbHVkZS9wYXJzZXIvcGFyc2VfdHlwZS5oICAgICAgIHwgICAyICsKIHNy Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY2FzdC5vdXQgICAgfCAyMzAgKysrKysrKysrKysrKysr KysrKwogc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSAgICB8ICAgMiArLQogc3Jj L3Rlc3QvcmVncmVzcy9zcWwvY2FzdC5zcWwgICAgICAgICB8IDEwOSArKysrKysrKysKIHNyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgfCAgIDMgKwogMjIgZmlsZXMgY2hhbmdl ZCwgMTA2MyBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2Nhc3Qub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL3Rlc3QvcmVncmVzcy9zcWwvY2FzdC5zcWwKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjRXhwci5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYwppbmRl eCAxZjNmODk5ODc0Zi4uMDNjYWZhZDUyNWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNFeHByLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYwpAQCAt OTksNiArOTksOSBAQCBzdGF0aWMgdm9pZCBFeGVjQnVpbGRBZ2dUcmFuc0NhbGwoRXhwclN0YXRl ICpzdGF0ZSwgQWdnU3RhdGUgKmFnZ3N0YXRlLAogc3RhdGljIHZvaWQgRXhlY0luaXRKc29uRXhw cihKc29uRXhwciAqanNleHByLCBFeHByU3RhdGUgKnN0YXRlLAogCQkJCQkJCSBEYXR1bSAqcmVz diwgYm9vbCAqcmVzbnVsbCwKIAkJCQkJCQkgRXhwckV2YWxTdGVwICpzY3JhdGNoKTsKK3N0YXRp YyB2b2lkIEV4ZWNJbml0U2FmZVR5cGVDYXN0RXhwcihTYWZlVHlwZUNhc3RFeHByICpzdGNleHBy LCBFeHByU3RhdGUgKnN0YXRlLAorCQkJCQkJCQkJIERhdHVtICpyZXN2LCBib29sICpyZXNudWxs LAorCQkJCQkJCQkJIEV4cHJFdmFsU3RlcCAqc2NyYXRjaCk7CiBzdGF0aWMgdm9pZCBFeGVjSW5p dEpzb25Db2VyY2lvbihFeHByU3RhdGUgKnN0YXRlLCBKc29uUmV0dXJuaW5nICpyZXR1cm5pbmcs CiAJCQkJCQkJCSBFcnJvclNhdmVDb250ZXh0ICplc2NvbnRleHQsIGJvb2wgb21pdF9xdW90ZXMs CiAJCQkJCQkJCSBib29sIGV4aXN0c19jb2VyY2UsCkBAIC0yMTgwLDYgKzIxODMsMTQgQEAgRXhl Y0luaXRFeHByUmVjKEV4cHIgKm5vZGUsIEV4cHJTdGF0ZSAqc3RhdGUsCiAJCQkJYnJlYWs7CiAJ CQl9CiAKKwkJY2FzZSBUX1NhZmVUeXBlQ2FzdEV4cHI6CisJCQl7CisJCQkJU2FmZVR5cGVDYXN0 RXhwciAgICpzdGNleHByID0gY2FzdE5vZGUoU2FmZVR5cGVDYXN0RXhwciwgbm9kZSk7CisKKwkJ CQlFeGVjSW5pdFNhZmVUeXBlQ2FzdEV4cHIoc3RjZXhwciwgc3RhdGUsIHJlc3YsIHJlc251bGws ICZzY3JhdGNoKTsKKwkJCQlicmVhazsKKwkJCX0KKwogCQljYXNlIFRfQ29hbGVzY2VFeHByOgog CQkJewogCQkJCUNvYWxlc2NlRXhwciAqY29hbGVzY2UgPSAoQ29hbGVzY2VFeHByICopIG5vZGU7 CkBAIC0yNzQ2LDcgKzI3NTcsNyBAQCBFeGVjSW5pdEZ1bmMoRXhwckV2YWxTdGVwICpzY3JhdGNo LCBFeHByICpub2RlLCBMaXN0ICphcmdzLCBPaWQgZnVuY2lkLAogCiAJLyogSW5pdGlhbGl6ZSBm dW5jdGlvbiBjYWxsIHBhcmFtZXRlciBzdHJ1Y3R1cmUgdG9vICovCiAJSW5pdEZ1bmN0aW9uQ2Fs bEluZm9EYXRhKCpmY2luZm8sIGZsaW5mbywKLQkJCQkJCQkgbmFyZ3MsIGlucHV0Y29sbGlkLCBO VUxMLCBOVUxMKTsKKwkJCQkJCQkgbmFyZ3MsIGlucHV0Y29sbGlkLCAoTm9kZSAqKSBzdGF0ZS0+ ZXNjb250ZXh0LCBOVUxMKTsKIAogCS8qIEtlZXAgZXh0cmEgY29waWVzIG9mIHRoaXMgaW5mbyB0 byBzYXZlIGFuIGluZGlyZWN0aW9uIGF0IHJ1bnRpbWUgKi8KIAlzY3JhdGNoLT5kLmZ1bmMuZm5f YWRkciA9IGZsaW5mby0+Zm5fYWRkcjsKQEAgLTQ3NDQsNiArNDc1NSwxMTAgQEAgRXhlY0J1aWxk UGFyYW1TZXRFcXVhbChUdXBsZURlc2MgZGVzYywKIAlyZXR1cm4gc3RhdGU7CiB9CiAKKy8qCisg KiBQdXNoIHN0ZXBzIHRvIGV2YWx1YXRlIGEgU2FmZVR5cGVDYXN0RXhwciBhbmQgaXRzIHZhcmlv dXMgc3Vic2lkaWFyeQorICogZXhwcmVzc2lvbnMuIFdlIGFscmVhZHkgaGFuZGxlIGVycm9ycyBz b2Z0bHkgZm9yIGNvZXJjaW9uIG5vZGVzIGxpa2UKKyAqIENvZXJjZVZpYUlPLCBDb2VyY2VUb0Rv bWFpbiwgQXJyYXlDb2VyY2VFeHByLCBhbmQgc29tZSBGdW5jRXhwcnMuIEhvd2V2ZXIsCisgKiBt b3N0IG9mIEZ1bmNFeHBycyBub2RlIChmb3IgZXhhbXBsZSwgaW50ODQpIGlzIG5vdCBlcnJvci1z YWZlLiBGb3IgdGhlc2UKKyAqIGNhc2VzLCB3ZSBpbnN0ZWFkIHdyYXAgdGhlIHNvdXJjZSBleHBy ZXNzaW9uIGFuZCB0YXJnZXQgdHlwZSBpbmZvcm1hdGlvbgorICogd2l0aGluIGEgQ29lcmNlVmlh SU8gbm9kZS4KKyAqLworc3RhdGljIHZvaWQKK0V4ZWNJbml0U2FmZVR5cGVDYXN0RXhwcihTYWZl VHlwZUNhc3RFeHByICpzdGNleHByICwgRXhwclN0YXRlICpzdGF0ZSwKKwkJCQkJCSBEYXR1bSAq cmVzdiwgYm9vbCAqcmVzbnVsbCwKKwkJCQkJCSBFeHByRXZhbFN0ZXAgKnNjcmF0Y2gpCit7CisJ LyoKKwkgKiBJZiBjb2VyY2lvbiB0byB0aGUgdGFyZ2V0IHR5cGUgZmFpbHMsIGZhbGxiYWNrIHRv IHRoZSBkZWZhdWx0IGV4cHJlc3Npb24KKwkgKiBzcGVjaWZpZWQgaW4gdGhlIE9OIENPTlZFUlNJ T04gRVJST1IgY2xhdXNlLgorCSovCisJaWYgKHN0Y2V4cHItPmNhc3RfZXhwciA9PSBOVUxMKQor CXsKKwkJRXhlY0luaXRFeHByUmVjKChFeHByICopIHN0Y2V4cHItPmRlZmF1bHRfZXhwciwKKwkJ CQkJCXN0YXRlLCByZXN2LCByZXNudWxsKTsKKwkJcmV0dXJuOworCX0KKwllbHNlCisJeworCQlD b2VyY2VWaWFJTyAqbmV3ZXhwcjsKKwkJU2FmZVR5cGVDYXN0U3RhdGUgKnN0Y3N0YXRlOworCQlF cnJvclNhdmVDb250ZXh0ICplc2NvbnRleHQ7CisJCUVycm9yU2F2ZUNvbnRleHQgKnNhdmVkX2Vz Y29udGV4dDsKKwkJTGlzdAkgICAqanVtcHNfdG9fZW5kID0gTklMOworCQlib29sCQludW1lcmlj X2ZyYWN0aW9uID0gZmFsc2U7CisJCU9pZAkJCXNvdXJjZV9vaWQ7CisKKwkJc3Rjc3RhdGUgPSBw YWxsb2MwKHNpemVvZihTYWZlVHlwZUNhc3RTdGF0ZSkpOworCQlzdGNzdGF0ZS0+c3RjZXhwciA9 IHN0Y2V4cHI7CisJCXN0Y3N0YXRlLT5lc2NvbnRleHQudHlwZSA9IFRfRXJyb3JTYXZlQ29udGV4 dDsKKwkJZXNjb250ZXh0ID0gJnN0Y3N0YXRlLT5lc2NvbnRleHQ7CisJCXN0YXRlLT5lc2NvbnRl eHQgPSBlc2NvbnRleHQ7CisKKwkJc291cmNlX29pZCA9IGdldEJhc2VUeXBlKGV4cHJUeXBlKHN0 Y2V4cHItPnNvdXJjZV9leHByKSk7CisKKwkJLyoKKwkJICogV2UgY2FuJ3QgdXNlIENvZXJjZVZp YUlPIHRvIHNhZmVseSBjYXN0IG51bWVyaWMgdmFsdWVzIHdpdGgKKwkJICogZnJhY3Rpb25hbCBw YXJ0cyB0byBvdGhlciBudW1lcmljYWwgdHlwZXMsIGJlY2F1c2Ugb2Ygcm91bmRpbmcKKwkJICog aXNzdWVzLiBGb3IgZXhhbXBsZSwgJzExLjEnOjpOVU1FUklDOjpJTlQgd291bGQgZmFpbCBiZWNh dXNlICcxMS4xJworCQkgKiBpc24ndCBhIHZhbGlkIHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3Ig YW4gaW50ZWdlci4gIEluc3RlYWQsIHdlCisJCSAqIHNob3VsZCB1c2UgRnVuY0V4cHIgZm9yIHRo ZXNlIGNhc2VzLgorCQkqLworCQlpZiAoc291cmNlX29pZCA9PSBOVU1FUklDT0lEIHx8CisJCQlz b3VyY2Vfb2lkID09IEZMT0FUNE9JRCB8fAorCQkJc291cmNlX29pZCA9PSBGTE9BVDhPSUQpCisJ CQludW1lcmljX2ZyYWN0aW9uID0gdHJ1ZTsKKworCQkvKiBldmFsdWF0ZSBhcmd1bWVudCBleHBy ZXNzaW9uIGludG8gc3RlcCdzIHJlc3VsdCBhcmVhICovCisJCWlmIChJc0Eoc3RjZXhwci0+Y2Fz dF9leHByLCBDb2VyY2VWaWFJTykgfHwKKwkJCUlzQShzdGNleHByLT5jYXN0X2V4cHIsIENvZXJj ZVRvRG9tYWluKSB8fAorCQkJSXNBKHN0Y2V4cHItPmNhc3RfZXhwciwgQXJyYXlDb2VyY2VFeHBy KSB8fAorCQkJSXNBKHN0Y2V4cHItPmNhc3RfZXhwciwgVmFyKSB8fAorCQkJbnVtZXJpY19mcmFj dGlvbikKKwkJCUV4ZWNJbml0RXhwclJlYygoRXhwciAqKSBzdGNleHByLT5jYXN0X2V4cHIsCisJ CQkJCQkJc3RhdGUsIHJlc3YsIHJlc251bGwpOworCQllbHNlCisJCXsKKwkJCW5ld2V4cHIgPSBt YWtlTm9kZShDb2VyY2VWaWFJTyk7CisJCQluZXdleHByLT5hcmcgPSAoRXhwciAqKSBzdGNleHBy LT5zb3VyY2VfZXhwcjsKKwkJCW5ld2V4cHItPnJlc3VsdHR5cGUgPSBzdGNleHByLT5yZXN1bHR0 eXBlOworCQkJbmV3ZXhwci0+cmVzdWx0Y29sbGlkID0gZXhwckNvbGxhdGlvbihzdGNleHByLT5z b3VyY2VfZXhwcik7CisJCQluZXdleHByLT5jb2VyY2Vmb3JtYXQgPSBDT0VSQ0VfRVhQTElDSVRf Q0FTVDsKKwkJCW5ld2V4cHItPmxvY2F0aW9uID0gZXhwckxvY2F0aW9uKHN0Y2V4cHItPnNvdXJj ZV9leHByKTsKKworCQkJRXhlY0luaXRFeHByUmVjKChFeHByICopIG5ld2V4cHIsCisJCQkJCQkJ c3RhdGUsIHJlc3YsIHJlc251bGwpOworCQl9CisKKwkJc2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9T QUZFVFlQRV9DQVNUOworCQlzY3JhdGNoLT5kLnN0Y2V4cHIuc3Rjc3RhdGUgPSBzdGNzdGF0ZTsK KwkJRXhwckV2YWxQdXNoU3RlcChzdGF0ZSwgc2NyYXRjaCk7CisKKwkJc3Rjc3RhdGUtPmp1bXBf ZXJyb3IgPSBzdGF0ZS0+c3RlcHNfbGVuOworCQkvKiBKVU1QIHRvIGVuZCBpZiBmYWxzZSwgdGhh dCBpcywgc2tpcCB0aGUgT04gRVJST1IgZXhwcmVzc2lvbi4gKi8KKwkJanVtcHNfdG9fZW5kID0g bGFwcGVuZF9pbnQoanVtcHNfdG9fZW5kLCBzdGF0ZS0+c3RlcHNfbGVuKTsKKwkJc2NyYXRjaC0+ b3Bjb2RlID0gRUVPUF9KVU1QX0lGX05PVF9UUlVFOworCQlzY3JhdGNoLT5yZXN2YWx1ZSA9ICZz dGNzdGF0ZS0+ZXJyb3IudmFsdWU7CisJCXNjcmF0Y2gtPnJlc251bGwgPSAmc3Rjc3RhdGUtPmVy cm9yLmlzbnVsbDsKKwkJc2NyYXRjaC0+ZC5qdW1wLmp1bXBkb25lID0gLTE7CS8qIHNldCBiZWxv dyAqLworCQlFeHByRXZhbFB1c2hTdGVwKHN0YXRlLCBzY3JhdGNoKTsKKworCQkvKiBTdGVwcyB0 byBldmFsdWF0ZSB0aGUgT04gRVJST1IgZXhwcmVzc2lvbiAqLworCQlzYXZlZF9lc2NvbnRleHQg PSBzdGF0ZS0+ZXNjb250ZXh0OworCQlzdGF0ZS0+ZXNjb250ZXh0ID0gTlVMTDsKKwkJRXhlY0lu aXRFeHByUmVjKChFeHByICopIHN0Y3N0YXRlLT5zdGNleHByLT5kZWZhdWx0X2V4cHIsCisJCQkJ CQlzdGF0ZSwgcmVzdiwgcmVzbnVsbCk7CisJCXN0YXRlLT5lc2NvbnRleHQgPSBzYXZlZF9lc2Nv bnRleHQ7CisKKwkJZm9yZWFjaF9pbnQobGMsIGp1bXBzX3RvX2VuZCkKKwkJeworCQkJRXhwckV2 YWxTdGVwICphcyA9ICZzdGF0ZS0+c3RlcHNbbGNdOworCisJCQlhcy0+ZC5qdW1wLmp1bXBkb25l ID0gc3RhdGUtPnN0ZXBzX2xlbjsKKwkJfQorCQlzdGNzdGF0ZS0+anVtcF9lbmQgPSBzdGF0ZS0+ c3RlcHNfbGVuOworCX0KK30KKwogLyoKICAqIFB1c2ggc3RlcHMgdG8gZXZhbHVhdGUgYSBKc29u RXhwciBhbmQgaXRzIHZhcmlvdXMgc3Vic2lkaWFyeSBleHByZXNzaW9ucy4KICAqLwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYyBiL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMKaW5kZXggODFlNDZjZmY3MjUuLjk4ZThhOWJkZTYy IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jCisrKyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMKQEAgLTU2OCw2ICs1NjgsNyBA QCBFeGVjSW50ZXJwRXhwcihFeHByU3RhdGUgKnN0YXRlLCBFeHByQ29udGV4dCAqZWNvbnRleHQs IGJvb2wgKmlzbnVsbCkKIAkJJiZDQVNFX0VFT1BfWE1MRVhQUiwKIAkJJiZDQVNFX0VFT1BfSlNP Tl9DT05TVFJVQ1RPUiwKIAkJJiZDQVNFX0VFT1BfSVNfSlNPTiwKKwkJJiZDQVNFX0VFT1BfU0FG RVRZUEVfQ0FTVCwKIAkJJiZDQVNFX0VFT1BfSlNPTkVYUFJfUEFUSCwKIAkJJiZDQVNFX0VFT1Bf SlNPTkVYUFJfQ09FUkNJT04sCiAJCSYmQ0FTRV9FRU9QX0pTT05FWFBSX0NPRVJDSU9OX0ZJTklT SCwKQEAgLTE5MjYsNiArMTkyNywxMSBAQCBFeGVjSW50ZXJwRXhwcihFeHByU3RhdGUgKnN0YXRl LCBFeHByQ29udGV4dCAqZWNvbnRleHQsIGJvb2wgKmlzbnVsbCkKIAkJCUVFT19ORVhUKCk7CiAJ CX0KIAorCQlFRU9fQ0FTRShFRU9QX1NBRkVUWVBFX0NBU1QpCisJCXsKKwkJCUVFT19KVU1QKEV4 ZWNFdmFsU2FmZVR5cGVDYXN0KHN0YXRlLCBvcCkpOworCQl9CisKIAkJRUVPX0NBU0UoRUVPUF9K U09ORVhQUl9QQVRIKQogCQl7CiAJCQkvKiB0b28gY29tcGxleCBmb3IgYW4gaW5saW5lIGltcGxl bWVudGF0aW9uICovCkBAIC01MTg3LDYgKzUxOTMsMzAgQEAgR2V0SnNvbkJlaGF2aW9yVmFsdWVT dHJpbmcoSnNvbkJlaGF2aW9yICpiZWhhdmlvcikKIAlyZXR1cm4gcHN0cmR1cChiZWhhdmlvcl9u YW1lc1tiZWhhdmlvci0+YnR5cGVdKTsKIH0KIAoraW50CitFeGVjRXZhbFNhZmVUeXBlQ2FzdChF eHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wKQoreworCVNhZmVUeXBlQ2FzdFN0YXRl ICpzdGNzdGF0ZSA9IG9wLT5kLnN0Y2V4cHIuc3Rjc3RhdGU7CisKKwlpZiAoU09GVF9FUlJPUl9P Q0NVUlJFRCgmc3Rjc3RhdGUtPmVzY29udGV4dCkpCisJeworCQkqb3AtPnJlc3ZhbHVlID0gKERh dHVtKSAwOworCQkqb3AtPnJlc251bGwgPSB0cnVlOworCisJCXN0Y3N0YXRlLT5lcnJvci52YWx1 ZSA9IEJvb2xHZXREYXR1bSh0cnVlKTsKKworCQkvKgorCQkgKiBSZXNldCBmb3IgbmV4dCB1c2Ug c3VjaCBhcyBmb3IgY2F0Y2hpbmcgZXJyb3JzIHdoZW4gY29lcmNpbmcgYQorCQkgKiBzdGNleHBy IGV4cHJlc3Npb24uCisJCSAqLworCQlzdGNzdGF0ZS0+ZXNjb250ZXh0LmVycm9yX29jY3VycmVk ID0gZmFsc2U7CisJCXN0Y3N0YXRlLT5lc2NvbnRleHQuZGV0YWlsc193YW50ZWQgPSBmYWxzZTsK KworCQlyZXR1cm4gc3Rjc3RhdGUtPmp1bXBfZXJyb3I7CisJfQorCXJldHVybiBzdGNzdGF0ZS0+ anVtcF9lbmQ7Cit9CisKIC8qCiAgKiBDaGVja3MgaWYgYW4gZXJyb3Igb2NjdXJyZWQgaW4gRXhl Y0V2YWxKc29uQ29lcmNpb24oKS4gIElmIHNvLCB0aGlzIHNldHMKICAqIEpzb25FeHByU3RhdGUu ZXJyb3IgdG8gdHJpZ2dlciB0aGUgT04gRVJST1IgaGFuZGxpbmcgc3RlcHMsIHVubGVzcyB0aGUK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jIGIvc3JjL2JhY2tlbmQv bm9kZXMvbm9kZUZ1bmNzLmMKaW5kZXggN2JjODIzNTA3ZjEuLjVkYTdiZDVkODhmIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rl cy9ub2RlRnVuY3MuYwpAQCAtMjA2LDYgKzIwNiw5IEBAIGV4cHJUeXBlKGNvbnN0IE5vZGUgKmV4 cHIpCiAJCWNhc2UgVF9Sb3dDb21wYXJlRXhwcjoKIAkJCXR5cGUgPSBCT09MT0lEOwogCQkJYnJl YWs7CisJCWNhc2UgVF9TYWZlVHlwZUNhc3RFeHByOgorCQkJdHlwZSA9ICgoY29uc3QgU2FmZVR5 cGVDYXN0RXhwciAqKSBleHByKS0+cmVzdWx0dHlwZTsKKwkJCWJyZWFrOwogCQljYXNlIFRfQ29h bGVzY2VFeHByOgogCQkJdHlwZSA9ICgoY29uc3QgQ29hbGVzY2VFeHByICopIGV4cHIpLT5jb2Fs ZXNjZXR5cGU7CiAJCQlicmVhazsKQEAgLTQ1MCw2ICs0NTMsOCBAQCBleHByVHlwbW9kKGNvbnN0 IE5vZGUgKmV4cHIpCiAJCQkJcmV0dXJuIHR5cG1vZDsKIAkJCX0KIAkJCWJyZWFrOworCQljYXNl IFRfU2FmZVR5cGVDYXN0RXhwcjoKKwkJCXJldHVybiAoKGNvbnN0IFNhZmVUeXBlQ2FzdEV4cHIg KikgZXhwciktPnJlc3VsdHR5cG1vZDsKIAkJY2FzZSBUX0NvYWxlc2NlRXhwcjoKIAkJCXsKIAkJ CQkvKgpAQCAtOTY1LDYgKzk3MCw5IEBAIGV4cHJDb2xsYXRpb24oY29uc3QgTm9kZSAqZXhwcikK IAkJCS8qIFJvd0NvbXBhcmVFeHByJ3MgcmVzdWx0IGlzIGJvb2xlYW4gLi4uICovCiAJCQljb2xs ID0gSW52YWxpZE9pZDsJLyogLi4uIHNvIGl0IGhhcyBubyBjb2xsYXRpb24gKi8KIAkJCWJyZWFr OworCQljYXNlIFRfU2FmZVR5cGVDYXN0RXhwcjoKKwkJCWNvbGwgPSAoKGNvbnN0IFNhZmVUeXBl Q2FzdEV4cHIgKikgZXhwciktPnJlc3VsdGNvbGxpZDsKKwkJCWJyZWFrOwogCQljYXNlIFRfQ29h bGVzY2VFeHByOgogCQkJY29sbCA9ICgoY29uc3QgQ29hbGVzY2VFeHByICopIGV4cHIpLT5jb2Fs ZXNjZWNvbGxpZDsKIAkJCWJyZWFrOwpAQCAtMTIzMiw2ICsxMjQwLDkgQEAgZXhwclNldENvbGxh dGlvbihOb2RlICpleHByLCBPaWQgY29sbGF0aW9uKQogCQkJLyogUm93Q29tcGFyZUV4cHIncyBy ZXN1bHQgaXMgYm9vbGVhbiAuLi4gKi8KIAkJCUFzc2VydCghT2lkSXNWYWxpZChjb2xsYXRpb24p KTsgLyogLi4uIHNvIG5ldmVyIHNldCBhIGNvbGxhdGlvbiAqLwogCQkJYnJlYWs7CisJCWNhc2Ug VF9TYWZlVHlwZUNhc3RFeHByOgorCQkJKChTYWZlVHlwZUNhc3RFeHByICopIGV4cHIpLT5yZXN1 bHRjb2xsaWQgPSBjb2xsYXRpb247CisJCQlicmVhazsKIAkJY2FzZSBUX0NvYWxlc2NlRXhwcjoK IAkJCSgoQ29hbGVzY2VFeHByICopIGV4cHIpLT5jb2FsZXNjZWNvbGxpZCA9IGNvbGxhdGlvbjsK IAkJCWJyZWFrOwpAQCAtMTU1NCw2ICsxNTY1LDE1IEBAIGV4cHJMb2NhdGlvbihjb25zdCBOb2Rl ICpleHByKQogCQkJLyoganVzdCB1c2UgbGVmdG1vc3QgYXJndW1lbnQncyBsb2NhdGlvbiAqLwog CQkJbG9jID0gZXhwckxvY2F0aW9uKChOb2RlICopICgoY29uc3QgUm93Q29tcGFyZUV4cHIgKikg ZXhwciktPmxhcmdzKTsKIAkJCWJyZWFrOworCQljYXNlIFRfU2FmZVR5cGVDYXN0RXhwcjoKKwkJ CXsKKwkJCQljb25zdCBTYWZlVHlwZUNhc3RFeHByICpjYXN0X2V4cHIgPSAoY29uc3QgU2FmZVR5 cGVDYXN0RXhwciAqKSBleHByOworCQkJCWlmIChjYXN0X2V4cHItPmNhc3RfZXhwcikKKwkJCQkJ bG9jID0gZXhwckxvY2F0aW9uKGNhc3RfZXhwci0+Y2FzdF9leHByKTsKKwkJCQllbHNlCisJCQkJ CWxvYyA9IGV4cHJMb2NhdGlvbihjYXN0X2V4cHItPmRlZmF1bHRfZXhwcik7CisJCQkJYnJlYWs7 CisJCQl9CiAJCWNhc2UgVF9Db2FsZXNjZUV4cHI6CiAJCQkvKiBDT0FMRVNDRSBrZXl3b3JkIHNo b3VsZCBhbHdheXMgYmUgdGhlIGZpcnN0IHRoaW5nICovCiAJCQlsb2MgPSAoKGNvbnN0IENvYWxl c2NlRXhwciAqKSBleHByKS0+bG9jYXRpb247CkBAIC0yMzI1LDYgKzIzNDUsMTggQEAgZXhwcmVz c2lvbl90cmVlX3dhbGtlcl9pbXBsKE5vZGUgKm5vZGUsCiAJCQkJCXJldHVybiB0cnVlOwogCQkJ fQogCQkJYnJlYWs7CisJCWNhc2UgVF9TYWZlVHlwZUNhc3RFeHByOgorCQkJeworCQkJCVNhZmVU eXBlQ2FzdEV4cHIgICAqc2NleHByID0gKFNhZmVUeXBlQ2FzdEV4cHIgKikgbm9kZTsKKworCQkJ CWlmIChXQUxLKHNjZXhwci0+c291cmNlX2V4cHIpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlp ZiAoV0FMSyhzY2V4cHItPmNhc3RfZXhwcikpCisJCQkJCXJldHVybiB0cnVlOworCQkJCWlmIChX QUxLKHNjZXhwci0+ZGVmYXVsdF9leHByKSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQli cmVhazsKIAkJY2FzZSBUX0NvYWxlc2NlRXhwcjoKIAkJCXJldHVybiBXQUxLKCgoQ29hbGVzY2VF eHByICopIG5vZGUpLT5hcmdzKTsKIAkJY2FzZSBUX01pbk1heEV4cHI6CkBAIC0zMzM0LDYgKzMz NjYsMTkgQEAgZXhwcmVzc2lvbl90cmVlX211dGF0b3JfaW1wbChOb2RlICpub2RlLAogCQkJCXJl dHVybiAoTm9kZSAqKSBuZXdub2RlOwogCQkJfQogCQkJYnJlYWs7CisJCWNhc2UgVF9TYWZlVHlw ZUNhc3RFeHByOgorCQkJeworCQkJCVNhZmVUeXBlQ2FzdEV4cHIgICAqc2NleHByID0gKFNhZmVU eXBlQ2FzdEV4cHIgKikgbm9kZTsKKwkJCQlTYWZlVHlwZUNhc3RFeHByICAgKm5ld25vZGU7CisK KwkJCQlGTEFUQ09QWShuZXdub2RlLCBzY2V4cHIsIFNhZmVUeXBlQ2FzdEV4cHIpOworCQkJCU1V VEFURShuZXdub2RlLT5zb3VyY2VfZXhwciwgc2NleHByLT5zb3VyY2VfZXhwciwgTm9kZSAqKTsK KwkJCQlNVVRBVEUobmV3bm9kZS0+Y2FzdF9leHByLCBzY2V4cHItPmNhc3RfZXhwciwgTm9kZSAq KTsKKwkJCQlNVVRBVEUobmV3bm9kZS0+ZGVmYXVsdF9leHByLCBzY2V4cHItPmRlZmF1bHRfZXhw ciwgTm9kZSAqKTsKKworCQkJCXJldHVybiAoTm9kZSAqKSBuZXdub2RlOworCQkJfQorCQkJYnJl YWs7CiAJCWNhc2UgVF9Db2FsZXNjZUV4cHI6CiAJCQl7CiAJCQkJQ29hbGVzY2VFeHByICpjb2Fs ZXNjZWV4cHIgPSAoQ29hbGVzY2VFeHByICopIG5vZGU7CkBAIC00NDY4LDYgKzQ1MTMsMTggQEAg cmF3X2V4cHJlc3Npb25fdHJlZV93YWxrZXJfaW1wbChOb2RlICpub2RlLAogCQkJCQlyZXR1cm4g dHJ1ZTsKIAkJCX0KIAkJCWJyZWFrOworCQljYXNlIFRfU2FmZVR5cGVDYXN0RXhwcjoKKwkJCXsK KwkJCQlTYWZlVHlwZUNhc3RFeHByICAgKnN0YyA9IChTYWZlVHlwZUNhc3RFeHByICopIG5vZGU7 CisKKwkJCQlpZiAoV0FMSyhzdGMtPnNvdXJjZV9leHByKSkKKwkJCQkJcmV0dXJuIHRydWU7CisJ CQkJaWYgKFdBTEsoc3RjLT5jYXN0X2V4cHIpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlpZiAo V0FMSyhzdGMtPmRlZmF1bHRfZXhwcikpCisJCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJYnJl YWs7CiAJCWNhc2UgVF9Db2xsYXRlQ2xhdXNlOgogCQkJcmV0dXJuIFdBTEsoKChDb2xsYXRlQ2xh dXNlICopIG5vZGUpLT5hcmcpOwogCQljYXNlIFRfU29ydEJ5OgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvbm9kZXMvcXVlcnlqdW1ibGVmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvcXVlcnlq dW1ibGVmdW5jcy5jCmluZGV4IDMxZjk3MTUxOTc3Li43NjQyNmM4OGU5YSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvbm9kZXMvcXVlcnlqdW1ibGVmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25v ZGVzL3F1ZXJ5anVtYmxlZnVuY3MuYwpAQCAtNzQsNiArNzQsNyBAQCBzdGF0aWMgdm9pZCBfanVt YmxlRWxlbWVudHMoSnVtYmxlU3RhdGUgKmpzdGF0ZSwgTGlzdCAqZWxlbWVudHMsIE5vZGUgKm5v ZGUpOwogc3RhdGljIHZvaWQgX2p1bWJsZVBhcmFtKEp1bWJsZVN0YXRlICpqc3RhdGUsIE5vZGUg Km5vZGUpOwogc3RhdGljIHZvaWQgX2p1bWJsZUFfQ29uc3QoSnVtYmxlU3RhdGUgKmpzdGF0ZSwg Tm9kZSAqbm9kZSk7CiBzdGF0aWMgdm9pZCBfanVtYmxlVmFyaWFibGVTZXRTdG10KEp1bWJsZVN0 YXRlICpqc3RhdGUsIE5vZGUgKm5vZGUpOworc3RhdGljIHZvaWQgX2p1bWJsZVNhZmVUeXBlQ2Fz dEV4cHIoSnVtYmxlU3RhdGUgKmpzdGF0ZSwgTm9kZSAqbm9kZSk7CiBzdGF0aWMgdm9pZCBfanVt YmxlUmFuZ2VUYmxFbnRyeV9lcmVmKEp1bWJsZVN0YXRlICpqc3RhdGUsCiAJCQkJCQkJCQkgIFJh bmdlVGJsRW50cnkgKnJ0ZSwKIAkJCQkJCQkJCSAgQWxpYXMgKmV4cHIpOwpAQCAtNzU4LDYgKzc1 OSwxOSBAQCBfanVtYmxlVmFyaWFibGVTZXRTdG10KEp1bWJsZVN0YXRlICpqc3RhdGUsIE5vZGUg Km5vZGUpCiAJSlVNQkxFX0xPQ0FUSU9OKGxvY2F0aW9uKTsKIH0KIAorc3RhdGljIHZvaWQKK19q dW1ibGVTYWZlVHlwZUNhc3RFeHByKEp1bWJsZVN0YXRlICpqc3RhdGUsIE5vZGUgKm5vZGUpCit7 CisJU2FmZVR5cGVDYXN0RXhwciAqZXhwciA9IChTYWZlVHlwZUNhc3RFeHByICopIG5vZGU7CisK KwlpZiAoZXhwci0+Y2FzdF9leHByID09IE5VTEwpCisJCUpVTUJMRV9OT0RFKHNvdXJjZV9leHBy KTsKKwllbHNlCisJCUpVTUJMRV9OT0RFKGNhc3RfZXhwcik7CisKKwlKVU1CTEVfTk9ERShkZWZh dWx0X2V4cHIpOworfQorCiAvKgogICogQ3VzdG9tIHF1ZXJ5IGp1bWJsZSBmdW5jdGlvbiBmb3Ig UmFuZ2VUYmxFbnRyeS5lcmVmLgogICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvdXRpbC9jbGF1c2VzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMK aW5kZXggNmYwYjMzOGQyY2QuLmMwNGNhODhiMGZiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv Y2xhdXNlcy5jCkBAIC0yOTQyLDYgKzI5NDIsMjUgQEAgZXZhbF9jb25zdF9leHByZXNzaW9uc19t dXRhdG9yKE5vZGUgKm5vZGUsCiAJCQkJCQkJCQkJCQkgIGNvcHlPYmplY3QoanZlLT5mb3JtYXQp KTsKIAkJCX0KIAorCQljYXNlIFRfU2FmZVR5cGVDYXN0RXhwcjoKKwkJCXsKKwkJCQlTYWZlVHlw ZUNhc3RFeHByICpzdGMgPSAoU2FmZVR5cGVDYXN0RXhwciAqKSBub2RlOworCQkJCVNhZmVUeXBl Q2FzdEV4cHIJICAgKm5ld2V4cHI7CisJCQkJTm9kZQkgICAqc291cmNlX2V4cHIgPSBzdGMtPnNv dXJjZV9leHByOworCQkJCU5vZGUJICAgKmRlZmF1bHRfZXhwciA9IHN0Yy0+ZGVmYXVsdF9leHBy OworCisJCQkJc291cmNlX2V4cHIgPSBldmFsX2NvbnN0X2V4cHJlc3Npb25zX211dGF0b3Ioc291 cmNlX2V4cHIsIGNvbnRleHQpOworCQkJCWRlZmF1bHRfZXhwciA9IGV2YWxfY29uc3RfZXhwcmVz c2lvbnNfbXV0YXRvcihkZWZhdWx0X2V4cHIsIGNvbnRleHQpOworCisJCQkJbmV3ZXhwciA9IG1h a2VOb2RlKFNhZmVUeXBlQ2FzdEV4cHIpOworCQkJCW5ld2V4cHItPnNvdXJjZV9leHByID0gc291 cmNlX2V4cHI7CisJCQkJbmV3ZXhwci0+Y2FzdF9leHByID0gc3RjLT5jYXN0X2V4cHI7CisJCQkJ bmV3ZXhwci0+ZGVmYXVsdF9leHByID0gZGVmYXVsdF9leHByOworCQkJCW5ld2V4cHItPnJlc3Vs dHR5cGUgPSBzdGMtPnJlc3VsdHR5cGU7CisJCQkJbmV3ZXhwci0+cmVzdWx0dHlwbW9kID0gc3Rj LT5yZXN1bHR0eXBtb2Q7CisJCQkJbmV3ZXhwci0+cmVzdWx0Y29sbGlkID0gc3RjLT5yZXN1bHRj b2xsaWQ7CisJCQkJcmV0dXJuIChOb2RlICopIG5ld2V4cHI7CisJCQl9CiAJCWNhc2UgVF9TdWJQ bGFuOgogCQljYXNlIFRfQWx0ZXJuYXRpdmVTdWJQbGFuOgogCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9wYXJzZXIvZ3JhbS55IGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQppbmRleCBkYjQz MDM0YjlkYi4uMjAyOTNkNzU1MjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFt LnkKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQpAQCAtNjQyLDYgKzY0Miw4IEBAIHN0 YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICph bGlhc2VzLCBOb2RlICpxdWVyeSk7CiAldHlwZSA8cGFydGJvdW5kc3BlYz4gUGFydGl0aW9uQm91 bmRTcGVjCiAldHlwZSA8bGlzdD4JCWhhc2hfcGFydGJvdW5kCiAldHlwZSA8ZGVmZWx0PgkJaGFz aF9wYXJ0Ym91bmRfZWxlbQorJXR5cGUgPG5vZGU+CWNhc3Rfb25fZXJyb3JfY2xhdXNlCisldHlw ZSA8bm9kZT4JY2FzdF9vbl9lcnJvcl9hY3Rpb24KIAogJXR5cGUgPG5vZGU+CWpzb25fZm9ybWF0 X2NsYXVzZQogCQkJCWpzb25fZm9ybWF0X2NsYXVzZV9vcHQKQEAgLTE1OTMxLDggKzE1OTMzLDI1 IEBAIGZ1bmNfZXhwcl9jb21tb25fc3ViZXhwcjoKIAkJCQl7CiAJCQkJCSQkID0gbWFrZVNRTFZh bHVlRnVuY3Rpb24oU1ZGT1BfQ1VSUkVOVF9TQ0hFTUEsIC0xLCBAMSk7CiAJCQkJfQotCQkJfCBD QVNUICcoJyBhX2V4cHIgQVMgVHlwZW5hbWUgJyknCi0JCQkJeyAkJCA9IG1ha2VUeXBlQ2FzdCgk MywgJDUsIEAxKTsgfQorCQkJfCBDQVNUICcoJyBhX2V4cHIgQVMgVHlwZW5hbWUgY2FzdF9vbl9l cnJvcl9jbGF1c2UgJyknCisJCQkJeworCQkJCQlUeXBlQ2FzdCAqY2FzdCA9IChUeXBlQ2FzdCAq KSBtYWtlVHlwZUNhc3QoJDMsICQ1LCBAMSk7CisJCQkJCWlmICgkNiA9PSBOVUxMKQorCQkJCQkJ JCQgPSAoTm9kZSAqKSBjYXN0OworCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCVNhZmVUeXBlQ2Fz dCAqc2FmZWNhc3QgPSBtYWtlTm9kZShTYWZlVHlwZUNhc3QpOworCisJCQkJCQlzYWZlY2FzdC0+ Y2FzdCA9IChOb2RlICopIGNhc3Q7CisJCQkJCQlzYWZlY2FzdC0+ZXhwciA9ICQ2OworCisJCQkJ CQkvKgorCQkJCQkJICogT24tZXJyb3IgYWN0aW9ucyBtdXN0IHRoZW1zZWx2ZXMgYmUgdHlwZWNh c3QgdG8gdGhlCisJCQkJCQkgKiBzYW1lIHR5cGUgYXMgdGhlIG9yaWdpbmFsIGV4cHJlc3Npb24u CisJCQkJCQkgKi8KKwkJCQkJCSQkID0gKE5vZGUgKikgc2FmZWNhc3Q7CisJCQkJCX0KKwkJCQl9 CiAJCQl8IEVYVFJBQ1QgJygnIGV4dHJhY3RfbGlzdCAnKScKIAkJCQl7CiAJCQkJCSQkID0gKE5v ZGUgKikgbWFrZUZ1bmNDYWxsKFN5c3RlbUZ1bmNOYW1lKCJleHRyYWN0IiksCkBAIC0xNjMxOCw2 ICsxNjMzNywxNCBAQCBmdW5jX2V4cHJfY29tbW9uX3N1YmV4cHI6CiAJCQkJfQogCQkJOwogCitj YXN0X29uX2Vycm9yX2NsYXVzZTogY2FzdF9vbl9lcnJvcl9hY3Rpb24gT04gQ09OVkVSU0lPTl9Q IEVSUk9SX1AgeyAkJCA9ICQxOyB9CisJCQl8IC8qIEVNUFRZICovIHsgJCQgPSBOVUxMOyB9CisJ CTsKKworY2FzdF9vbl9lcnJvcl9hY3Rpb246IEVSUk9SX1AgeyAkJCA9IE5VTEw7IH0KKwkJCXwg TlVMTF9QIHsgJCQgPSBtYWtlTnVsbEFDb25zdCgtMSk7IH0KKwkJCXwgREVGQVVMVCBhX2V4cHIg eyAkJCA9ICQyOyB9CisJCTsKIAogLyoKICAqIFNRTC9YTUwgc3VwcG9ydApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJz ZV9leHByLmMKaW5kZXggZDY2Mjc2ODAxYzYuLjJmNWEzMDU5YWNhIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJz ZV9leHByLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5j bHVkZSAiY2F0YWxvZy9wZ19hZ2dyZWdhdGUuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3Byb2Mu aCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKICNpbmNsdWRlICJjb21tYW5kcy9kYmNv bW1hbmRzLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCkBAIC0zNyw2ICszOCw3IEBACiAjaW5j bHVkZSAidXRpbHMvZGF0ZS5oIgogI2luY2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCiAjaW5jbHVk ZSAidXRpbHMvbHN5c2NhY2hlLmgiCisjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKICNpbmNs dWRlICJ1dGlscy90aW1lc3RhbXAuaCIKICNpbmNsdWRlICJ1dGlscy94bWwuaCIKIApAQCAtNjAs NyArNjIsMTAgQEAgc3RhdGljIE5vZGUgKnRyYW5zZm9ybU11bHRpQXNzaWduUmVmKFBhcnNlU3Rh dGUgKnBzdGF0ZSwgTXVsdGlBc3NpZ25SZWYgKm1hcmVmKTsKIHN0YXRpYyBOb2RlICp0cmFuc2Zv cm1DYXNlRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIENhc2VFeHByICpjKTsKIHN0YXRpYyBOb2Rl ICp0cmFuc2Zvcm1TdWJMaW5rKFBhcnNlU3RhdGUgKnBzdGF0ZSwgU3ViTGluayAqc3VibGluayk7 CiBzdGF0aWMgTm9kZSAqdHJhbnNmb3JtQXJyYXlFeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQV9B cnJheUV4cHIgKmEsCi0JCQkJCQkJCU9pZCBhcnJheV90eXBlLCBPaWQgZWxlbWVudF90eXBlLCBp bnQzMiB0eXBtb2QpOworCQkJCQkJCQlPaWQgYXJyYXlfdHlwZSwgT2lkIGVsZW1lbnRfdHlwZSwg aW50MzIgdHlwbW9kLAorCQkJCQkJCQlib29sICpjYW5fY29lcmNlKTsKK3N0YXRpYyBOb2RlICp0 cmFuc2Zvcm1BcnJheUV4cHJTYWZlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQV9BcnJheUV4cHIgKmEs CisJCQkJCQkJCQlPaWQgYXJyYXlfdHlwZSwgT2lkIGVsZW1lbnRfdHlwZSwgaW50MzIgdHlwbW9k KTsKIHN0YXRpYyBOb2RlICp0cmFuc2Zvcm1Sb3dFeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgUm93 RXhwciAqciwgYm9vbCBhbGxvd0RlZmF1bHQpOwogc3RhdGljIE5vZGUgKnRyYW5zZm9ybUNvYWxl c2NlRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIENvYWxlc2NlRXhwciAqYyk7CiBzdGF0aWMgTm9k ZSAqdHJhbnNmb3JtTWluTWF4RXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIE1pbk1heEV4cHIgKm0p OwpAQCAtNzYsNiArODEsNyBAQCBzdGF0aWMgTm9kZSAqdHJhbnNmb3JtV2hvbGVSb3dSZWYoUGFy c2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkJCQkgIGludCBzdWJsZXZlbHNfdXAsIGludCBsb2NhdGlv bik7CiBzdGF0aWMgTm9kZSAqdHJhbnNmb3JtSW5kaXJlY3Rpb24oUGFyc2VTdGF0ZSAqcHN0YXRl LCBBX0luZGlyZWN0aW9uICppbmQpOwogc3RhdGljIE5vZGUgKnRyYW5zZm9ybVR5cGVDYXN0KFBh cnNlU3RhdGUgKnBzdGF0ZSwgVHlwZUNhc3QgKnRjKTsKK3N0YXRpYyBOb2RlICp0cmFuc2Zvcm1U eXBlU2FmZUNhc3QoUGFyc2VTdGF0ZSAqcHN0YXRlLCBTYWZlVHlwZUNhc3QgKnRjKTsKIHN0YXRp YyBOb2RlICp0cmFuc2Zvcm1Db2xsYXRlQ2xhdXNlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ29sbGF0 ZUNsYXVzZSAqYyk7CiBzdGF0aWMgTm9kZSAqdHJhbnNmb3JtSnNvbk9iamVjdENvbnN0cnVjdG9y KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJCQkJCQkJSnNvbk9iamVjdENvbnN0cnVjdG9yICpj dG9yKTsKQEAgLTEwNiw2ICsxMTIsOCBAQCBzdGF0aWMgRXhwciAqbWFrZV9kaXN0aW5jdF9vcChQ YXJzZVN0YXRlICpwc3RhdGUsIExpc3QgKm9wbmFtZSwKIAkJCQkJCQkgIE5vZGUgKmx0cmVlLCBO b2RlICpydHJlZSwgaW50IGxvY2F0aW9uKTsKIHN0YXRpYyBOb2RlICptYWtlX251bGx0ZXN0X2Zy b21fZGlzdGluY3QoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkJCQkJCSBBX0V4cHIgKmRpc3Rp bmN0YSwgTm9kZSAqYXJnKTsKK3N0YXRpYyBib29sIENvdmVydFVua25vd25Db25zdFNhZmUoUGFy c2VTdGF0ZSAqcHN0YXRlLCBOb2RlICpub2RlLAorCQkJCQkJCQkgICBPaWQgdGFyZ2V0VHlwZSwg aW50MzIgdGFyZ2V0VHlwZU1vZCk7CiAKIAogLyoKQEAgLTE2MywxMyArMTcxLDE3IEBAIHRyYW5z Zm9ybUV4cHJSZWN1cnNlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTm9kZSAqZXhwcikKIAogCQljYXNl IFRfQV9BcnJheUV4cHI6CiAJCQlyZXN1bHQgPSB0cmFuc2Zvcm1BcnJheUV4cHIocHN0YXRlLCAo QV9BcnJheUV4cHIgKikgZXhwciwKLQkJCQkJCQkJCQlJbnZhbGlkT2lkLCBJbnZhbGlkT2lkLCAt MSk7CisJCQkJCQkJCQkJSW52YWxpZE9pZCwgSW52YWxpZE9pZCwgLTEsIE5VTEwpOwogCQkJYnJl YWs7CiAKIAkJY2FzZSBUX1R5cGVDYXN0OgogCQkJcmVzdWx0ID0gdHJhbnNmb3JtVHlwZUNhc3Qo cHN0YXRlLCAoVHlwZUNhc3QgKikgZXhwcik7CiAJCQlicmVhazsKIAorCQljYXNlIFRfU2FmZVR5 cGVDYXN0OgorCQkJcmVzdWx0ID0gdHJhbnNmb3JtVHlwZVNhZmVDYXN0KHBzdGF0ZSwgKFNhZmVU eXBlQ2FzdCAqKSBleHByKTsKKwkJCWJyZWFrOworCiAJCWNhc2UgVF9Db2xsYXRlQ2xhdXNlOgog CQkJcmVzdWx0ID0gdHJhbnNmb3JtQ29sbGF0ZUNsYXVzZShwc3RhdGUsIChDb2xsYXRlQ2xhdXNl ICopIGV4cHIpOwogCQkJYnJlYWs7CkBAIC0yMDA0LDE2ICsyMDE2LDEyNyBAQCB0cmFuc2Zvcm1T dWJMaW5rKFBhcnNlU3RhdGUgKnBzdGF0ZSwgU3ViTGluayAqc3VibGluaykKIAlyZXR1cm4gcmVz dWx0OwogfQogCisvKgorICogUmV0dXJuIHRydWUgaWZmIHN1Y2Nlc3NmdWx5IGNvZXJjZWQgYSBV bmtub3duIENvbnN0IHRvIHRhcmdldFR5cGUKKyovCitzdGF0aWMgYm9vbCBDb3ZlcnRVbmtub3du Q29uc3RTYWZlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTm9kZSAqbm9kZSwKKwkJCQkJCQkJICAgT2lk IHRhcmdldFR5cGUsIGludDMyIHRhcmdldFR5cGVNb2QpCit7CisJT2lkCQkJYmFzZVR5cGVJZDsK KwlpbnQzMgkJYmFzZVR5cGVNb2Q7CisJaW50MzIJCWlucHV0VHlwZU1vZDsKKwlUeXBlCQliYXNl VHlwZTsKKwljaGFyCQkqc3RyaW5nOworCURhdHVtCQlkYXR1bTsKKwlib29sCQljb252ZXJ0ZWQ7 CisJQ29uc3QJICAgKmNvbjsKKworCUFzc2VydChJc0Eobm9kZSwgQ29uc3QpKTsKKwlBc3NlcnQo ZXhwclR5cGUobm9kZSkgPT0gVU5LTk9XTk9JRCk7CisKKwljb24gPSAoQ29uc3QgKikgbm9kZTsK KwliYXNlVHlwZU1vZCA9IHRhcmdldFR5cGVNb2Q7CisJYmFzZVR5cGVJZCA9IGdldEJhc2VUeXBl QW5kVHlwbW9kKHRhcmdldFR5cGUsICZiYXNlVHlwZU1vZCk7CisKKwlpZiAoYmFzZVR5cGVJZCA9 PSBJTlRFUlZBTE9JRCkKKwkJaW5wdXRUeXBlTW9kID0gYmFzZVR5cGVNb2Q7CisJZWxzZQorCQlp bnB1dFR5cGVNb2QgPSAtMTsKKwliYXNlVHlwZSA9IHR5cGVpZFR5cGUoYmFzZVR5cGVJZCk7CisK KwkvKgorCSAqIFdlIGFzc3VtZSBoZXJlIHRoYXQgVU5LTk9XTidzIGludGVybmFsIHJlcHJlc2Vu dGF0aW9uIGlzIHRoZSBzYW1lIGFzCisJICogQ1NUUklORy4KKwkqLworCWlmICghY29uLT5jb25z dGlzbnVsbCkKKwkJc3RyaW5nID0gRGF0dW1HZXRDU3RyaW5nKGNvbi0+Y29uc3R2YWx1ZSk7CisJ ZWxzZQorCQlzdHJpbmcgPSBOVUxMOworCisJY29udmVydGVkID0gc3RyaW5nVHlwZURhdHVtU2Fm ZShiYXNlVHlwZSwKKwkJCQkJCQkJCXN0cmluZywKKwkJCQkJCQkJCWlucHV0VHlwZU1vZCwKKwkJ CQkJCQkJCSZkYXR1bSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUoYmFzZVR5cGUpOworCisJcmV0dXJu IGNvbnZlcnRlZDsKK30KKworLyoKKyAqIEFzIHdpdGggdHJhbnNmb3JtQXJyYXlFeHByLCB3ZSBu ZWVkIHRvIGNvcnJlY3RseSBwYXJzZSBiYWNrIGEgcXVlcnkgbGlrZQorICogQ0FTVChBUlJBWVsn dGhyZWUnLCAnYSddIEFTIGludFtdIERFRkFVTFQgJ3syMSwyMn0nIE9OIENPTlZFUlNJT04gRVJS T1IpLiAgV2UKKyAqIGNhbm5vdCBhbGxvdyBldmFsX2NvbnN0X2V4cHJlc3Npb25zIHRvIGZvbGQg dGhlIEFfQXJyYXlFeHByIGludG8gYSBDb25zdAorICogbm9kZSwgYXMgdGhpcyBtYXkgY2F1c2Ug YW4gZXJyb3IgdG9vIGVhcmx5LiBUaGUgQV9BcnJheUV4cHIgc3RpbGwgbmVlZAorICogdHJhbnNm b3JtZWQgaW50byBhbiBBcnJheUV4cHIgZm9yIHRoZSBkZXBhcnNlIHB1cnBvc2UuCisgKi8KK3N0 YXRpYyBOb2RlICoKK3RyYW5zZm9ybUFycmF5RXhwclNhZmUoUGFyc2VTdGF0ZSAqcHN0YXRlLCBB X0FycmF5RXhwciAqYSwKKwkJCQkJICAgT2lkIGFycmF5X3R5cGUsIE9pZCBlbGVtZW50X3R5cGUs IGludDMyIHR5cG1vZCkKK3sKKwlBcnJheUV4cHIgICpuZXdhID0gbWFrZU5vZGUoQXJyYXlFeHBy KTsKKwlMaXN0CSAgICpuZXdlbGVtcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICplbGVtZW50OworCisJ bmV3YS0+bXVsdGlkaW1zID0gZmFsc2U7CisJZm9yZWFjaChlbGVtZW50LCBhLT5lbGVtZW50cykK Kwl7CisJCU5vZGUJICAgKmUgPSAoTm9kZSAqKSBsZmlyc3QoZWxlbWVudCk7CisJCU5vZGUJICAg Km5ld2U7CisKKwkJLyoKKwkJICogSWYgYW4gZWxlbWVudCBpcyBpdHNlbGYgYW4gQV9BcnJheUV4 cHIsIHJlY3Vyc2UgZGlyZWN0bHkgc28gdGhhdCB3ZQorCQkgKiBjYW4gcGFzcyBkb3duIGFueSB0 YXJnZXQgdHlwZSB3ZSB3ZXJlIGdpdmVuLgorCQkgKi8KKwkJaWYgKElzQShlLCBBX0FycmF5RXhw cikpCisJCXsKKwkJCW5ld2UgPSB0cmFuc2Zvcm1BcnJheUV4cHJTYWZlKHBzdGF0ZSwoQV9BcnJh eUV4cHIgKikgZSwgYXJyYXlfdHlwZSwgZWxlbWVudF90eXBlLCB0eXBtb2QpOworCQkJLyogd2Ug Y2VydGFpbmx5IGhhdmUgYW4gYXJyYXkgaGVyZSAqLworCQkJQXNzZXJ0KGFycmF5X3R5cGUgPT0g SW52YWxpZE9pZCB8fCBhcnJheV90eXBlID09IGV4cHJUeXBlKG5ld2UpKTsKKwkJCW5ld2EtPm11 bHRpZGltcyA9IHRydWU7CisJCX0KKwkJZWxzZQorCQl7CisJCQluZXdlID0gdHJhbnNmb3JtRXhw clJlY3Vyc2UocHN0YXRlLCBlKTsKKworCQkJaWYgKCFuZXdhLT5tdWx0aWRpbXMpCisJCQl7CisJ CQkJT2lkCQkJbmV3ZXR5cGUgPSBleHByVHlwZShuZXdlKTsKKworCQkJCWlmIChuZXdldHlwZSAh PSBJTlQyVkVDVE9ST0lEICYmIG5ld2V0eXBlICE9IE9JRFZFQ1RPUk9JRCAmJgorCQkJCQl0eXBl X2lzX2FycmF5KG5ld2V0eXBlKSkKKwkJCQkJbmV3YS0+bXVsdGlkaW1zID0gdHJ1ZTsKKwkJCX0K KwkJfQorCisJCW5ld2VsZW1zID0gbGFwcGVuZChuZXdlbGVtcywgbmV3ZSk7CisJfQorCisJbmV3 YS0+YXJyYXlfdHlwZWlkID0gYXJyYXlfdHlwZTsKKwkvKiBhcnJheV9jb2xsaWQgd2lsbCBiZSBz ZXQgYnkgcGFyc2VfY29sbGF0ZS5jICovCisJbmV3YS0+ZWxlbWVudF90eXBlaWQgPSBlbGVtZW50 X3R5cGU7CisJbmV3YS0+ZWxlbWVudHMgPSBuZXdlbGVtczsKKwluZXdhLT5saXN0X3N0YXJ0ID0g YS0+bGlzdF9zdGFydDsKKwluZXdhLT5saXN0X2VuZCA9IC0xOworCW5ld2EtPmxvY2F0aW9uID0g LTE7CisKKwlyZXR1cm4gKE5vZGUgKikgbmV3YTsKK30KKwogLyoKICAqIHRyYW5zZm9ybUFycmF5 RXhwcgogICoKICAqIElmIHRoZSBjYWxsZXIgc3BlY2lmaWVzIHRoZSB0YXJnZXQgdHlwZSwgdGhl IHJlc3VsdGluZyBhcnJheSB3aWxsCiAgKiBiZSBvZiBleGFjdGx5IHRoYXQgdHlwZS4gIE90aGVy d2lzZSB3ZSB0cnkgdG8gaW5mZXIgYSBjb21tb24gdHlwZQogICogZm9yIHRoZSBlbGVtZW50cyB1 c2luZyBzZWxlY3RfY29tbW9uX3R5cGUoKS4KKyAqCisgKiBjYW5fY29lcmNlIGlzIG5vdCBudWxs IG9ubHkgd2hlbiBDQVNUKERFRkFVTFQuLi4gT04gQ09OVkVSU0lPTiBFUlJPUikgaXMKKyAqIHNw ZWNpZmllZC4gSWYgd2UgZm91bmQgb3V0IHdlIGNhbiBub3QgY2FzdCB0byB0YXJnZXQgdHlwZSBh bmQgY2FuX2NvZXJjZSBpcworICogbm90IG51bGwsIHJldHVybiBOVUxMIGVhcmxpZXIgYW5kIHNl dCBjYW5fY29lcmNlIHNldCBmYWxzZS4KICAqLwogc3RhdGljIE5vZGUgKgogdHJhbnNmb3JtQXJy YXlFeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQV9BcnJheUV4cHIgKmEsCi0JCQkJICAgT2lkIGFy cmF5X3R5cGUsIE9pZCBlbGVtZW50X3R5cGUsIGludDMyIHR5cG1vZCkKKwkJCQkgICBPaWQgYXJy YXlfdHlwZSwgT2lkIGVsZW1lbnRfdHlwZSwgaW50MzIgdHlwbW9kLCBib29sICpjYW5fY29lcmNl KQogewogCUFycmF5RXhwciAgKm5ld2EgPSBtYWtlTm9kZShBcnJheUV4cHIpOwogCUxpc3QJICAg Km5ld2VsZW1zID0gTklMOwpAQCAtMjA0NCw5ICsyMTY3LDEwIEBAIHRyYW5zZm9ybUFycmF5RXhw cihQYXJzZVN0YXRlICpwc3RhdGUsIEFfQXJyYXlFeHByICphLAogCQkJCQkJCQkJICAoQV9BcnJh eUV4cHIgKikgZSwKIAkJCQkJCQkJCSAgYXJyYXlfdHlwZSwKIAkJCQkJCQkJCSAgZWxlbWVudF90 eXBlLAotCQkJCQkJCQkJICB0eXBtb2QpOworCQkJCQkJCQkJICB0eXBtb2QsCisJCQkJCQkJCQkg IGNhbl9jb2VyY2UpOwogCQkJLyogd2UgY2VydGFpbmx5IGhhdmUgYW4gYXJyYXkgaGVyZSAqLwot CQkJQXNzZXJ0KGFycmF5X3R5cGUgPT0gSW52YWxpZE9pZCB8fCBhcnJheV90eXBlID09IGV4cHJU eXBlKG5ld2UpKTsKKwkJCUFzc2VydChjYW5fY29lcmNlIHx8IGFycmF5X3R5cGUgPT0gSW52YWxp ZE9pZCB8fCBhcnJheV90eXBlID09IGV4cHJUeXBlKG5ld2UpKTsKIAkJCW5ld2EtPm11bHRpZGlt cyA9IHRydWU7CiAJCX0KIAkJZWxzZQpAQCAtMjA3Miw2ICsyMTk2LDkgQEAgdHJhbnNmb3JtQXJy YXlFeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQV9BcnJheUV4cHIgKmEsCiAJCW5ld2VsZW1zID0g bGFwcGVuZChuZXdlbGVtcywgbmV3ZSk7CiAJfQogCisJaWYgKGNhbl9jb2VyY2UgJiYgISpjYW5f Y29lcmNlKQorCQlyZXR1cm4gTlVMTDsKKwogCS8qCiAJICogU2VsZWN0IGEgdGFyZ2V0IHR5cGUg Zm9yIHRoZSBlbGVtZW50cy4KIAkgKgpAQCAtMjEzOSw2ICsyMjY2LDE3IEBAIHRyYW5zZm9ybUFy cmF5RXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIEFfQXJyYXlFeHByICphLAogCQlOb2RlCSAgICpl ID0gKE5vZGUgKikgbGZpcnN0KGVsZW1lbnQpOwogCQlOb2RlCSAgICpuZXdlOwogCisJCWlmIChj YW5fY29lcmNlICYmICgqY2FuX2NvZXJjZSkgJiYgSXNBKGUsIENvbnN0KSAmJiBleHByVHlwZShl KSA9PSBVTktOT1dOT0lEKQorCQl7CisJCQlpZiAoIUNvdmVydFVua25vd25Db25zdFNhZmUocHN0 YXRlLCBlLCBjb2VyY2VfdHlwZSwgdHlwbW9kKSkKKwkJCXsKKwkJCQkqY2FuX2NvZXJjZSA9IGZh bHNlOworCQkJCWxpc3RfZnJlZShuZXdjb2VyY2VkZWxlbXMpOworCQkJCW5ld2NvZXJjZWRlbGVt cyA9IE5JTDsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJfQorCiAJCWlmIChjb2VyY2VfaGFy ZCkKIAkJewogCQkJbmV3ZSA9IGNvZXJjZV90b190YXJnZXRfdHlwZShwc3RhdGUsIGUsCkBAIC0y NzQyLDcgKzI4ODAsOCBAQCB0cmFuc2Zvcm1UeXBlQ2FzdChQYXJzZVN0YXRlICpwc3RhdGUsIFR5 cGVDYXN0ICp0YykKIAkJCQkJCQkJCSAgKEFfQXJyYXlFeHByICopIGFyZywKIAkJCQkJCQkJCSAg dGFyZ2V0QmFzZVR5cGUsCiAJCQkJCQkJCQkgIGVsZW1lbnRUeXBlLAotCQkJCQkJCQkJICB0YXJn ZXRCYXNlVHlwbW9kKTsKKwkJCQkJCQkJCSAgdGFyZ2V0QmFzZVR5cG1vZCwKKwkJCQkJCQkJCSAg TlVMTCk7CiAJCX0KIAkJZWxzZQogCQkJZXhwciA9IHRyYW5zZm9ybUV4cHJSZWN1cnNlKHBzdGF0 ZSwgYXJnKTsKQEAgLTI3NzksNiArMjkxOCwxNzEgQEAgdHJhbnNmb3JtVHlwZUNhc3QoUGFyc2VT dGF0ZSAqcHN0YXRlLCBUeXBlQ2FzdCAqdGMpCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorCisvKgor ICogSGFuZGxlIGFuIGV4cGxpY2l0IENBU1QoLi4uIERFRkFVTFQgLi4uIE9OIENPTlZFUlNJT04g RVJST1IpIGNvbnN0cnVjdC4KKyAqCisgKiBUcmFuc2Zvcm0gU2FmZVR5cGVDYXN0IG5vZGUsIGxv b2sgdXAgdGhlIHR5cGUgbmFtZSwgYW5kIGFwcGx5IGFueSBuZWNlc3NhcnkKKyAqIGNvZXJjaW9u IGZ1bmN0aW9uKHMpLgorICovCitzdGF0aWMgTm9kZSAqCit0cmFuc2Zvcm1UeXBlU2FmZUNhc3Qo UGFyc2VTdGF0ZSAqcHN0YXRlLCBTYWZlVHlwZUNhc3QgKnRjKQoreworCVNhZmVUeXBlQ2FzdEV4 cHIgICAqcmVzdWx0OworCU5vZGUJICAgKmRlZl9leHByOworCU5vZGUJICAgKmNhc3RfZXhwciA9 IE5VTEw7CisJTm9kZQkgICAqc291cmNlX2V4cHIgPSBOVUxMOworCU5vZGUJICAgKmFycmF5X2V4 cHIgPSBOVUxMOworCU9pZAkJCWlucHV0VHlwZSA9IEludmFsaWRPaWQ7CisJT2lkCQkJdGFyZ2V0 VHlwZTsKKwlpbnQzMgkJdGFyZ2V0VHlwbW9kOworCWludAkJCWxvY2F0aW9uOworCVR5cGVDYXN0 ICAgKnRjYXN0ID0gKFR5cGVDYXN0ICopIHRjLT5jYXN0OworCU5vZGUJICAgKnRjX2FyZyA9IHRj YXN0LT5hcmc7CisJYm9vbAkJY2FuX2NvZXJjZSA9IHRydWU7CisJaW50CQkJZGVmX2V4cHJfbG9j ID0gLTE7CisKKwlyZXN1bHQgPSBtYWtlTm9kZShTYWZlVHlwZUNhc3RFeHByKTsKKwkvKiBMb29r IHVwIHRoZSB0eXBlIG5hbWUgZmlyc3QgKi8KKwl0eXBlbmFtZVR5cGVJZEFuZE1vZChwc3RhdGUs IHRjYXN0LT50eXBlTmFtZSwgJnRhcmdldFR5cGUsICZ0YXJnZXRUeXBtb2QpOworCisJcmVzdWx0 LT5yZXN1bHR0eXBlID0gdGFyZ2V0VHlwZTsKKwlyZXN1bHQtPnJlc3VsdHR5cG1vZCA9IHRhcmdl dFR5cG1vZDsKKworCS8qIG5vdyBsb29raW5nIGF0IGNhc3QgZmFpbCBkZWZhdWx0IGV4cHJlc3Np b24gKi8KKwlkZWZfZXhwcl9sb2MgPSBleHByTG9jYXRpb24odGMtPmV4cHIpOworCWRlZl9leHBy ID0gdHJhbnNmb3JtRXhwclJlY3Vyc2UocHN0YXRlLCB0Yy0+ZXhwcik7CisKKwlpZiAoZXhwcmVz c2lvbl9yZXR1cm5zX3NldChkZWZfZXhwcikpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29k ZShFUlJDT0RFX0RBVEFUWVBFX01JU01BVENIKSwKKwkJCQllcnJtc2coIkRFRkFVTFQgZXhwcmVz c2lvbiBtdXN0IG5vdCByZXR1cm4gYSBzZXQiKSwKKwkJCQlwYXJzZXJfY29lcmNpb25fZXJycG9z aXRpb24ocHN0YXRlLCBkZWZfZXhwcl9sb2MsIGRlZl9leHByKSk7CisKKwlpZiAoSXNBKGRlZl9l eHByLCBBZ2dyZWYpIHx8IElzQShkZWZfZXhwciwgV2luZG93RnVuYykpCisJCWVyZXBvcnQoRVJS T1IsCisJCQkJZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJZXJy bXNnKCJERUZBVUxUIGV4cHJlc3Npb24gZnVuY3Rpb24gbXVzdCBiZSBhIG5vcm1hbCBmdW5jdGlv biIpLAorCQkJCXBhcnNlcl9jb2VyY2lvbl9lcnJwb3NpdGlvbihwc3RhdGUsIGRlZl9leHByX2xv YywgZGVmX2V4cHIpKTsKKworCWlmIChJc0EoZGVmX2V4cHIsIEZ1bmNFeHByKSkKKwl7CisJCWlm IChnZXRfZnVuY19wcm9raW5kKCgoRnVuY0V4cHIgKikgZGVmX2V4cHIpLT5mdW5jaWQpICE9IFBS T0tJTkRfRlVOQ1RJT04pCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQllcnJjb2RlKEVSUkNPREVf SU5WQUxJRF9PQkpFQ1RfREVGSU5JVElPTiksCisJCQkJCWVycm1zZygiREVGQVVMVCBleHByZXNz aW9uIGZ1bmN0aW9uIG11c3QgYmUgYSBub3JtYWwgZnVuY3Rpb24iKSwKKwkJCQkJcGFyc2VyX2Nv ZXJjaW9uX2VycnBvc2l0aW9uKHBzdGF0ZSwgZGVmX2V4cHJfbG9jLCBkZWZfZXhwcikpOworCX0K KworCWRlZl9leHByID0gY29lcmNlX3RvX3RhcmdldF90eXBlKHBzdGF0ZSwgZGVmX2V4cHIsIGV4 cHJUeXBlKGRlZl9leHByKSwKKwkJCQkJCQkJCSB0YXJnZXRUeXBlLCB0YXJnZXRUeXBtb2QsCisJ CQkJCQkJCQkgQ09FUkNJT05fRVhQTElDSVQsCisJCQkJCQkJCQkgQ09FUkNFX0VYUExJQ0lUX0NB U1QsCisJCQkJCQkJCQkgZXhwckxvY2F0aW9uKGRlZl9leHByKSk7CisJaWYgKGRlZl9leHByID09 IE5VTEwpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RFX0NBTk5PVF9DT0VS Q0UpLAorCQkJCWVycm1zZygiY2Fubm90IGNhc3Qgb25fZXJyb3IgZGVmYXVsdCBleHByZXNzaW9u IHRvIHR5cGUgJXMiLAorCQkJCQkJZm9ybWF0X3R5cGVfYmUodGFyZ2V0VHlwZSkpLAorCQkJCXBh cnNlcl9jb2VyY2lvbl9lcnJwb3NpdGlvbihwc3RhdGUsIGRlZl9leHByX2xvYywgZGVmX2V4cHIp KTsKKworCS8qCisJICogSWYgdGhlIHN1YmplY3Qgb2YgdGhlIHR5cGVjYXN0IGlzIGFuIEFSUkFZ W10gY29uc3RydWN0IGFuZCB0aGUgdGFyZ2V0CisJICogdHlwZSBpcyBhbiBhcnJheSB0eXBlLCB3 ZSBpbnZva2UgdHJhbnNmb3JtQXJyYXlFeHByKCkgZGlyZWN0bHkgc28gdGhhdAorCSAqIHdlIGNh biBwYXNzIGRvd24gdGhlIHR5cGUgaW5mb3JtYXRpb24uICBUaGlzIGF2b2lkcyBzb21lIGNhc2Vz IHdoZXJlCisJICogdHJhbnNmb3JtQXJyYXlFeHByKCkgbWlnaHQgbm90IGluZmVyIHRoZSBjb3Jy ZWN0IHR5cGUuICBPdGhlcndpc2UsIGp1c3QKKwkgKiB0cmFuc2Zvcm0gdGhlIGFyZ3VtZW50IG5v cm1hbGx5LgorCSAqLworCWlmIChJc0EodGNfYXJnLCBBX0FycmF5RXhwcikpCisJeworCQlPaWQJ CQl0YXJnZXRCYXNlVHlwZTsKKwkJaW50MzIJCXRhcmdldEJhc2VUeXBtb2Q7CisJCU9pZAkJCWVs ZW1lbnRUeXBlOworCisJCS8qCisJCSAqIElmIHRhcmdldCBpcyBhIGRvbWFpbiBvdmVyIGFycmF5 LCB3b3JrIHdpdGggdGhlIGJhc2UgYXJyYXkgdHlwZQorCQkgKiBoZXJlLiAgQmVsb3csIHdlJ2xs IGNhc3QgdGhlIGFycmF5IHR5cGUgdG8gdGhlIGRvbWFpbi4gIEluIHRoZQorCQkgKiB1c3VhbCBj YXNlIHRoYXQgdGhlIHRhcmdldCBpcyBub3QgYSBkb21haW4sIHRoZSByZW1haW5pbmcgc3RlcHMK KwkJICogd2lsbCBiZSBhIG5vLW9wLgorCQkgKi8KKwkJdGFyZ2V0QmFzZVR5cG1vZCA9IHRhcmdl dFR5cG1vZDsKKwkJdGFyZ2V0QmFzZVR5cGUgPSBnZXRCYXNlVHlwZUFuZFR5cG1vZCh0YXJnZXRU eXBlLCAmdGFyZ2V0QmFzZVR5cG1vZCk7CisJCWVsZW1lbnRUeXBlID0gZ2V0X2VsZW1lbnRfdHlw ZSh0YXJnZXRCYXNlVHlwZSk7CisKKwkJaWYgKE9pZElzVmFsaWQoZWxlbWVudFR5cGUpKQorCQl7 CisJCQlhcnJheV9leHByID0gY29weU9iamVjdCh0Y19hcmcpOworCisJCQlzb3VyY2VfZXhwciA9 IHRyYW5zZm9ybUFycmF5RXhwcihwc3RhdGUsCisJCQkJCQkJCQkJCSAoQV9BcnJheUV4cHIgKikg dGNfYXJnLAorCQkJCQkJCQkJCQkgdGFyZ2V0QmFzZVR5cGUsCisJCQkJCQkJCQkJCSBlbGVtZW50 VHlwZSwKKwkJCQkJCQkJCQkJIHRhcmdldEJhc2VUeXBtb2QsCisJCQkJCQkJCQkJCSAmY2FuX2Nv ZXJjZSk7CisJCQlpZiAoIWNhbl9jb2VyY2UpCisJCQkJc291cmNlX2V4cHIgPSAgdHJhbnNmb3Jt QXJyYXlFeHByU2FmZShwc3RhdGUsCisJCQkJCQkJCQkJCQkJICAoQV9BcnJheUV4cHIgKikgYXJy YXlfZXhwciwKKwkJCQkJCQkJCQkJCQkgIHRhcmdldEJhc2VUeXBlLAorCQkJCQkJCQkJCQkJCSAg ZWxlbWVudFR5cGUsCisJCQkJCQkJCQkJCQkJICB0YXJnZXRCYXNlVHlwbW9kKTsKKwkJfQorCQll bHNlCisJCQlzb3VyY2VfZXhwciA9IHRyYW5zZm9ybUV4cHJSZWN1cnNlKHBzdGF0ZSwgdGNfYXJn KTsKKwl9CisJZWxzZQorCQlzb3VyY2VfZXhwciA9IHRyYW5zZm9ybUV4cHJSZWN1cnNlKHBzdGF0 ZSwgdGNfYXJnKTsKKworCWlucHV0VHlwZSA9IGV4cHJUeXBlKHNvdXJjZV9leHByKTsKKwlpZiAo aW5wdXRUeXBlID09IEludmFsaWRPaWQgJiYgY2FuX2NvZXJjZSkKKwkJcmV0dXJuIChOb2RlICop IHJlc3VsdDsJCQkvKiBkbyBub3RoaW5nIGlmIE5VTEwgaW5wdXQgKi8KKworCisJaWYgKGNhbl9j b2VyY2UgJiYgSXNBKHNvdXJjZV9leHByLCBDb25zdCkgJiYgZXhwclR5cGUoc291cmNlX2V4cHIp ID09IFVOS05PV05PSUQpCisJCWNhbl9jb2VyY2UgPSBDb3ZlcnRVbmtub3duQ29uc3RTYWZlKHBz dGF0ZSwKKwkJCQkJCQkJCQkJc291cmNlX2V4cHIsCisJCQkJCQkJCQkJCXRhcmdldFR5cGUsCisJ CQkJCQkJCQkJCXRhcmdldFR5cG1vZCk7CisKKwkvKgorCSAqIExvY2F0aW9uIG9mIHRoZSBjb2Vy Y2lvbiBpcyBwcmVmZXJlbnRpYWxseSB0aGUgbG9jYXRpb24gb2YgdGhlIDo6IG9yCisJICogQ0FT VCBzeW1ib2wsIGJ1dCBpZiB0aGVyZSBpcyBub25lIHRoZW4gdXNlIHRoZSBsb2NhdGlvbiBvZiB0 aGUgdHlwZQorCSAqIG5hbWUgKHRoaXMgY2FuIGhhcHBlbiBpbiBUeXBlTmFtZSAnc3RyaW5nJyBz eW50YXgsIGZvciBpbnN0YW5jZSkuCisJICovCisJbG9jYXRpb24gPSB0Y2FzdC0+bG9jYXRpb247 CisJaWYgKGxvY2F0aW9uIDwgMCkKKwkJbG9jYXRpb24gPSB0Y2FzdC0+dHlwZU5hbWUtPmxvY2F0 aW9uOworCisJaWYgKGNhbl9jb2VyY2UpCisJeworCQlPaWQJCWlucHV0YmFzZSA9IGdldEJhc2VU eXBlKGlucHV0VHlwZSk7CisJCU9pZCAJdGFyZ2V0YmFzZSA9IGdldEJhc2VUeXBlKHRhcmdldFR5 cGUpOworCisJCS8qCisJCSAqIEl0J3MgaGFyZCB0byBtYWtlIGZ1bmN0aW9uIG51bWVyaWNfY2Fz aCBlcnJvciBzYWZlLCBlc3BlY2lhbGx5IGNhbGxlZQorCQkgKiBudW1lcmljX211bC4gU28gd2Ug aGF2ZSB0byBkaXNhbGxvdyBzYWZlIGNhc3QgZnJvbSBudW1lcmljIHRvIG1vbmV5CisJCSAqLwor CQlpZiAoaW5wdXRiYXNlID09IE5VTUVSSUNPSUQgJiYgdGFyZ2V0YmFzZSA9PSBNT05FWU9JRCkK KwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCWVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQ T1JURUQpLAorCQkJCQllcnJtc2coImNhbm5vdCBjYXN0IHR5cGUgJXMgdG8gJXMgd2hlbiAlcyBj bGF1c2UgYmVoYXZpb3IgaXMgbm90ICVzIiwKKwkJCQkJCSAgIGZvcm1hdF90eXBlX2JlKGlucHV0 VHlwZSksCisJCQkJCQkgICBmb3JtYXRfdHlwZV9iZSh0YXJnZXRUeXBlKSwKKwkJCQkJCSAgICJD QVNUIC4uLiBPTiBDT05WRVJTSU9OIEVSUk9SIiwgIkVSUk9SIiksCisJCQkJCXBhcnNlcl9lcnJw b3NpdGlvbihwc3RhdGUsIGV4cHJMb2NhdGlvbihzb3VyY2VfZXhwcikpKTsKKwkJY2FzdF9leHBy ID0gY29lcmNlX3RvX3RhcmdldF90eXBlKHBzdGF0ZSwgc291cmNlX2V4cHIsIGlucHV0VHlwZSwK KwkJCQkJCQkJCQkgIHRhcmdldFR5cGUsIHRhcmdldFR5cG1vZCwKKwkJCQkJCQkJCQkgIENPRVJD SU9OX0VYUExJQ0lULAorCQkJCQkJCQkJCSAgQ09FUkNFX0VYUExJQ0lUX0NBU1QsCisJCQkJCQkJ CQkJICBsb2NhdGlvbik7CisJfQorCisJcmVzdWx0LT5zb3VyY2VfZXhwciA9IHNvdXJjZV9leHBy OworCXJlc3VsdC0+Y2FzdF9leHByID0gY2FzdF9leHByOworCXJlc3VsdC0+ZGVmYXVsdF9leHBy ID0gZGVmX2V4cHI7CisKKwlyZXR1cm4gKE5vZGUgKikgcmVzdWx0OworfQorCiAvKgogICogSGFu ZGxlIGFuIGV4cGxpY2l0IENPTExBVEUgY2xhdXNlLgogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3BhcnNlci9wYXJzZV90YXJnZXQuYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV90YXJn ZXQuYwppbmRleCA0YWJhMGQ5ZDRkNS4uODEyZWQxOGMxNjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3BhcnNlci9wYXJzZV90YXJnZXQuYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2Vf dGFyZ2V0LmMKQEAgLTE4MjMsNiArMTgyMywyMCBAQCBGaWd1cmVDb2xuYW1lSW50ZXJuYWwoTm9k ZSAqbm9kZSwgY2hhciAqKm5hbWUpCiAJCQkJfQogCQkJfQogCQkJYnJlYWs7CisJCWNhc2UgVF9T YWZlVHlwZUNhc3Q6CisJCQlzdHJlbmd0aCA9IEZpZ3VyZUNvbG5hbWVJbnRlcm5hbCgoKFNhZmVU eXBlQ2FzdCAqKSBub2RlKS0+Y2FzdCwKKwkJCQkJCQkJCQkJIG5hbWUpOworCQkJaWYgKHN0cmVu Z3RoIDw9IDEpCisJCQl7CisJCQkJVHlwZUNhc3QgKm5vZGVfY2FzdDsKKwkJCQlub2RlX2Nhc3Qg PSAoVHlwZUNhc3QgKikoKFNhZmVUeXBlQ2FzdCAqKSBub2RlKS0+Y2FzdDsKKwkJCQlpZiAobm9k ZV9jYXN0LT50eXBlTmFtZSAhPSBOVUxMKQorCQkJCXsKKwkJCQkJKm5hbWUgPSBzdHJWYWwobGxh c3Qobm9kZV9jYXN0LT50eXBlTmFtZS0+bmFtZXMpKTsKKwkJCQkJcmV0dXJuIDE7CisJCQkJfQor CQkJfQorCQkJYnJlYWs7CiAJCWNhc2UgVF9Db2xsYXRlQ2xhdXNlOgogCQkJcmV0dXJuIEZpZ3Vy ZUNvbG5hbWVJbnRlcm5hbCgoKENvbGxhdGVDbGF1c2UgKikgbm9kZSktPmFyZywgbmFtZSk7CiAJ CWNhc2UgVF9Hcm91cGluZ0Z1bmM6CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFy c2VfdHlwZS5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3R5cGUuYwppbmRleCA3NzEzYmRj NmFmMC4uMDJlNWY5YzkyZDcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV90 eXBlLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3R5cGUuYwpAQCAtMTksNiArMTks NyBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgogI2luY2x1ZGUgImxpYi9zdHJpbmdp bmZvLmgiCiAjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCisjaW5jbHVkZSAibm9kZXMvbWlz Y25vZGVzLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX3R5cGUuaCIKICNpbmNsdWRlICJwYXJz ZXIvcGFyc2VyLmgiCiAjaW5jbHVkZSAidXRpbHMvYXJyYXkuaCIKQEAgLTY2MCw2ICs2NjEsMTgg QEAgc3RyaW5nVHlwZURhdHVtKFR5cGUgdHAsIGNoYXIgKnN0cmluZywgaW50MzIgYXR0dHlwbW9k KQogCXJldHVybiBPaWRJbnB1dEZ1bmN0aW9uQ2FsbCh0eXBpbnB1dCwgc3RyaW5nLCB0eXBpb3Bh cmFtLCBhdHR0eXBtb2QpOwogfQogCitib29sCitzdHJpbmdUeXBlRGF0dW1TYWZlKFR5cGUgdHAs IGNoYXIgKnN0cmluZywgaW50MzIgYXR0dHlwbW9kLCBEYXR1bSAqcmVzdWx0KQoreworCUZvcm1f cGdfdHlwZSB0eXBmb3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHRwKTsKKwlPaWQJCQl0 eXBpbnB1dCA9IHR5cGZvcm0tPnR5cGlucHV0OworCU9pZAkJCXR5cGlvcGFyYW0gPSBnZXRUeXBl SU9QYXJhbSh0cCk7CisJRXJyb3JTYXZlQ29udGV4dCBlc2NvbnRleHQgPSB7VF9FcnJvclNhdmVD b250ZXh0fTsKKworCXJldHVybiBPaWRJbnB1dEZ1bmN0aW9uQ2FsbFNhZmUodHlwaW5wdXQsIHN0 cmluZywgdHlwaW9wYXJhbSwgYXR0dHlwbW9kLAorCQkJCQkJCQkJKGZtTm9kZVB0cikgJmVzY29u dGV4dCwgcmVzdWx0KTsKK30KKwogLyoKICAqIEdpdmVuIGEgdHlwZWlkLCByZXR1cm4gdGhlIHR5 cGUncyB0eXByZWxpZCAoYXNzb2NpYXRlZCByZWxhdGlvbiksIGlmIGFueS4KICAqIFJldHVybnMg SW52YWxpZE9pZCBpZiB0eXBlIGlzIG5vdCBhIGNvbXBvc2l0ZSB0eXBlLgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FycmF5ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9hcnJheWZ1bmNzLmMKaW5kZXggYjVmOThiZjIyZjkuLjZiZDhhOTg5ZGJkIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC91dGlscy9hZHQvYXJyYXlmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9hcnJheWZ1bmNzLmMKQEAgLTMyOTUsNiArMzI5NSwxMiBAQCBhcnJheV9tYXAoRGF0 dW0gYXJyYXlkLAogCQkJcmV0dXJuIChEYXR1bSkgMDsKIAkJfQogCisJCWlmIChTT0ZUX0VSUk9S X09DQ1VSUkVEKGV4cHJzdGF0ZS0+ZXNjb250ZXh0KSkKKwkJeworCQkJcGZyZWUodmFsdWVzKTsK KwkJCXBmcmVlKG51bGxzKTsKKwkJCXJldHVybiAoRGF0dW0pIDA7CisJCX0KIAkJaWYgKG51bGxz W2ldKQogCQkJaGFzbnVsbHMgPSB0cnVlOwogCQllbHNlCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC91dGlscy9hZHQvcnVsZXV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxz LmMKaW5kZXggM2Q2ZTZiZGJmZDIuLmVlODY4ZGUyYzY0IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1 dGlscy5jCkBAIC0xMDUzNCw2ICsxMDUzNCwyMSBAQCBnZXRfcnVsZV9leHByKE5vZGUgKm5vZGUs IGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwKIAkJCX0KIAkJCWJyZWFrOwogCisJCWNhc2UgVF9T YWZlVHlwZUNhc3RFeHByOgorCQkJeworCQkJCVNhZmVUeXBlQ2FzdEV4cHIgICAqc3RjZXhwciA9 IGNhc3ROb2RlKFNhZmVUeXBlQ2FzdEV4cHIsIG5vZGUpOworCisJCQkJYXBwZW5kU3RyaW5nSW5m b1N0cmluZyhidWYsICJDQVNUKCIpOworCQkJCWdldF9ydWxlX2V4cHIoc3RjZXhwci0+c291cmNl X2V4cHIsIGNvbnRleHQsIHNob3dpbXBsaWNpdCk7CisKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1 ZiwgIiBBUyAlcyAiLAorCQkJCQkJCQkgZm9ybWF0X3R5cGVfd2l0aF90eXBlbW9kKHN0Y2V4cHIt PnJlc3VsdHR5cGUsIHN0Y2V4cHItPnJlc3VsdHR5cG1vZCkpOworCisJCQkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZyhidWYsICJERUZBVUxUICIpOworCQkJCWdldF9ydWxlX2V4cHIoc3RjZXhwci0+ ZGVmYXVsdF9leHByLCBjb250ZXh0LCBzaG93aW1wbGljaXQpOworCQkJCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcoYnVmLCAiIE9OIENPTlZFUlNJT04gRVJST1IpIik7CisJCQl9CisJCQlicmVhazsK IAkJY2FzZSBUX0pzb25FeHByOgogCQkJewogCQkJCUpzb25FeHByICAgKmpleHByID0gKEpzb25F eHByICopIG5vZGU7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9mbWdyL2ZtZ3IuYyBi L3NyYy9iYWNrZW5kL3V0aWxzL2ZtZ3IvZm1nci5jCmluZGV4IDc4MjI5MWQ5OTk4Li45ZGU4OTVl NjgyZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvZm1nci9mbWdyLmMKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvZm1nci9mbWdyLmMKQEAgLTE3NTksNiArMTc1OSwxOSBAQCBPaWRJbnB1 dEZ1bmN0aW9uQ2FsbChPaWQgZnVuY3Rpb25JZCwgY2hhciAqc3RyLCBPaWQgdHlwaW9wYXJhbSwg aW50MzIgdHlwbW9kKQogCXJldHVybiBJbnB1dEZ1bmN0aW9uQ2FsbCgmZmxpbmZvLCBzdHIsIHR5 cGlvcGFyYW0sIHR5cG1vZCk7CiB9CiAKK2Jvb2wKK09pZElucHV0RnVuY3Rpb25DYWxsU2FmZShP aWQgZnVuY3Rpb25JZCwgY2hhciAqc3RyLCBPaWQgdHlwaW9wYXJhbSwKKwkJCQkJCSBpbnQzMiB0 eXBtb2QsIGZtTm9kZVB0ciBlc2NvbnRleHQsCisJCQkJCQkgRGF0dW0gKnJlc3VsdCkKK3sKKwlG bWdySW5mbwkJCWZsaW5mbzsKKworCWZtZ3JfaW5mbyhmdW5jdGlvbklkLCAmZmxpbmZvKTsKKwor CXJldHVybiBJbnB1dEZ1bmN0aW9uQ2FsbFNhZmUoJmZsaW5mbywgc3RyLCB0eXBpb3BhcmFtLCB0 eXBtb2QsCisJCQkJCQkJCSBlc2NvbnRleHQsIHJlc3VsdCk7Cit9CisKIGNoYXIgKgogT2lkT3V0 cHV0RnVuY3Rpb25DYWxsKE9pZCBmdW5jdGlvbklkLCBEYXR1bSB2YWwpCiB7CmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3Iv ZXhlY0V4cHIuaAppbmRleCA3NTM2NjIwMzcwNi4uMGFmY2YwOWMwODYgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNFeHByLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3Iv ZXhlY0V4cHIuaApAQCAtMjY1LDYgKzI2NSw3IEBAIHR5cGVkZWYgZW51bSBFeHByRXZhbE9wCiAJ RUVPUF9YTUxFWFBSLAogCUVFT1BfSlNPTl9DT05TVFJVQ1RPUiwKIAlFRU9QX0lTX0pTT04sCisJ RUVPUF9TQUZFVFlQRV9DQVNULAogCUVFT1BfSlNPTkVYUFJfUEFUSCwKIAlFRU9QX0pTT05FWFBS X0NPRVJDSU9OLAogCUVFT1BfSlNPTkVYUFJfQ09FUkNJT05fRklOSVNILApAQCAtNzUwLDYgKzc1 MSwxMiBAQCB0eXBlZGVmIHN0cnVjdCBFeHByRXZhbFN0ZXAKIAkJCUpzb25Jc1ByZWRpY2F0ZSAq cHJlZDsJLyogb3JpZ2luYWwgZXhwcmVzc2lvbiBub2RlICovCiAJCX0JCQlpc19qc29uOwogCisJ CS8qIGZvciBFRU9QX1NBRkVDQVNUICovCisJCXN0cnVjdAorCQl7CisJCQlzdHJ1Y3QgU2FmZVR5 cGVDYXN0U3RhdGUgKnN0Y3N0YXRlOwkvKiBvcmlnaW5hbCBleHByZXNzaW9uIG5vZGUgKi8KKwkJ fQkJCXN0Y2V4cHI7CisKIAkJLyogZm9yIEVFT1BfSlNPTkVYUFJfUEFUSCAqLwogCQlzdHJ1Y3QK IAkJewpAQCAtODkyLDYgKzg5OSw3IEBAIGV4dGVybiBpbnQJRXhlY0V2YWxKc29uRXhwclBhdGgo RXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwKIAkJCQkJCQkJIEV4cHJDb250ZXh0 ICplY29udGV4dCk7CiBleHRlcm4gdm9pZCBFeGVjRXZhbEpzb25Db2VyY2lvbihFeHByU3RhdGUg KnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wLAogCQkJCQkJCQkgRXhwckNvbnRleHQgKmVjb250ZXh0 KTsKK2ludCBFeGVjRXZhbFNhZmVUeXBlQ2FzdChFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0 ZXAgKm9wKTsKIGV4dGVybiB2b2lkIEV4ZWNFdmFsSnNvbkNvZXJjaW9uRmluaXNoKEV4cHJTdGF0 ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3ApOwogZXh0ZXJuIHZvaWQgRXhlY0V2YWxHcm91cGlu Z0Z1bmMoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCk7CiBleHRlcm4gdm9pZCBF eGVjRXZhbE1lcmdlU3VwcG9ydEZ1bmMoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpv cCwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2ZtZ3IuaCBiL3NyYy9pbmNsdWRlL2ZtZ3IuaApp bmRleCAwZmU3YjRlYmM3Ny4uMjk5ZDRlZWY0ZWQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Zt Z3IuaAorKysgYi9zcmMvaW5jbHVkZS9mbWdyLmgKQEAgLTc1MCw2ICs3NTAsOSBAQCBleHRlcm4g Ym9vbCBEaXJlY3RJbnB1dEZ1bmN0aW9uQ2FsbFNhZmUoUEdGdW5jdGlvbiBmdW5jLCBjaGFyICpz dHIsCiAJCQkJCQkJCQkJRGF0dW0gKnJlc3VsdCk7CiBleHRlcm4gRGF0dW0gT2lkSW5wdXRGdW5j dGlvbkNhbGwoT2lkIGZ1bmN0aW9uSWQsIGNoYXIgKnN0ciwKIAkJCQkJCQkJICBPaWQgdHlwaW9w YXJhbSwgaW50MzIgdHlwbW9kKTsKK2V4dGVybiBib29sIE9pZElucHV0RnVuY3Rpb25DYWxsU2Fm ZShPaWQgZnVuY3Rpb25JZCwgY2hhciAqc3RyLCBPaWQgdHlwaW9wYXJhbSwKKwkJCQkJCQkJCSBp bnQzMiB0eXBtb2QsIGZtTm9kZVB0ciBlc2NvbnRleHQsCisJCQkJCQkJCQkgRGF0dW0gKnJlc3Vs dCk7CiBleHRlcm4gY2hhciAqT3V0cHV0RnVuY3Rpb25DYWxsKEZtZ3JJbmZvICpmbGluZm8sIERh dHVtIHZhbCk7CiBleHRlcm4gY2hhciAqT2lkT3V0cHV0RnVuY3Rpb25DYWxsKE9pZCBmdW5jdGlv bklkLCBEYXR1bSB2YWwpOwogZXh0ZXJuIERhdHVtIFJlY2VpdmVGdW5jdGlvbkNhbGwoRm1ncklu Zm8gKmZsaW5mbywgZm1TdHJpbmdJbmZvIGJ1ZiwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25v ZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXggZTEw N2Q2ZTVmODEuLjI4MmJmYTc3MGVmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVj bm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtMTA1OCw2ICsx MDU4LDM2IEBAIHR5cGVkZWYgc3RydWN0IERvbWFpbkNvbnN0cmFpbnRTdGF0ZQogCUV4cHJTdGF0 ZSAgKmNoZWNrX2V4cHJzdGF0ZTsJLyogY2hlY2tfZXhwcidzIGV2YWwgc3RhdGUsIG9yIE5VTEwg Ki8KIH0gRG9tYWluQ29uc3RyYWludFN0YXRlOwogCit0eXBlZGVmIHN0cnVjdCBTYWZlVHlwZUNh c3RTdGF0ZQoreworCVNhZmVUeXBlQ2FzdEV4cHIgKnN0Y2V4cHI7CisKKwkvKiBTZXQgdG8gdHJ1 ZSBpZiB0eXBlIGNhc3QgY2F1c2UgYW4gZXJyb3IuICovCisJTnVsbGFibGVEYXR1bSBlcnJvcjsK KworCS8qCisJICogQWRkcmVzc2VzIG9mIHN0ZXBzIHRoYXQgaW1wbGVtZW50IERFRkFVTFQgZXhw ciBPTiBDT05WRVJTSU9OIEVSUk9SIGZvcgorCSAqIHNhZmUgdHlwZSBjYXN0LgorCSAqLworCWlu dCAJCWp1bXBfZXJyb3I7CisKKwkvKgorCSAqIEFkZHJlc3MgdG8ganVtcCB0byB3aGVuIHNraXBw aW5nIGFsbCB0aGUgc3RlcHMgdG8gZXZhdWxhdGUgdGhlIGRlZmF1bHQKKwkgKiBleHByZXNzaW9u IGFmdGVyIHBlcmZvcm1pbmcgRXhlY0V2YWxTYWZlVHlwZUNhc3QoKS4KKwkgKi8KKwlpbnQgCQlq dW1wX2VuZDsKKworCS8qCisJICogRm9yIGVycm9yLXNhZmUgZXZhbHVhdGlvbiBvZiBjb2VyY2lv bnMuICBXaGVuIERFRkFVTFQgZXhwciBPTiBDT05WRVJTSU9OCisJICogT04gRVJST1IgaXMgc3Bl Y2lmaWVkLCBhIHBvaW50ZXIgdG8gdGhpcyBpcyBwYXNzZWQgdG8gRXhlY0luaXRFeHByUmVjKCkK KwkgKiB3aGVuIGluaXRpYWxpemluZyB0aGUgY29lcmNpb24gZXhwcmVzc2lvbnMsIHNlZSBFeGVj SW5pdFNhZmVUeXBlQ2FzdEV4cHIuCisJICoKKwkgKiBSZXNldCBmb3IgZWFjaCBldmFsdWF0aW9u IG9mIEVFT1BfU0FGRVRZUEVfQ0FTVC4KKwkgKi8KKwlFcnJvclNhdmVDb250ZXh0IGVzY29udGV4 dDsKKworfSBTYWZlVHlwZUNhc3RTdGF0ZTsKKwogLyoKICAqIFN0YXRlIGZvciBKc29uRXhwciBl dmFsdWF0aW9uLCB0b28gYmlnIHRvIGlubGluZS4KICAqCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9ub2Rlcy9wYXJzZW5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKaW5k ZXggODZhMjM2YmQ1OGIuLjk1MTc0ZTBmZWVmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rl cy9wYXJzZW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCkBAIC0z OTksNiArMzk5LDEyIEBAIHR5cGVkZWYgc3RydWN0IFR5cGVDYXN0CiAJUGFyc2VMb2MJbG9jYXRp b247CQkvKiB0b2tlbiBsb2NhdGlvbiwgb3IgLTEgaWYgdW5rbm93biAqLwogfSBUeXBlQ2FzdDsK IAordHlwZWRlZiBzdHJ1Y3QgU2FmZVR5cGVDYXN0Cit7CisJTm9kZVRhZwkJdHlwZTsKKwlOb2Rl CQkqY2FzdDsKKwlOb2RlCSAgIAkqZXhwcjsJCS8qIGRlZmF1bHQgZXhwciAqLworfSBTYWZlVHlw ZUNhc3Q7CiAvKgogICogQ29sbGF0ZUNsYXVzZSAtIGEgQ09MTEFURSBleHByZXNzaW9uCiAgKi8K ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oIGIvc3JjL2luY2x1ZGUv bm9kZXMvcHJpbW5vZGVzLmgKaW5kZXggNmRmY2EzY2IzNWIuLmQyZGY3YzI4OTMyIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rl cy9wcmltbm9kZXMuaApAQCAtNzU2LDYgKzc1Niw0MSBAQCB0eXBlZGVmIGVudW0gQ29lcmNpb25G b3JtCiAJQ09FUkNFX1NRTF9TWU5UQVgsCQkJLyogZGlzcGxheSB3aXRoIFNRTC1tYW5kYXRlZCBz cGVjaWFsIHN5bnRheCAqLwogfSBDb2VyY2lvbkZvcm07CiAKKy8qCisgKiBTYWZlVHlwZUNhc3RF eHByIC0KKyAqCQlUcmFuc2Zvcm1lZCByZXByZXNlbnRhdGlvbiBvZgorICogQ0FTVChleHByIEFT IHR5cGVuYW1lIERFRkFVTFQgZXhwcjIgT04gRVJST1IpCisgKiBDQVNUKGV4cHIgQVMgdHlwZW5h bWUgTlVMTCBPTiBFUlJPUikKKyAqLwordHlwZWRlZiBzdHJ1Y3QgU2FmZVR5cGVDYXN0RXhwcgor eworCXBnX25vZGVfYXR0cihjdXN0b21fcXVlcnlfanVtYmxlKQorCisJRXhwcgkJeHByOworCisJ LyogdHJhbnNmb3JtZWQgZXhwcmVzc2lvbiBiZWluZyBjYXN0ZWQgKi8KKwlOb2RlCSAgICpzb3Vy Y2VfZXhwcjsKKworCS8qCisJICogVGhlIHRyYW5zZm9ybWVkIGNhc3QgZXhwcmVzc2lvbjsgdGhp cyBtYXkgYmUgTlVMTCBpZiB0aGUgdHdvIHR5cGVzIGNhbid0CisJICogYmUgY2FzdC4KKwkgKi8K KwlOb2RlCSAgICpjYXN0X2V4cHI7CisKKwkvKiBGYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgZXhw cmVzc2lvbiBpZiB0aGUgY2FzdCBldmFsdWF0aW9uIGZhaWxzLiAqLworCU5vZGUJICAgKmRlZmF1 bHRfZXhwcjsKKworCS8qIGNhc3QgcmVzdWx0IGRhdGEgdHlwZSAqLworCU9pZAkJCXJlc3VsdHR5 cGUgcGdfbm9kZV9hdHRyKHF1ZXJ5X2p1bWJsZV9pZ25vcmUpOworCisJLyogY2FzdCByZXN1bHQg ZGF0YSB0eXBlIHR5cG1vZCAodXN1YWxseSAtMSkgKi8KKwlpbnQzMgkJcmVzdWx0dHlwbW9kIHBn X25vZGVfYXR0cihxdWVyeV9qdW1ibGVfaWdub3JlKTsKKworCS8qIGNhc3QgcmVzdWx0IGRhdGEg dHlwZSBjb2xsYXRpb24gKHVzdWFsbHkgLTEpICovCisJT2lkCQkJcmVzdWx0Y29sbGlkIHBnX25v ZGVfYXR0cihxdWVyeV9qdW1ibGVfaWdub3JlKTsKKworfSBTYWZlVHlwZUNhc3RFeHByOworCiAv KgogICogRnVuY0V4cHIgLSBleHByZXNzaW9uIG5vZGUgZm9yIGEgZnVuY3Rpb24gY2FsbAogICoK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3BhcnNlci9wYXJzZV90eXBlLmggYi9zcmMvaW5jbHVk ZS9wYXJzZXIvcGFyc2VfdHlwZS5oCmluZGV4IDBkOTE5ZDhiZmEyLi4xMjM4MWFlZDY0YyAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvcGFyc2VyL3BhcnNlX3R5cGUuaAorKysgYi9zcmMvaW5jbHVk ZS9wYXJzZXIvcGFyc2VfdHlwZS5oCkBAIC00Nyw2ICs0Nyw4IEBAIGV4dGVybiBjaGFyICp0eXBl VHlwZU5hbWUoVHlwZSB0KTsKIGV4dGVybiBPaWQJdHlwZVR5cGVSZWxpZChUeXBlIHR5cCk7CiBl eHRlcm4gT2lkCXR5cGVUeXBlQ29sbGF0aW9uKFR5cGUgdHlwKTsKIGV4dGVybiBEYXR1bSBzdHJp bmdUeXBlRGF0dW0oVHlwZSB0cCwgY2hhciAqc3RyaW5nLCBpbnQzMiBhdHR0eXBtb2QpOworZXh0 ZXJuIGJvb2wgc3RyaW5nVHlwZURhdHVtU2FmZShUeXBlIHRwLCBjaGFyICpzdHJpbmcsIGludDMy IGF0dHR5cG1vZCwKKwkJCQkJCQkJRGF0dW0gKnJlc3VsdCk7CiAKIGV4dGVybiBPaWQJdHlwZWlk VHlwZVJlbGlkKE9pZCB0eXBlX2lkKTsKIGV4dGVybiBPaWQJdHlwZU9yRG9tYWluVHlwZVJlbGlk KE9pZCB0eXBlX2lkKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY2Fz dC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2Nhc3Qub3V0Cm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yOTE1ZTZkN2EzYQotLS0gL2Rldi9udWxsCisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY2FzdC5vdXQKQEAgLTAsMCArMSwyMzAgQEAKK1NF VCBleHRyYV9mbG9hdF9kaWdpdHMgPSAwOworLS0gQ0FTVCBERUZBVUxUIE9OIENPTlZFUlNJT04g RVJST1IKK1ZBTFVFUyAoQ0FTVCgnZXJyb3InIEFTIGludGVnZXIgRVJST1IgT04gQ09OVkVSU0lP TiBFUlJPUikpOyAtLWVycm9yCitFUlJPUjogIGludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBl IGludGVnZXI6ICJlcnJvciIKK0xJTkUgMTogVkFMVUVTIChDQVNUKCdlcnJvcicgQVMgaW50ZWdl ciBFUlJPUiBPTiBDT05WRVJTSU9OIEVSUk9SKSk7CisgICAgICAgICAgICAgICAgICAgICBeCitW QUxVRVMgKENBU1QoJ2Vycm9yJyBBUyBpbnRlZ2VyIE5VTEwgT04gQ09OVkVSU0lPTiBFUlJPUikp OworIGNvbHVtbjEgCistLS0tLS0tLS0KKyAgICAgICAgCisoMSByb3cpCisKK1ZBTFVFUyAoQ0FT VCgnZXJyb3InIEFTIGludGVnZXIgREVGQVVMVCA0MiBPTiBDT05WRVJTSU9OIEVSUk9SKSk7Cisg Y29sdW1uMSAKKy0tLS0tLS0tLQorICAgICAgNDIKKygxIHJvdykKKworU0VMRUNUIENBU1QoMSBB UyBkYXRlIERFRkFVTFQgTlVMTCBPTiBDT05WRVJTSU9OIEVSUk9SKTsKKyBkYXRlIAorLS0tLS0t CisgCisoMSByb3cpCisKK1NFTEVDVCBDQVNUKDE6Om51bWVyaWMgQVMgbW9uZXkgREVGQVVMVCBO VUxMIE9OIENPTlZFUlNJT04gRVJST1IpOworRVJST1I6ICBjYW5ub3QgY2FzdCB0eXBlIG51bWVy aWMgdG8gbW9uZXkgd2hlbiBDQVNUIC4uLiBPTiBDT05WRVJTSU9OIEVSUk9SIGNsYXVzZSBiZWhh dmlvciBpcyBub3QgRVJST1IKK0xJTkUgMTogU0VMRUNUIENBU1QoMTo6bnVtZXJpYyBBUyBtb25l eSBERUZBVUxUIE5VTEwgT04gQ09OVkVSU0lPTiBFLi4uCisgICAgICAgICAgICAgICAgICAgIF4K K0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIHJldF9pbnQ4KCkgUkVUVVJOUyBiaWdpbnQgQVMK KyQkCitCRUdJTiBSRVRVUk4gMjE0NzQ4MzY0ODsgRU5EOworJCQKK0xBTkdVQUdFIHBscGdzcWwg SU1NVVRBQkxFOworU0VMRUNUIENBU1QoJ2EnIGFzIGludCBERUZBVUxUIHJldF9pbnQ4KCkgT04g Q09OVkVSU0lPTiBFUlJPUik7IC0tZXJyb3IKK0VSUk9SOiAgaW50ZWdlciBvdXQgb2YgcmFuZ2UK K1NFTEVDVCBDQVNUKCdhJyBhcyBkYXRlIERFRkFVTFQgcmV0X2ludDgoKSBPTiBDT05WRVJTSU9O IEVSUk9SKTsgLS1lcnJvcgorRVJST1I6ICBjYW5ub3QgY2FzdCBvbl9lcnJvciBkZWZhdWx0IGV4 cHJlc3Npb24gdG8gdHlwZSBkYXRlCitMSU5FIDE6IFNFTEVDVCBDQVNUKCdhJyBhcyBkYXRlIERF RkFVTFQgcmV0X2ludDgoKSBPTiBDT05WRVJTSU9OIEVSUi4uLgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF4KKy0tIHRlc3QgdmFsaWQgREVGQVVMVCBleHByZXNzaW9u IGZvciBDQVNUID0gT04gQ09OVkVSU0lPTiBFUlJPUgorQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJ T04gcmV0X3NldGludCgpIFJFVFVSTlMgU0VUT0YgaW50ZWdlciBBUworJCQKK0JFR0lOIFJFVFVS TiBRVUVSWSBFWEVDVVRFICdzZWxlY3QgMSB1bmlvbiBhbGwgc2VsZWN0IDEnOyBFTkQ7CiskJAor TEFOR1VBR0UgcGxwZ3NxbCBJTU1VVEFCTEU7CitTRUxFQ1QgQ0FTVCgnYScgYXMgaW50IERFRkFV TFQgcmV0X3NldGludCgpIE9OIENPTlZFUlNJT04gRVJST1IpIEZST00gaG9iYmllc19yOyAtLWVy cm9yCitFUlJPUjogIERFRkFVTFQgZXhwcmVzc2lvbiBtdXN0IG5vdCByZXR1cm4gYSBzZXQKK0xJ TkUgMTogU0VMRUNUIENBU1QoJ2EnIGFzIGludCBERUZBVUxUIHJldF9zZXRpbnQoKSBPTiBDT05W RVJTSU9OIEVSLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitT RUxFQ1QgQ0FTVCgnYScgYXMgaW50IERFRkFVTFQgc3VtKDEpIE9OIENPTlZFUlNJT04gRVJST1Ip OyAtLWVycm9yCitFUlJPUjogIERFRkFVTFQgZXhwcmVzc2lvbiBmdW5jdGlvbiBtdXN0IGJlIGEg bm9ybWFsIGZ1bmN0aW9uCitMSU5FIDE6IFNFTEVDVCBDQVNUKCdhJyBhcyBpbnQgREVGQVVMVCBz dW0oMSkgT04gQ09OVkVSU0lPTiBFUlJPUik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBeCitTRUxFQ1QgQ0FTVCgnYScgYXMgaW50IERFRkFVTFQgc3VtKDEpIG92ZXIo KSBPTiBDT05WRVJTSU9OIEVSUk9SKTsgLS1lcnJvcgorRVJST1I6ICBERUZBVUxUIGV4cHJlc3Np b24gZnVuY3Rpb24gbXVzdCBiZSBhIG5vcm1hbCBmdW5jdGlvbgorTElORSAxOiBTRUxFQ1QgQ0FT VCgnYScgYXMgaW50IERFRkFVTFQgc3VtKDEpIG92ZXIoKSBPTiBDT05WRVJTSU9OIEUuLi4KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK1NFTEVDVCBDQVNUKCdhJyBh cyBpbnQgREVGQVVMVCAnYicgT04gQ09OVkVSU0lPTiBFUlJPUik7IC0tZXJyb3IKK0VSUk9SOiAg aW52YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgaW50ZWdlcjogImIiCitMSU5FIDE6IFNFTEVD VCBDQVNUKCdhJyBhcyBpbnQgREVGQVVMVCAnYicgT04gQ09OVkVSU0lPTiBFUlJPUik7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCistLSB0ZXN0IGFycmF5IGNvZXJj ZQorU0VMRUNUIENBU1QoJ3sxMjMsYWJjLDQ1Nn0nIEFTIGludGVnZXJbXSBERUZBVUxUICd7LTc4 OX0nIE9OIENPTlZFUlNJT04gRVJST1IpOworICBpbnQ0ICAKKy0tLS0tLS0tCisgey03ODl9Ciso MSByb3cpCisKK1NFTEVDVCBDQVNUKCd7MjM0LGRlZiw1Njd9Jzo6dGV4dFtdIEFTIGludGVnZXJb XSBERUZBVUxUICd7LTEwMTF9JyBPTiBDT05WRVJTSU9OIEVSUk9SKTsKKyAgaW50NCAgIAorLS0t LS0tLS0tCisgey0xMDExfQorKDEgcm93KQorCitTRUxFQ1QgQ0FTVChBUlJBWVtbJzEnXSwgWyd0 aHJlZSddLFsnYSddXSBBUyBJTlRFR0VSW10gREVGQVVMVCAnezEsMn0nIE9OIENPTlZFUlNJT04g RVJST1IpOworIGFycmF5IAorLS0tLS0tLQorIHsxLDJ9CisoMSByb3cpCisKK1NFTEVDVCBDQVNU KEFSUkFZW1snMScsICcyJ10sIFsndGhyZWUnLCAnYSddXSBBUyB0ZXh0W10gREVGQVVMVCAnezIx LDIyfScgT04gQ09OVkVSU0lPTiBFUlJPUik7CisgICAgICAgYXJyYXkgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tCisge3sxLDJ9LHt0aHJlZSxhfX0KKygxIHJvdykKKworQ1JFQVRFIFRBQkxF IHRjYXN0KGEgdGV4dFtdLCBiIGludCBHRU5FUkFURUQgQlkgREVGQVVMVCBBUyBJREVOVElUWSk7 CitJTlNFUlQgSU5UTyB0Y2FzdCBWQUxVRVMgKCd7MTJ9JyksICgnezEsYSwgYn0nKSwgKCd7ezEs Mn0sIHtjLGR9fScpLCAoJ3sxM30nKTsKK1NFTEVDVCBDQVNUKHQgQVMgdGV4dFtdIERFRkFVTFQg J3syMSwyMiwgJyB8fCBiIHx8ICd9JyBPTiBDT05WRVJTSU9OIEVSUk9SKSBGUk9NIHRjYXN0IGFz IHQ7CisgICAgIHQgICAgIAorLS0tLS0tLS0tLS0KKyB7MjEsMjIsMX0KKyB7MjEsMjIsMn0KKyB7 MjEsMjIsM30KKyB7MjEsMjIsNH0KKyg0IHJvd3MpCisKK1NFTEVDVCBDQVNUKHQuYSBBUyBpbnRb XSBERUZBVUxUICd7MjEsMjJ9Jzo6aW50W10gfHwgYiBPTiBDT05WRVJTSU9OIEVSUk9SKSBGUk9N IHRjYXN0IGFzIHQ7CisgICAgIGEgICAgIAorLS0tLS0tLS0tLS0KKyB7MTJ9CisgezIxLDIyLDJ9 CisgezIxLDIyLDN9CisgezEzfQorKDQgcm93cykKKworLS0gdGVzdCB3aXRoIGRvbWFpbgorQ1JF QVRFIERPTUFJTiBkX2ludDQyIGFzIGludCBjaGVjayAodmFsdWUgPSA0MikgTk9UIE5VTEw7CitD UkVBVEUgRE9NQUlOIGRfY2hhcjNfbm90X251bGwgYXMgY2hhcigzKSBOT1QgTlVMTDsKK0NSRUFU RSBUWVBFIGNvbXBfZG9tYWluX3dpdGhfdHlwbW9kIEFTIChhIGRfY2hhcjNfbm90X251bGwsIGIg aW50KTsKK1NFTEVDVCBDQVNUKDExIEFTIGRfaW50NDIgREVGQVVMVCA0MSBPTiBDT05WRVJTSU9O IEVSUk9SKTsgLS1lcnJvcgorRVJST1I6ICB2YWx1ZSBmb3IgZG9tYWluIGRfaW50NDIgdmlvbGF0 ZXMgY2hlY2sgY29uc3RyYWludCAiZF9pbnQ0Ml9jaGVjayIKK1NFTEVDVCBDQVNUKDExIEFTIGRf aW50NDIgREVGQVVMVCA0MiBPTiBDT05WRVJTSU9OIEVSUk9SKTsgLS1vaworIGRfaW50NDIgCist LS0tLS0tLS0KKyAgICAgIDQyCisoMSByb3cpCisKK1NFTEVDVCBDQVNUKE5VTEwgQVMgZF9pbnQ0 MiBERUZBVUxUIE5VTEwgT04gQ09OVkVSU0lPTiBFUlJPUik7IC0tZXJyb3IKK0VSUk9SOiAgZG9t YWluIGRfaW50NDIgZG9lcyBub3QgYWxsb3cgbnVsbCB2YWx1ZXMKK1NFTEVDVCBDQVNUKE5VTEwg QVMgZF9pbnQ0MiBERUZBVUxUIDQyIE9OIENPTlZFUlNJT04gRVJST1IpOyAtLW9rCisgZF9pbnQ0 MiAKKy0tLS0tLS0tLQorICAgICAgNDIKKygxIHJvdykKKworU0VMRUNUIENBU1QoJygsNDIpJyBB UyBjb21wX2RvbWFpbl93aXRoX3R5cG1vZCBERUZBVUxUIE5VTEwgT04gQ09OVkVSU0lPTiBFUlJP Uik7CisgY29tcF9kb21haW5fd2l0aF90eXBtb2QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgCisoMSByb3cpCisKK1NFTEVDVCBDQVNUKCcoTlVMTCw0MiknIEFTIGNvbXBfZG9tYWluX3dp dGhfdHlwbW9kIERFRkFVTFQgJygxLDIpJyBPTiBDT05WRVJTSU9OIEVSUk9SKTsKKyBjb21wX2Rv bWFpbl93aXRoX3R5cG1vZCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAoIjEgICIsMikK KygxIHJvdykKKworU0VMRUNUIENBU1QoJyhOVUxMLDQyKScgQVMgY29tcF9kb21haW5fd2l0aF90 eXBtb2QgREVGQVVMVCAnKDEyMzQsMiknIE9OIENPTlZFUlNJT04gRVJST1IpOyAtLWVycm9yCitF UlJPUjogIHZhbHVlIHRvbyBsb25nIGZvciB0eXBlIGNoYXJhY3RlcigzKQorTElORSAxOiAuLi5T VCgnKE5VTEwsNDIpJyBBUyBjb21wX2RvbWFpbl93aXRoX3R5cG1vZCBERUZBVUxUICcoMTIzNCwy KScuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBeCistLXRlc3QgY2FzdCBudW1lcmljIHZhbHVlIHdpdGggZnJhY3Rpb24gdG8g YW5vdGhlciBudW1lcmljIHZhbHVlCitDUkVBVEUgVEFCTEUgc2FmZWNhc3QoY29sMSBmbG9hdDQs IGNvbDIgZmxvYXQ4LCBjb2wzIG51bWVyaWMsIGNvbDQgbnVtZXJpY1tdKTsKK0lOU0VSVCBJTlRP IHNhZmVjYXN0IFZBTFVFUygnMTEuMTIzNCcsICcxMS4xMjM0JywgJzExLjEyMzQnLCAnezExLjEy MzR9Jzo6bnVtZXJpY1tdKTsKK0lOU0VSVCBJTlRPIHNhZmVjYXN0IFZBTFVFUygnaW5mJywgJ2lu ZicsICdpbmYnLCAnezExLjEyMzQsIDEyLCBpbmYsIE5hTn0nOjpudW1lcmljW10pOworSU5TRVJU IElOVE8gc2FmZWNhc3QgVkFMVUVTKCctaW5mJywgJy1pbmYnLCAnLWluZicsICd7MTEuMTIzNCwg MTIsIC1pbmYsIE5hTn0nOjpudW1lcmljW10pOworSU5TRVJUIElOVE8gc2FmZWNhc3QgVkFMVUVT KCdOYU4nLCAnTmFOJywgJ05hTicsICd7MTEuMTIzNCwgMTIsIC1pbmYsIE5hTn0nOjpudW1lcmlj W10pOworU0VMRUNUIGNvbDEgYXMgZmxvYXQ0LAorICAgICAgIENBU1QoY29sMSBBUyBpbnQyIERF RkFVTFQgTlVMTCBPTiBDT05WRVJTSU9OIEVSUk9SKSBhcyB0b19pbnQyLAorICAgICAgIENBU1Qo Y29sMSBBUyBpbnQ0IERFRkFVTFQgTlVMTCBPTiBDT05WRVJTSU9OIEVSUk9SKSBhcyB0b19pbnQ0 LAorICAgICAgIENBU1QoY29sMSBhcyBpbnQ4IERFRkFVTFQgTlVMTCBPTiBDT05WRVJTSU9OIEVS Uk9SKSBhcyB0b19pbnQ4LAorICAgICAgIENBU1QoY29sMSBhcyBmbG9hdDQgREVGQVVMVCBOVUxM IE9OIENPTlZFUlNJT04gRVJST1IpIGFzIHRvX2Zsb2F0NCwKKyAgICAgICBDQVNUKGNvbDEgYXMg ZmxvYXQ4IERFRkFVTFQgTlVMTCBPTiBDT05WRVJTSU9OIEVSUk9SKSBhcyB0b19mbG9hdDgsCisg ICAgICAgQ0FTVChjb2wxIGFzIG51bWVyaWMgREVGQVVMVCBOVUxMIE9OIENPTlZFUlNJT04gRVJS T1IpIGFzIHRvX251bWVyaWMsCisgICAgICAgQ0FTVChjb2wxIGFzIG51bWVyaWMoMTAsMSkgREVG QVVMVCBOVUxMIE9OIENPTlZFUlNJT04gRVJST1IpIGFzIHRvX251bWVyaWNfc2NhbGUKK0ZST00g c2FmZWNhc3Q7CisgIGZsb2F0NCAgIHwgdG9faW50MiB8IHRvX2ludDQgfCB0b19pbnQ4IHwgdG9f ZmxvYXQ0IHwgICAgdG9fZmxvYXQ4ICAgICB8IHRvX251bWVyaWMgfCB0b19udW1lcmljX3NjYWxl IAorLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyAgIDEx LjEyMzQgfCAgICAgIDExIHwgICAgICAxMSB8ICAgICAgMTEgfCAgIDExLjEyMzQgfCAxMS4xMjMz OTk3MzQ0OTcxIHwgICAgMTEuMTIzNCB8ICAgICAgICAgICAgIDExLjEKKyAgSW5maW5pdHkgfCAg ICAgICAgIHwgICAgICAgICB8ICAgICAgICAgfCAgSW5maW5pdHkgfCAgICAgICAgIEluZmluaXR5 IHwgICBJbmZpbml0eSB8ICAgICAgICAgICAgICAgICAKKyAtSW5maW5pdHkgfCAgICAgICAgIHwg ICAgICAgICB8ICAgICAgICAgfCAtSW5maW5pdHkgfCAgICAgICAgLUluZmluaXR5IHwgIC1JbmZp bml0eSB8ICAgICAgICAgICAgICAgICAKKyAgICAgICBOYU4gfCAgICAgICAgIHwgICAgICAgICB8 ICAgICAgICAgfCAgICAgICBOYU4gfCAgICAgICAgICAgICAgTmFOIHwgICAgICAgIE5hTiB8ICAg ICAgICAgICAgICBOYU4KKyg0IHJvd3MpCisKK1NFTEVDVCBjb2wyIGFzIGZsb2F0OCwKKyAgICAg ICBDQVNUKGNvbDIgQVMgaW50MiBERUZBVUxUIE5VTEwgT04gQ09OVkVSU0lPTiBFUlJPUikgYXMg dG9faW50MiwKKyAgICAgICBDQVNUKGNvbDIgQVMgaW50NCBERUZBVUxUIE5VTEwgT04gQ09OVkVS U0lPTiBFUlJPUikgYXMgdG9faW50NCwKKyAgICAgICBDQVNUKGNvbDIgYXMgaW50OCBERUZBVUxU IE5VTEwgT04gQ09OVkVSU0lPTiBFUlJPUikgYXMgdG9faW50OCwKKyAgICAgICBDQVNUKGNvbDIg YXMgZmxvYXQ0IERFRkFVTFQgTlVMTCBPTiBDT05WRVJTSU9OIEVSUk9SKSBhcyB0b19mbG9hdDQs CisgICAgICAgQ0FTVChjb2wyIGFzIGZsb2F0OCBERUZBVUxUIE5VTEwgT04gQ09OVkVSU0lPTiBF UlJPUikgYXMgdG9fZmxvYXQ4LAorICAgICAgIENBU1QoY29sMiBhcyBudW1lcmljIERFRkFVTFQg TlVMTCBPTiBDT05WRVJTSU9OIEVSUk9SKSBhcyB0b19udW1lcmljLAorICAgICAgIENBU1QoY29s MiBhcyBudW1lcmljKDEwLDEpIERFRkFVTFQgTlVMTCBPTiBDT05WRVJTSU9OIEVSUk9SKSBhcyB0 b19udW1lcmljX3NjYWxlCitGUk9NIHNhZmVjYXN0OworICBmbG9hdDggICB8IHRvX2ludDIgfCB0 b19pbnQ0IHwgdG9faW50OCB8IHRvX2Zsb2F0NCB8IHRvX2Zsb2F0OCB8IHRvX251bWVyaWMgfCB0 b19udW1lcmljX3NjYWxlIAorLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LQorICAgMTEuMTIzNCB8ICAgICAgMTEgfCAgICAgIDExIHwgICAgICAxMSB8ICAgMTEuMTIzNCB8 ICAgMTEuMTIzNCB8ICAgIDExLjEyMzQgfCAgICAgICAgICAgICAxMS4xCisgIEluZmluaXR5IHwg ICAgICAgICB8ICAgICAgICAgfCAgICAgICAgIHwgIEluZmluaXR5IHwgIEluZmluaXR5IHwgICBJ bmZpbml0eSB8ICAgICAgICAgICAgICAgICAKKyAtSW5maW5pdHkgfCAgICAgICAgIHwgICAgICAg ICB8ICAgICAgICAgfCAtSW5maW5pdHkgfCAtSW5maW5pdHkgfCAgLUluZmluaXR5IHwgICAgICAg ICAgICAgICAgIAorICAgICAgIE5hTiB8ICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICB8ICAg ICAgIE5hTiB8ICAgICAgIE5hTiB8ICAgICAgICBOYU4gfCAgICAgICAgICAgICAgTmFOCisoNCBy b3dzKQorCitTRUxFQ1QgY29sMyBhcyBudW1lcmljLAorICAgICAgIENBU1QoY29sMyBBUyBpbnQy IERFRkFVTFQgTlVMTCBPTiBDT05WRVJTSU9OIEVSUk9SKSBhcyB0b19pbnQyLAorICAgICAgIENB U1QoY29sMyBBUyBpbnQ0IERFRkFVTFQgTlVMTCBPTiBDT05WRVJTSU9OIEVSUk9SKSBhcyB0b19p bnQ0LAorICAgICAgIENBU1QoY29sMyBhcyBpbnQ4IERFRkFVTFQgTlVMTCBPTiBDT05WRVJTSU9O IEVSUk9SKSBhcyB0b19pbnQ4LAorICAgICAgIENBU1QoY29sMyBhcyBmbG9hdDQgREVGQVVMVCBO VUxMIE9OIENPTlZFUlNJT04gRVJST1IpIGFzIHRvX2Zsb2F0NCwKKyAgICAgICBDQVNUKGNvbDMg YXMgZmxvYXQ4IERFRkFVTFQgTlVMTCBPTiBDT05WRVJTSU9OIEVSUk9SKSBhcyB0b19mbG9hdDgs CisgICAgICAgQ0FTVChjb2wzIGFzIG51bWVyaWMgREVGQVVMVCBOVUxMIE9OIENPTlZFUlNJT04g RVJST1IpIGFzIHRvX251bWVyaWMsCisgICAgICAgQ0FTVChjb2wzIGFzIG51bWVyaWMoMTAsMSkg REVGQVVMVCBOVUxMIE9OIENPTlZFUlNJT04gRVJST1IpIGFzIHRvX251bWVyaWNfc2NhbGUKK0ZS T00gc2FmZWNhc3Q7CisgIG51bWVyaWMgIHwgdG9faW50MiB8IHRvX2ludDQgfCB0b19pbnQ4IHwg dG9fZmxvYXQ0IHwgdG9fZmxvYXQ4IHwgdG9fbnVtZXJpYyB8IHRvX251bWVyaWNfc2NhbGUgCist LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgICAxMS4xMjM0IHwgICAg ICAxMSB8ICAgICAgMTEgfCAgICAgIDExIHwgICAxMS4xMjM0IHwgICAxMS4xMjM0IHwgICAgMTEu MTIzNCB8ICAgICAgICAgICAgIDExLjEKKyAgSW5maW5pdHkgfCAgICAgICAgIHwgICAgICAgICB8 ICAgICAgICAgfCAgSW5maW5pdHkgfCAgSW5maW5pdHkgfCAgIEluZmluaXR5IHwgICAgICAgICAg ICAgICAgIAorIC1JbmZpbml0eSB8ICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICB8IC1JbmZp bml0eSB8IC1JbmZpbml0eSB8ICAtSW5maW5pdHkgfCAgICAgICAgICAgICAgICAgCisgICAgICAg TmFOIHwgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgIHwgICAgICAgTmFOIHwgICAgICAgTmFO IHwgICAgICAgIE5hTiB8ICAgICAgICAgICAgICBOYU4KKyg0IHJvd3MpCisKK1NFTEVDVCBjb2w0 IGFzIG51bV9hcnIsCisgICAgICAgQ0FTVChjb2w0IEFTIGludDJbXSBERUZBVUxUIE5VTEwgT04g Q09OVkVSU0lPTiBFUlJPUikgYXMgaW50MmFyciwKKyAgICAgICBDQVNUKGNvbDQgQVMgaW50NFtd IERFRkFVTFQgTlVMTCBPTiBDT05WRVJTSU9OIEVSUk9SKSBhcyBpbnQ0YXJyLAorICAgICAgIENB U1QoY29sNCBhcyBpbnQ4W10gREVGQVVMVCBOVUxMIE9OIENPTlZFUlNJT04gRVJST1IpIGFzIGlu dDhhcnIsCisgICAgICAgQ0FTVChjb2w0IGFzIGZsb2F0NFtdIERFRkFVTFQgTlVMTCBPTiBDT05W RVJTSU9OIEVSUk9SKSBhcyBmNGFyciwKKyAgICAgICBDQVNUKGNvbDQgYXMgZmxvYXQ4W10gREVG QVVMVCBOVUxMIE9OIENPTlZFUlNJT04gRVJST1IpIGFzIGY4YXJyLAorICAgICAgIENBU1QoY29s NCBhcyBudW1lcmljKDEwLDEpW10gREVGQVVMVCBOVUxMIE9OIENPTlZFUlNJT04gRVJST1IpIGFz IG51bWFycgorRlJPTSBzYWZlY2FzdDsKKyAgICAgICAgICBudW1fYXJyICAgICAgICAgICB8IGlu dDJhcnIgfCBpbnQ0YXJyIHwgaW50OGFyciB8ICAgICAgICAgICBmNGFyciAgICAgICAgICAgIHwg ICAgICAgICAgIGY4YXJyICAgICAgICAgICAgfCBudW1hcnIgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLQorIHsxMS4x MjM0fSAgICAgICAgICAgICAgICAgIHwgezExfSAgICB8IHsxMX0gICAgfCB7MTF9ICAgIHwgezEx LjEyMzR9ICAgICAgICAgICAgICAgICAgfCB7MTEuMTIzNH0gICAgICAgICAgICAgICAgICB8IHsx MS4xfQorIHsxMS4xMjM0LDEyLEluZmluaXR5LE5hTn0gIHwgICAgICAgICB8ICAgICAgICAgfCAg ICAgICAgIHwgezExLjEyMzQsMTIsSW5maW5pdHksTmFOfSAgfCB7MTEuMTIzNCwxMixJbmZpbml0 eSxOYU59ICB8IAorIHsxMS4xMjM0LDEyLC1JbmZpbml0eSxOYU59IHwgICAgICAgICB8ICAgICAg ICAgfCAgICAgICAgIHwgezExLjEyMzQsMTIsLUluZmluaXR5LE5hTn0gfCB7MTEuMTIzNCwxMiwt SW5maW5pdHksTmFOfSB8IAorIHsxMS4xMjM0LDEyLC1JbmZpbml0eSxOYU59IHwgICAgICAgICB8 ICAgICAgICAgfCAgICAgICAgIHwgezExLjEyMzQsMTIsLUluZmluaXR5LE5hTn0gfCB7MTEuMTIz NCwxMiwtSW5maW5pdHksTmFOfSB8IAorKDQgcm93cykKKworLS0gdGVzdCBkZXBhcnNlCitDUkVB VEUgVklFVyBzYWZlY2FzdHZpZXcgQVMKK1NFTEVDVCBDQVNUKCcxMjM0JyBhcyBjaGFyKDMpIERF RkFVTFQgLTExMTEgT04gQ09OVkVSU0lPTiBFUlJPUiksCisgICAgICAgQ0FTVCgxIGFzIGRhdGUg REVGQVVMVCAoKG5vdygpOjpkYXRlICsgcmFuZG9tKG1pbj0+MSwgbWF4PT4xOjppbnQpKSkgT04g Q09OVkVSU0lPTiBFUlJPUikgYXMgc2FmZWNhc3QsCisgICAgICAgQ0FTVChBUlJBWVtbJzEnXSwg Wyd0aHJlZSddLFsnYSddXSBBUyBJTlRFR0VSW10gREVGQVVMVCAnezEsMn0nIE9OIENPTlZFUlNJ T04gRVJST1IpIGFzIGNhc3QxLAorICAgICAgIENBU1QoQVJSQVlbWycxJywgJzInXSwgWyd0aHJl ZScsICdhJ11dIEFTIHRleHRbXSBERUZBVUxUICd7MjEsMjJ9JyBPTiBDT05WRVJTSU9OIEVSUk9S KSBhcyBjYXN0MjsKK1xzdiBzYWZlY2FzdHZpZXcKK0NSRUFURSBPUiBSRVBMQUNFIFZJRVcgcHVi bGljLnNhZmVjYXN0dmlldyBBUworIFNFTEVDVCBDQVNUKCcxMjM0JyBBUyBjaGFyYWN0ZXIoMykg REVGQVVMVCAnLTExMTEnOjppbnRlZ2VyOjpjaGFyYWN0ZXIoMykgT04gQ09OVkVSU0lPTiBFUlJP UikgQVMgYnBjaGFyLAorICAgIENBU1QoMSBBUyBkYXRlIERFRkFVTFQgbm93KCk6OmRhdGUgKyBy YW5kb20obWluID0+IDEsIG1heCA9PiAxKSBPTiBDT05WRVJTSU9OIEVSUk9SKSBBUyBzYWZlY2Fz dCwKKyAgICBDQVNUKEFSUkFZW0FSUkFZWycxJ10sIEFSUkFZWyd0aHJlZSddLCBBUlJBWVsnYSdd XSBBUyBpbnRlZ2VyW10gREVGQVVMVCAnezEsMn0nOjppbnRlZ2VyW10gT04gQ09OVkVSU0lPTiBF UlJPUikgQVMgY2FzdDEsCisgICAgQ0FTVChBUlJBWVtBUlJBWVsnMSc6OnRleHQsICcyJzo6dGV4 dF0sIEFSUkFZWyd0aHJlZSc6OnRleHQsICdhJzo6dGV4dF1dIEFTIHRleHRbXSBERUZBVUxUICd7 MjEsMjJ9Jzo6dGV4dFtdIE9OIENPTlZFUlNJT04gRVJST1IpIEFTIGNhc3QyCitDUkVBVEUgSU5E RVggY2FzdF9lcnJvcl9pZHggIE9OIGhvYmJpZXNfcigoY2FzdChuYW1lIGFzIGludCBERUZBVUxU IHJhbmRvbShtaW49PjEsIG1heD0+MSkgT04gQ09OVkVSU0lPTiBFUlJPUikpKTsgLS1lcnJvcgor RVJST1I6ICBmdW5jdGlvbnMgaW4gaW5kZXggZXhwcmVzc2lvbiBtdXN0IGJlIG1hcmtlZCBJTU1V VEFCTEUKK1JFU0VUIGV4dHJhX2Zsb2F0X2RpZ2l0czsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUgYi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVk dWxlCmluZGV4IGZiZmZjNjdhZTYwLi5lYmJkNDU0YzQ1MCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVs X3NjaGVkdWxlCkBAIC04MSw3ICs4MSw3IEBAIHRlc3Q6IGJyaW5fYmxvb20gYnJpbl9tdWx0aQog dGVzdDogY3JlYXRlX3RhYmxlX2xpa2UgYWx0ZXJfZ2VuZXJpYyBhbHRlcl9vcGVyYXRvciBtaXNj IGFzeW5jIGRic2l6ZSBtZXJnZSBtaXNjX2Z1bmN0aW9ucyBzeXN2aWV3cyB0c3JmIHRpZCB0aWRz Y2FuIHRpZHJhbmdlc2NhbiBjb2xsYXRlLnV0ZjggY29sbGF0ZS5pY3UudXRmOCBpbmNyZW1lbnRh bF9zb3J0IGNyZWF0ZV9yb2xlIHdpdGhvdXRfb3ZlcmxhcHMgZ2VuZXJhdGVkX3ZpcnR1YWwKIAog IyBjb2xsYXRlLmxpbnV4LnV0ZjggYW5kIGNvbGxhdGUuaWN1LnV0ZjggdGVzdHMgY2Fubm90IGJl IHJ1biBpbiBwYXJhbGxlbCB3aXRoIGVhY2ggb3RoZXIKLXRlc3Q6IHJ1bGVzIHBzcWwgcHNxbF9j cm9zc3RhYiBwc3FsX3BpcGVsaW5lIGFtdXRpbHMgc3RhdHNfZXh0IGNvbGxhdGUubGludXgudXRm OCBjb2xsYXRlLndpbmRvd3Mud2luMTI1MgordGVzdDogcnVsZXMgcHNxbCBwc3FsX2Nyb3NzdGFi IHBzcWxfcGlwZWxpbmUgYW11dGlscyBzdGF0c19leHQgY29sbGF0ZS5saW51eC51dGY4IGNvbGxh dGUud2luZG93cy53aW4xMjUyIGNhc3QKIAogIyAtLS0tLS0tLS0tCiAjIFJ1biB0aGVzZSBhbG9u ZSBzbyB0aGV5IGRvbid0IHJ1biBvdXQgb2YgcGFyYWxsZWwgd29ya2VycwpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvcmVncmVzcy9zcWwvY2FzdC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jYXN0 LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjU3ZGIzOTM5OTYK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jYXN0LnNxbApAQCAtMCww ICsxLDEwOSBAQAorU0VUIGV4dHJhX2Zsb2F0X2RpZ2l0cyA9IDA7CisKKy0tIENBU1QgREVGQVVM VCBPTiBDT05WRVJTSU9OIEVSUk9SCitWQUxVRVMgKENBU1QoJ2Vycm9yJyBBUyBpbnRlZ2VyIEVS Uk9SIE9OIENPTlZFUlNJT04gRVJST1IpKTsgLS1lcnJvcgorVkFMVUVTIChDQVNUKCdlcnJvcicg QVMgaW50ZWdlciBOVUxMIE9OIENPTlZFUlNJT04gRVJST1IpKTsKK1ZBTFVFUyAoQ0FTVCgnZXJy b3InIEFTIGludGVnZXIgREVGQVVMVCA0MiBPTiBDT05WRVJTSU9OIEVSUk9SKSk7CitTRUxFQ1Qg Q0FTVCgxIEFTIGRhdGUgREVGQVVMVCBOVUxMIE9OIENPTlZFUlNJT04gRVJST1IpOworU0VMRUNU IENBU1QoMTo6bnVtZXJpYyBBUyBtb25leSBERUZBVUxUIE5VTEwgT04gQ09OVkVSU0lPTiBFUlJP Uik7CisKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIHJldF9pbnQ4KCkgUkVUVVJOUyBiaWdp bnQgQVMKKyQkCitCRUdJTiBSRVRVUk4gMjE0NzQ4MzY0ODsgRU5EOworJCQKK0xBTkdVQUdFIHBs cGdzcWwgSU1NVVRBQkxFOworCitTRUxFQ1QgQ0FTVCgnYScgYXMgaW50IERFRkFVTFQgcmV0X2lu dDgoKSBPTiBDT05WRVJTSU9OIEVSUk9SKTsgLS1lcnJvcgorU0VMRUNUIENBU1QoJ2EnIGFzIGRh dGUgREVGQVVMVCByZXRfaW50OCgpIE9OIENPTlZFUlNJT04gRVJST1IpOyAtLWVycm9yCisKKy0t IHRlc3QgdmFsaWQgREVGQVVMVCBleHByZXNzaW9uIGZvciBDQVNUID0gT04gQ09OVkVSU0lPTiBF UlJPUgorQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gcmV0X3NldGludCgpIFJFVFVSTlMgU0VU T0YgaW50ZWdlciBBUworJCQKK0JFR0lOIFJFVFVSTiBRVUVSWSBFWEVDVVRFICdzZWxlY3QgMSB1 bmlvbiBhbGwgc2VsZWN0IDEnOyBFTkQ7CiskJAorTEFOR1VBR0UgcGxwZ3NxbCBJTU1VVEFCTEU7 CisKK1NFTEVDVCBDQVNUKCdhJyBhcyBpbnQgREVGQVVMVCByZXRfc2V0aW50KCkgT04gQ09OVkVS U0lPTiBFUlJPUikgRlJPTSBob2JiaWVzX3I7IC0tZXJyb3IKK1NFTEVDVCBDQVNUKCdhJyBhcyBp bnQgREVGQVVMVCBzdW0oMSkgT04gQ09OVkVSU0lPTiBFUlJPUik7IC0tZXJyb3IKK1NFTEVDVCBD QVNUKCdhJyBhcyBpbnQgREVGQVVMVCBzdW0oMSkgb3ZlcigpIE9OIENPTlZFUlNJT04gRVJST1Ip OyAtLWVycm9yCitTRUxFQ1QgQ0FTVCgnYScgYXMgaW50IERFRkFVTFQgJ2InIE9OIENPTlZFUlNJ T04gRVJST1IpOyAtLWVycm9yCisKKy0tIHRlc3QgYXJyYXkgY29lcmNlCitTRUxFQ1QgQ0FTVCgn ezEyMyxhYmMsNDU2fScgQVMgaW50ZWdlcltdIERFRkFVTFQgJ3stNzg5fScgT04gQ09OVkVSU0lP TiBFUlJPUik7CitTRUxFQ1QgQ0FTVCgnezIzNCxkZWYsNTY3fSc6OnRleHRbXSBBUyBpbnRlZ2Vy W10gREVGQVVMVCAney0xMDExfScgT04gQ09OVkVSU0lPTiBFUlJPUik7CitTRUxFQ1QgQ0FTVChB UlJBWVtbJzEnXSwgWyd0aHJlZSddLFsnYSddXSBBUyBJTlRFR0VSW10gREVGQVVMVCAnezEsMn0n IE9OIENPTlZFUlNJT04gRVJST1IpOworU0VMRUNUIENBU1QoQVJSQVlbWycxJywgJzInXSwgWyd0 aHJlZScsICdhJ11dIEFTIHRleHRbXSBERUZBVUxUICd7MjEsMjJ9JyBPTiBDT05WRVJTSU9OIEVS Uk9SKTsKKworQ1JFQVRFIFRBQkxFIHRjYXN0KGEgdGV4dFtdLCBiIGludCBHRU5FUkFURUQgQlkg REVGQVVMVCBBUyBJREVOVElUWSk7CitJTlNFUlQgSU5UTyB0Y2FzdCBWQUxVRVMgKCd7MTJ9Jyks ICgnezEsYSwgYn0nKSwgKCd7ezEsMn0sIHtjLGR9fScpLCAoJ3sxM30nKTsKK1NFTEVDVCBDQVNU KHQgQVMgdGV4dFtdIERFRkFVTFQgJ3syMSwyMiwgJyB8fCBiIHx8ICd9JyBPTiBDT05WRVJTSU9O IEVSUk9SKSBGUk9NIHRjYXN0IGFzIHQ7CitTRUxFQ1QgQ0FTVCh0LmEgQVMgaW50W10gREVGQVVM VCAnezIxLDIyfSc6OmludFtdIHx8IGIgT04gQ09OVkVSU0lPTiBFUlJPUikgRlJPTSB0Y2FzdCBh cyB0OworCistLSB0ZXN0IHdpdGggZG9tYWluCitDUkVBVEUgRE9NQUlOIGRfaW50NDIgYXMgaW50 IGNoZWNrICh2YWx1ZSA9IDQyKSBOT1QgTlVMTDsKK0NSRUFURSBET01BSU4gZF9jaGFyM19ub3Rf bnVsbCBhcyBjaGFyKDMpIE5PVCBOVUxMOworQ1JFQVRFIFRZUEUgY29tcF9kb21haW5fd2l0aF90 eXBtb2QgQVMgKGEgZF9jaGFyM19ub3RfbnVsbCwgYiBpbnQpOworU0VMRUNUIENBU1QoMTEgQVMg ZF9pbnQ0MiBERUZBVUxUIDQxIE9OIENPTlZFUlNJT04gRVJST1IpOyAtLWVycm9yCitTRUxFQ1Qg Q0FTVCgxMSBBUyBkX2ludDQyIERFRkFVTFQgNDIgT04gQ09OVkVSU0lPTiBFUlJPUik7IC0tb2sK K1NFTEVDVCBDQVNUKE5VTEwgQVMgZF9pbnQ0MiBERUZBVUxUIE5VTEwgT04gQ09OVkVSU0lPTiBF UlJPUik7IC0tZXJyb3IKK1NFTEVDVCBDQVNUKE5VTEwgQVMgZF9pbnQ0MiBERUZBVUxUIDQyIE9O IENPTlZFUlNJT04gRVJST1IpOyAtLW9rCitTRUxFQ1QgQ0FTVCgnKCw0MiknIEFTIGNvbXBfZG9t YWluX3dpdGhfdHlwbW9kIERFRkFVTFQgTlVMTCBPTiBDT05WRVJTSU9OIEVSUk9SKTsKK1NFTEVD VCBDQVNUKCcoTlVMTCw0MiknIEFTIGNvbXBfZG9tYWluX3dpdGhfdHlwbW9kIERFRkFVTFQgJygx LDIpJyBPTiBDT05WRVJTSU9OIEVSUk9SKTsKK1NFTEVDVCBDQVNUKCcoTlVMTCw0MiknIEFTIGNv bXBfZG9tYWluX3dpdGhfdHlwbW9kIERFRkFVTFQgJygxMjM0LDIpJyBPTiBDT05WRVJTSU9OIEVS Uk9SKTsgLS1lcnJvcgorCistLXRlc3QgY2FzdCBudW1lcmljIHZhbHVlIHdpdGggZnJhY3Rpb24g dG8gYW5vdGhlciBudW1lcmljIHZhbHVlCitDUkVBVEUgVEFCTEUgc2FmZWNhc3QoY29sMSBmbG9h dDQsIGNvbDIgZmxvYXQ4LCBjb2wzIG51bWVyaWMsIGNvbDQgbnVtZXJpY1tdKTsKK0lOU0VSVCBJ TlRPIHNhZmVjYXN0IFZBTFVFUygnMTEuMTIzNCcsICcxMS4xMjM0JywgJzExLjEyMzQnLCAnezEx LjEyMzR9Jzo6bnVtZXJpY1tdKTsKK0lOU0VSVCBJTlRPIHNhZmVjYXN0IFZBTFVFUygnaW5mJywg J2luZicsICdpbmYnLCAnezExLjEyMzQsIDEyLCBpbmYsIE5hTn0nOjpudW1lcmljW10pOworSU5T RVJUIElOVE8gc2FmZWNhc3QgVkFMVUVTKCctaW5mJywgJy1pbmYnLCAnLWluZicsICd7MTEuMTIz NCwgMTIsIC1pbmYsIE5hTn0nOjpudW1lcmljW10pOworSU5TRVJUIElOVE8gc2FmZWNhc3QgVkFM VUVTKCdOYU4nLCAnTmFOJywgJ05hTicsICd7MTEuMTIzNCwgMTIsIC1pbmYsIE5hTn0nOjpudW1l cmljW10pOworCitTRUxFQ1QgY29sMSBhcyBmbG9hdDQsCisgICAgICAgQ0FTVChjb2wxIEFTIGlu dDIgREVGQVVMVCBOVUxMIE9OIENPTlZFUlNJT04gRVJST1IpIGFzIHRvX2ludDIsCisgICAgICAg Q0FTVChjb2wxIEFTIGludDQgREVGQVVMVCBOVUxMIE9OIENPTlZFUlNJT04gRVJST1IpIGFzIHRv X2ludDQsCisgICAgICAgQ0FTVChjb2wxIGFzIGludDggREVGQVVMVCBOVUxMIE9OIENPTlZFUlNJ T04gRVJST1IpIGFzIHRvX2ludDgsCisgICAgICAgQ0FTVChjb2wxIGFzIGZsb2F0NCBERUZBVUxU IE5VTEwgT04gQ09OVkVSU0lPTiBFUlJPUikgYXMgdG9fZmxvYXQ0LAorICAgICAgIENBU1QoY29s MSBhcyBmbG9hdDggREVGQVVMVCBOVUxMIE9OIENPTlZFUlNJT04gRVJST1IpIGFzIHRvX2Zsb2F0 OCwKKyAgICAgICBDQVNUKGNvbDEgYXMgbnVtZXJpYyBERUZBVUxUIE5VTEwgT04gQ09OVkVSU0lP TiBFUlJPUikgYXMgdG9fbnVtZXJpYywKKyAgICAgICBDQVNUKGNvbDEgYXMgbnVtZXJpYygxMCwx KSBERUZBVUxUIE5VTEwgT04gQ09OVkVSU0lPTiBFUlJPUikgYXMgdG9fbnVtZXJpY19zY2FsZQor RlJPTSBzYWZlY2FzdDsKKworU0VMRUNUIGNvbDIgYXMgZmxvYXQ4LAorICAgICAgIENBU1QoY29s MiBBUyBpbnQyIERFRkFVTFQgTlVMTCBPTiBDT05WRVJTSU9OIEVSUk9SKSBhcyB0b19pbnQyLAor ICAgICAgIENBU1QoY29sMiBBUyBpbnQ0IERFRkFVTFQgTlVMTCBPTiBDT05WRVJTSU9OIEVSUk9S KSBhcyB0b19pbnQ0LAorICAgICAgIENBU1QoY29sMiBhcyBpbnQ4IERFRkFVTFQgTlVMTCBPTiBD T05WRVJTSU9OIEVSUk9SKSBhcyB0b19pbnQ4LAorICAgICAgIENBU1QoY29sMiBhcyBmbG9hdDQg REVGQVVMVCBOVUxMIE9OIENPTlZFUlNJT04gRVJST1IpIGFzIHRvX2Zsb2F0NCwKKyAgICAgICBD QVNUKGNvbDIgYXMgZmxvYXQ4IERFRkFVTFQgTlVMTCBPTiBDT05WRVJTSU9OIEVSUk9SKSBhcyB0 b19mbG9hdDgsCisgICAgICAgQ0FTVChjb2wyIGFzIG51bWVyaWMgREVGQVVMVCBOVUxMIE9OIENP TlZFUlNJT04gRVJST1IpIGFzIHRvX251bWVyaWMsCisgICAgICAgQ0FTVChjb2wyIGFzIG51bWVy aWMoMTAsMSkgREVGQVVMVCBOVUxMIE9OIENPTlZFUlNJT04gRVJST1IpIGFzIHRvX251bWVyaWNf c2NhbGUKK0ZST00gc2FmZWNhc3Q7CisKK1NFTEVDVCBjb2wzIGFzIG51bWVyaWMsCisgICAgICAg Q0FTVChjb2wzIEFTIGludDIgREVGQVVMVCBOVUxMIE9OIENPTlZFUlNJT04gRVJST1IpIGFzIHRv X2ludDIsCisgICAgICAgQ0FTVChjb2wzIEFTIGludDQgREVGQVVMVCBOVUxMIE9OIENPTlZFUlNJ T04gRVJST1IpIGFzIHRvX2ludDQsCisgICAgICAgQ0FTVChjb2wzIGFzIGludDggREVGQVVMVCBO VUxMIE9OIENPTlZFUlNJT04gRVJST1IpIGFzIHRvX2ludDgsCisgICAgICAgQ0FTVChjb2wzIGFz IGZsb2F0NCBERUZBVUxUIE5VTEwgT04gQ09OVkVSU0lPTiBFUlJPUikgYXMgdG9fZmxvYXQ0LAor ICAgICAgIENBU1QoY29sMyBhcyBmbG9hdDggREVGQVVMVCBOVUxMIE9OIENPTlZFUlNJT04gRVJS T1IpIGFzIHRvX2Zsb2F0OCwKKyAgICAgICBDQVNUKGNvbDMgYXMgbnVtZXJpYyBERUZBVUxUIE5V TEwgT04gQ09OVkVSU0lPTiBFUlJPUikgYXMgdG9fbnVtZXJpYywKKyAgICAgICBDQVNUKGNvbDMg YXMgbnVtZXJpYygxMCwxKSBERUZBVUxUIE5VTEwgT04gQ09OVkVSU0lPTiBFUlJPUikgYXMgdG9f bnVtZXJpY19zY2FsZQorRlJPTSBzYWZlY2FzdDsKKworU0VMRUNUIGNvbDQgYXMgbnVtX2FyciwK KyAgICAgICBDQVNUKGNvbDQgQVMgaW50MltdIERFRkFVTFQgTlVMTCBPTiBDT05WRVJTSU9OIEVS Uk9SKSBhcyBpbnQyYXJyLAorICAgICAgIENBU1QoY29sNCBBUyBpbnQ0W10gREVGQVVMVCBOVUxM IE9OIENPTlZFUlNJT04gRVJST1IpIGFzIGludDRhcnIsCisgICAgICAgQ0FTVChjb2w0IGFzIGlu dDhbXSBERUZBVUxUIE5VTEwgT04gQ09OVkVSU0lPTiBFUlJPUikgYXMgaW50OGFyciwKKyAgICAg ICBDQVNUKGNvbDQgYXMgZmxvYXQ0W10gREVGQVVMVCBOVUxMIE9OIENPTlZFUlNJT04gRVJST1Ip IGFzIGY0YXJyLAorICAgICAgIENBU1QoY29sNCBhcyBmbG9hdDhbXSBERUZBVUxUIE5VTEwgT04g Q09OVkVSU0lPTiBFUlJPUikgYXMgZjhhcnIsCisgICAgICAgQ0FTVChjb2w0IGFzIG51bWVyaWMo MTAsMSlbXSBERUZBVUxUIE5VTEwgT04gQ09OVkVSU0lPTiBFUlJPUikgYXMgbnVtYXJyCitGUk9N IHNhZmVjYXN0OworCistLSB0ZXN0IGRlcGFyc2UKK0NSRUFURSBWSUVXIHNhZmVjYXN0dmlldyBB UworU0VMRUNUIENBU1QoJzEyMzQnIGFzIGNoYXIoMykgREVGQVVMVCAtMTExMSBPTiBDT05WRVJT SU9OIEVSUk9SKSwKKyAgICAgICBDQVNUKDEgYXMgZGF0ZSBERUZBVUxUICgobm93KCk6OmRhdGUg KyByYW5kb20obWluPT4xLCBtYXg9PjE6OmludCkpKSBPTiBDT05WRVJTSU9OIEVSUk9SKSBhcyBz YWZlY2FzdCwKKyAgICAgICBDQVNUKEFSUkFZW1snMSddLCBbJ3RocmVlJ10sWydhJ11dIEFTIElO VEVHRVJbXSBERUZBVUxUICd7MSwyfScgT04gQ09OVkVSU0lPTiBFUlJPUikgYXMgY2FzdDEsCisg ICAgICAgQ0FTVChBUlJBWVtbJzEnLCAnMiddLCBbJ3RocmVlJywgJ2EnXV0gQVMgdGV4dFtdIERF RkFVTFQgJ3syMSwyMn0nIE9OIENPTlZFUlNJT04gRVJST1IpIGFzIGNhc3QyOworXHN2IHNhZmVj YXN0dmlldworCitDUkVBVEUgSU5ERVggY2FzdF9lcnJvcl9pZHggIE9OIGhvYmJpZXNfcigoY2Fz dChuYW1lIGFzIGludCBERUZBVUxUIHJhbmRvbShtaW49PjEsIG1heD0+MSkgT04gQ09OVkVSU0lP TiBFUlJPUikpKTsgLS1lcnJvcgorUkVTRVQgZXh0cmFfZmxvYXRfZGlnaXRzOwpkaWZmIC0tZ2l0 IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdAppbmRleCBlNmYyZTkzYjJkNi4uNWIzMmRmM2EyZGIgMTAwNjQ0Ci0tLSBh L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0CkBAIC0yNjUyLDYgKzI2NTIsOSBAQCBTVFJMRU4KIFNWCiBTWU5DSFJP TklaQVRJT05fQkFSUklFUgogU1lTVEVNX0lORk8KK1NhZmVUeXBlQ2FzdAorU2FmZVR5cGVDYXN0 RXhwcgorU2FmZVR5cGVDYXN0U3RhdGUKIFNhbXBsZVNjYW4KIFNhbXBsZVNjYW5HZXRTYW1wbGVT aXplX2Z1bmN0aW9uCiBTYW1wbGVTY2FuU3RhdGUKLS0gCjIuMzQuMQoK --000000000000cc4699063b476a14--